From 3db62dfc5102247d415df4667bd9609e669fc022 Mon Sep 17 00:00:00 2001 From: ztenghui Date: Fri, 22 Feb 2013 14:32:59 -0800 Subject: Clean up the native code to match Java update 1. Add flags to match the java side change. 2. Update the interface. bug:7991013 Change-Id: I8ffe84c466b2a68e2e1e48b35b78db9e44640265 --- cmds/stagefright/muxer.cpp | 3 ++- include/media/stagefright/MediaMuxer.h | 19 +++++++++++++++++-- media/libstagefright/MediaMuxer.cpp | 23 ++++++++++++++--------- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/cmds/stagefright/muxer.cpp b/cmds/stagefright/muxer.cpp index 1b127c7..fac2acc 100644 --- a/cmds/stagefright/muxer.cpp +++ b/cmds/stagefright/muxer.cpp @@ -69,7 +69,8 @@ static int muxing( ALOGV("input file %s, output file %s", path, outputFileName); ALOGV("useAudio %d, useVideo %d", useAudio, useVideo); - sp muxer = new MediaMuxer(outputFileName); + sp muxer = new MediaMuxer(outputFileName, + MediaMuxer::OUTPUT_FORMAT_MPEG_4); size_t trackCount = extractor->countTracks(); // Map the extractor's track index to the muxer's track index. diff --git a/include/media/stagefright/MediaMuxer.h b/include/media/stagefright/MediaMuxer.h index 27a141e..167d0d9 100644 --- a/include/media/stagefright/MediaMuxer.h +++ b/include/media/stagefright/MediaMuxer.h @@ -40,11 +40,25 @@ struct MPEG4Writer; // deleting the output file after stop. struct MediaMuxer : public RefBase { public: + // Please update media/java/android/media/MediaMuxer.java if the + // SampleFlags is updated. + enum SampleFlags { + SAMPLE_FLAG_SYNC = 1, + }; + + // Please update media/java/android/media/MediaMuxer.java if the + // OutputFormat is updated. + enum OutputFormat { + OUTPUT_FORMAT_MPEG_4 = 0, + OUTPUT_FORMAT_LIST_END // must be last - used to validate format type + }; + // Construct the muxer with the output file path. - MediaMuxer(const char* pathOut); + MediaMuxer(const char *path, OutputFormat format); + // Construct the muxer with the file descriptor. Note that the MediaMuxer // will close this file at stop(). - MediaMuxer(int fd); + MediaMuxer(int fd, OutputFormat format); virtual ~MediaMuxer(); @@ -94,6 +108,7 @@ private: Mutex mMuxerLock; enum State { + UNINITED, INITED, STARTED, STOPPED diff --git a/media/libstagefright/MediaMuxer.cpp b/media/libstagefright/MediaMuxer.cpp index 30bed90..aefc270 100644 --- a/media/libstagefright/MediaMuxer.cpp +++ b/media/libstagefright/MediaMuxer.cpp @@ -35,14 +35,20 @@ namespace android { -MediaMuxer::MediaMuxer(const char* pathOut) - : mState(INITED) { - mWriter = new MPEG4Writer(pathOut); +MediaMuxer::MediaMuxer(const char *path, OutputFormat format) + : mState(UNINITED) { + if (format == OUTPUT_FORMAT_MPEG_4) { + mWriter = new MPEG4Writer(path); + mState = INITED; + } } -MediaMuxer::MediaMuxer(int fd) - : mState(INITED) { - mWriter = new MPEG4Writer(fd); +MediaMuxer::MediaMuxer(int fd, OutputFormat format) + : mState(UNINITED) { + if (format == OUTPUT_FORMAT_MPEG_4) { + mWriter = new MPEG4Writer(fd); + mState = INITED; + } } MediaMuxer::~MediaMuxer() { @@ -107,8 +113,6 @@ status_t MediaMuxer::writeSampleData(const sp &buffer, size_t trackInde int64_t timeUs, uint32_t flags) { Mutex::Autolock autoLock(mMuxerLock); - sp currentTrack = mTrackList[trackIndex]; - if (buffer.get() == NULL) { ALOGE("WriteSampleData() get an NULL buffer."); return -EINVAL; @@ -134,10 +138,11 @@ status_t MediaMuxer::writeSampleData(const sp &buffer, size_t trackInde // Just set the kKeyDecodingTime as the presentation time for now. metaData->setInt64(kKeyDecodingTime, timeUs); - if (flags & MediaCodec::BUFFER_FLAG_SYNCFRAME) { + if (flags & SAMPLE_FLAG_SYNC) { metaData->setInt32(kKeyIsSyncFrame, true); } + sp currentTrack = mTrackList[trackIndex]; // This pushBuffer will wait until the mediaBuffer is consumed. return currentTrack->pushBuffer(mediaBuffer); } -- cgit v1.1