diff options
author | Andreas Huber <andih@google.com> | 2010-10-12 14:17:45 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-10-12 16:05:23 -0700 |
commit | 9adf466021d37a5062d7d3361e14bfd9e7ffeba6 (patch) | |
tree | 32065c7763d46863e76d9f78ba4c76f0117ff2dc /media/libmediaplayerservice | |
parent | a7c76d8307a3b49bf5b8fdda3543455b0e5dd64c (diff) | |
download | frameworks_base-9adf466021d37a5062d7d3361e14bfd9e7ffeba6.zip frameworks_base-9adf466021d37a5062d7d3361e14bfd9e7ffeba6.tar.gz frameworks_base-9adf466021d37a5062d7d3361e14bfd9e7ffeba6.tar.bz2 |
Support for writing to MPEG2 transport stream files.
Change-Id: If3b7a807bc224a4b1cb2236537c3ebdc5aee0d97
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r-- | media/libmediaplayerservice/StagefrightRecorder.cpp | 50 | ||||
-rw-r--r-- | media/libmediaplayerservice/StagefrightRecorder.h | 1 |
2 files changed, 51 insertions, 0 deletions
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index cf01ff6..d37d83d 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -24,6 +24,7 @@ #include <media/stagefright/AudioSource.h> #include <media/stagefright/AMRWriter.h> #include <media/stagefright/CameraSource.h> +#include <media/stagefright/MPEG2TSWriter.h> #include <media/stagefright/MPEG4Writer.h> #include <media/stagefright/MediaDebug.h> #include <media/stagefright/MediaDefs.h> @@ -632,6 +633,9 @@ status_t StagefrightRecorder::start() { case OUTPUT_FORMAT_RTP_AVP: return startRTPRecording(); + case OUTPUT_FORMAT_MPEG2TS: + return startMPEG2TSRecording(); + default: LOGE("Unsupported output file format: %d", mOutputFormat); return UNKNOWN_ERROR; @@ -799,6 +803,52 @@ status_t StagefrightRecorder::startRTPRecording() { return mWriter->start(); } +status_t StagefrightRecorder::startMPEG2TSRecording() { + CHECK_EQ(mOutputFormat, OUTPUT_FORMAT_MPEG2TS); + + sp<MediaWriter> writer = new MPEG2TSWriter(dup(mOutputFd)); + + if (mAudioSource != AUDIO_SOURCE_LIST_END) { + if (mAudioEncoder != AUDIO_ENCODER_AAC) { + return ERROR_UNSUPPORTED; + } + + status_t err = setupAudioEncoder(writer); + + if (err != OK) { + return err; + } + } + + if (mVideoSource == VIDEO_SOURCE_DEFAULT + || mVideoSource == VIDEO_SOURCE_CAMERA) { + if (mVideoEncoder != VIDEO_ENCODER_H264) { + return ERROR_UNSUPPORTED; + } + + sp<MediaSource> encoder; + status_t err = setupVideoEncoder(&encoder); + + if (err != OK) { + return err; + } + + writer->addSource(encoder); + } + + if (mMaxFileDurationUs != 0) { + writer->setMaxFileDuration(mMaxFileDurationUs); + } + + if (mMaxFileSizeBytes != 0) { + writer->setMaxFileSize(mMaxFileSizeBytes); + } + + mWriter = writer; + + return mWriter->start(); +} + void StagefrightRecorder::clipVideoFrameRate() { LOGV("clipVideoFrameRate: encoder %d", mVideoEncoder); int minFrameRate = mEncoderProfiles->getVideoEncoderParamByName( diff --git a/media/libmediaplayerservice/StagefrightRecorder.h b/media/libmediaplayerservice/StagefrightRecorder.h index 216f6bc..ad0dfa0 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.h +++ b/media/libmediaplayerservice/StagefrightRecorder.h @@ -102,6 +102,7 @@ private: status_t startAMRRecording(); status_t startAACRecording(); status_t startRTPRecording(); + status_t startMPEG2TSRecording(); sp<MediaSource> createAudioSource(); status_t setupCameraSource(); status_t setupAudioEncoder(const sp<MediaWriter>& writer); |