summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-10-12 14:17:45 -0700
committerAndreas Huber <andih@google.com>2010-10-12 16:05:23 -0700
commit59b7dc39ea8332d3418a599e51447d7edb612ac4 (patch)
tree30d77dd5cca3f58b3902df86e7df1dab42abc0f2 /media/libmediaplayerservice
parent2bc940b4f961e588459c83862b2c6bea314a4027 (diff)
downloadframeworks_av-59b7dc39ea8332d3418a599e51447d7edb612ac4.zip
frameworks_av-59b7dc39ea8332d3418a599e51447d7edb612ac4.tar.gz
frameworks_av-59b7dc39ea8332d3418a599e51447d7edb612ac4.tar.bz2
Support for writing to MPEG2 transport stream files.
Change-Id: If3b7a807bc224a4b1cb2236537c3ebdc5aee0d97
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r--media/libmediaplayerservice/StagefrightRecorder.cpp50
-rw-r--r--media/libmediaplayerservice/StagefrightRecorder.h1
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);