From 1889c3edad32995c0cf26ae2248fe7c957b7ec84 Mon Sep 17 00:00:00 2001 From: Dongwon Kang Date: Thu, 1 Feb 2018 13:44:57 -0800 Subject: [PATCH] Add MediaBufferBase and use it in MediaSource and MediaBufferGroup. MediaBuffer class exposes internal classes, ABuffer and IMemory, which we don't want to expose to plugins. This change introduces MediaBufferBase which does not expose any classes from system library. Test: build and post-submit media cts tests Bug: 67908556 Change-Id: Ic9ee239caf9b84b2b3740e2d533257afa25c8784 --- cmds/stagefright/SineSource.cpp | 5 +- cmds/stagefright/SineSource.h | 2 +- cmds/stagefright/audioloop.cpp | 2 +- cmds/stagefright/record.cpp | 2 +- cmds/stagefright/recordvideo.cpp | 2 +- cmds/stagefright/stagefright.cpp | 14 +-- media/extractors/aac/AACExtractor.cpp | 8 +- media/extractors/amr/AMRExtractor.cpp | 8 +- media/extractors/flac/FLACExtractor.cpp | 20 ++--- media/extractors/midi/MidiExtractor.cpp | 14 +-- media/extractors/midi/MidiExtractor.h | 4 +- media/extractors/mkv/MatroskaExtractor.cpp | 22 ++--- media/extractors/mp3/MP3Extractor.cpp | 10 +-- media/extractors/mp4/MPEG4Extractor.cpp | 16 ++-- media/extractors/mpeg2/MPEG2PSExtractor.cpp | 8 +- media/extractors/mpeg2/MPEG2TSExtractor.cpp | 4 +- media/extractors/ogg/OggExtractor.cpp | 54 ++++++------ media/extractors/wav/WAVExtractor.cpp | 10 +-- media/libmedia/IMediaSource.cpp | 10 +-- media/libmedia/include/media/IMediaSource.h | 6 +- .../include/media/MediaBufferHolder.h | 6 +- media/libmediaextractor/Android.bp | 1 + media/libmediaextractor/MediaBuffer.cpp | 2 +- media/libmediaextractor/MediaBufferBase.cpp | 30 +++++++ media/libmediaextractor/MediaBufferGroup.cpp | 14 +-- .../include/media/MediaSourceBase.h | 4 +- .../include/media/stagefright/MediaBuffer.h | 43 ++++------ .../media/stagefright/MediaBufferBase.h | 86 +++++++++++++++++++ .../media/stagefright/MediaBufferGroup.h | 16 ++-- .../nuplayer2/GenericSource2.cpp | 10 +-- .../nuplayer2/GenericSource2.h | 4 +- .../nuplayer2/NuPlayer2Decoder.cpp | 2 +- .../nuplayer/GenericSource.cpp | 10 +-- .../nuplayer/GenericSource.h | 4 +- .../nuplayer/NuPlayerDecoder.cpp | 2 +- media/libstagefright/AACWriter.cpp | 2 +- media/libstagefright/AMRWriter.cpp | 2 +- media/libstagefright/AudioSource.cpp | 4 +- media/libstagefright/CallbackMediaSource.cpp | 2 +- media/libstagefright/CameraSource.cpp | 4 +- .../libstagefright/CameraSourceTimeLapse.cpp | 10 +-- media/libstagefright/FrameDecoder.cpp | 2 +- media/libstagefright/JPEGSource.cpp | 5 +- media/libstagefright/MPEG2TSWriter.cpp | 10 +-- media/libstagefright/MPEG4Writer.cpp | 2 +- media/libstagefright/MediaAdapter.cpp | 4 +- media/libstagefright/MediaCodecSource.cpp | 28 +++--- media/libstagefright/NuMediaExtractor.cpp | 13 +-- media/libstagefright/RemoteMediaSource.cpp | 3 +- media/libstagefright/SimpleDecodingSource.cpp | 6 +- media/libstagefright/SurfaceMediaSource.cpp | 8 +- media/libstagefright/codecs/cmds/codec2.cpp | 2 +- .../include/media/stagefright/AudioPlayer.h | 4 +- .../include/media/stagefright/AudioSource.h | 4 +- .../media/stagefright/CallbackMediaSource.h | 2 +- .../include/media/stagefright/CameraSource.h | 4 +- .../media/stagefright/CameraSourceTimeLapse.h | 8 +- .../include/media/stagefright/JPEGSource.h | 2 +- .../include/media/stagefright/MediaAdapter.h | 4 +- .../media/stagefright/MediaBufferBase.h | 1 + .../media/stagefright/MediaCodecSource.h | 8 +- .../media/stagefright/NuMediaExtractor.h | 6 +- .../media/stagefright/RemoteMediaSource.h | 2 +- .../media/stagefright/SimpleDecodingSource.h | 5 +- .../media/stagefright/SurfaceMediaSource.h | 6 +- .../mpeg2ts/AnotherPacketSource.cpp | 4 +- .../mpeg2ts/AnotherPacketSource.h | 2 +- media/libstagefright/omx/tests/OMXHarness.cpp | 4 +- media/libstagefright/rtsp/ARTPWriter.cpp | 14 +-- media/libstagefright/rtsp/ARTPWriter.h | 8 +- media/libstagefright/tests/DummyRecorder.cpp | 2 +- .../tests/SurfaceMediaSource_test.cpp | 2 +- media/libstagefright/webm/WebmFrame.cpp | 4 +- media/libstagefright/webm/WebmFrame.h | 2 +- media/libstagefright/webm/WebmFrameThread.cpp | 2 +- 75 files changed, 388 insertions(+), 274 deletions(-) create mode 100644 media/libmediaextractor/MediaBufferBase.cpp create mode 100644 media/libmediaextractor/include/media/stagefright/MediaBufferBase.h create mode 120000 media/libstagefright/include/media/stagefright/MediaBufferBase.h diff --git a/cmds/stagefright/SineSource.cpp b/cmds/stagefright/SineSource.cpp index cad8caff67..9e40a0fc26 100644 --- a/cmds/stagefright/SineSource.cpp +++ b/cmds/stagefright/SineSource.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -59,10 +60,10 @@ sp SineSource::getFormat() { } status_t SineSource::read( - MediaBuffer **out, const ReadOptions * /* options */) { + MediaBufferBase **out, const ReadOptions * /* options */) { *out = NULL; - MediaBuffer *buffer; + MediaBufferBase *buffer; status_t err = mGroup->acquire_buffer(&buffer); if (err != OK) { diff --git a/cmds/stagefright/SineSource.h b/cmds/stagefright/SineSource.h index f1fb96dcc8..1817291e8a 100644 --- a/cmds/stagefright/SineSource.h +++ b/cmds/stagefright/SineSource.h @@ -18,7 +18,7 @@ struct SineSource : public MediaSource { virtual sp getFormat(); virtual status_t read( - MediaBuffer **out, const ReadOptions *options = NULL); + MediaBufferBase **out, const ReadOptions *options = NULL); protected: virtual ~SineSource(); diff --git a/cmds/stagefright/audioloop.cpp b/cmds/stagefright/audioloop.cpp index fc246461ed..d4f2e8d8d4 100644 --- a/cmds/stagefright/audioloop.cpp +++ b/cmds/stagefright/audioloop.cpp @@ -169,7 +169,7 @@ ALOGI("Line: %d", __LINE__); ALOGI("Line: %d", __LINE__); } else { CHECK_EQ(decoder->start(), (status_t)OK); - MediaBuffer* buffer; + MediaBufferBase* buffer; while (decoder->read(&buffer) == OK) { // do something with buffer (save it eventually?) // need to stop after some count though... diff --git a/cmds/stagefright/record.cpp b/cmds/stagefright/record.cpp index 073ee6bf42..44b0015f0f 100644 --- a/cmds/stagefright/record.cpp +++ b/cmds/stagefright/record.cpp @@ -328,7 +328,7 @@ int main(int /* argc */, char ** /* argv */) { int32_t n = 0; status_t err; - MediaBuffer *buffer; + MediaBufferBase *buffer; while ((err = encoder->read(&buffer)) == OK) { printf("."); fflush(stdout); diff --git a/cmds/stagefright/recordvideo.cpp b/cmds/stagefright/recordvideo.cpp index af39d4624b..b7a5066c04 100644 --- a/cmds/stagefright/recordvideo.cpp +++ b/cmds/stagefright/recordvideo.cpp @@ -90,7 +90,7 @@ public: } virtual status_t read( - MediaBuffer **buffer, const MediaSource::ReadOptions *options __unused) { + MediaBufferBase **buffer, const MediaSource::ReadOptions *options __unused) { if (mNumFramesOutput % 10 == 0) { fprintf(stderr, "."); diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp index bb517aae7d..5fa830461f 100644 --- a/cmds/stagefright/stagefright.cpp +++ b/cmds/stagefright/stagefright.cpp @@ -150,7 +150,7 @@ static void dumpSource(const sp &source, const String8 &filename) { status_t err; for (;;) { - MediaBuffer *mbuf; + MediaBufferBase *mbuf; err = source->read(&mbuf); if (err == INFO_FORMAT_CHANGED) { @@ -234,7 +234,7 @@ static void playSource(sp &source) { CHECK(meta->findInt64(kKeyDuration, &durationUs)); status_t err; - MediaBuffer *buffer; + MediaBufferBase *buffer; MediaSource::ReadOptions options; int64_t seekTimeUs = -1; for (;;) { @@ -321,7 +321,7 @@ static void playSource(sp &source) { while (numIterationsLeft-- > 0) { long numFrames = 0; - MediaBuffer *buffer; + MediaBufferBase *buffer; for (;;) { int64_t startDecodeUs = getNowUs(); @@ -416,7 +416,7 @@ struct DetectSyncSource : public MediaSource { virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options); + MediaBufferBase **buffer, const ReadOptions *options); private: enum StreamType { @@ -465,7 +465,7 @@ sp DetectSyncSource::getFormat() { return mSource->getFormat(); } -static bool isIDRFrame(MediaBuffer *buffer) { +static bool isIDRFrame(MediaBufferBase *buffer) { const uint8_t *data = (const uint8_t *)buffer->data() + buffer->range_offset(); size_t size = buffer->range_length(); @@ -482,7 +482,7 @@ static bool isIDRFrame(MediaBuffer *buffer) { } status_t DetectSyncSource::read( - MediaBuffer **buffer, const ReadOptions *options) { + MediaBufferBase **buffer, const ReadOptions *options) { for (;;) { status_t err = mSource->read(buffer, options); @@ -562,7 +562,7 @@ static void performSeekTest(const sp &source) { options.setSeekTo( seekTimeUs, MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC); - MediaBuffer *buffer; + MediaBufferBase *buffer; status_t err; for (;;) { err = source->read(&buffer, &options); diff --git a/media/extractors/aac/AACExtractor.cpp b/media/extractors/aac/AACExtractor.cpp index 9df0aaadd2..f6c8664f11 100644 --- a/media/extractors/aac/AACExtractor.cpp +++ b/media/extractors/aac/AACExtractor.cpp @@ -46,7 +46,7 @@ public: virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); protected: virtual ~AACSource(); @@ -259,7 +259,7 @@ status_t AACSource::start(MetaData * /* params */) { mCurrentTimeUs = 0; mGroup = new MediaBufferGroup; - mGroup->add_buffer(new MediaBuffer(kMaxFrameSize)); + mGroup->add_buffer(MediaBufferBase::Create(kMaxFrameSize)); mStarted = true; return OK; @@ -280,7 +280,7 @@ sp AACSource::getFormat() { } status_t AACSource::read( - MediaBuffer **out, const ReadOptions *options) { + MediaBufferBase **out, const ReadOptions *options) { *out = NULL; int64_t seekTimeUs; @@ -303,7 +303,7 @@ status_t AACSource::read( return ERROR_END_OF_STREAM; } - MediaBuffer *buffer; + MediaBufferBase *buffer; status_t err = mGroup->acquire_buffer(&buffer); if (err != OK) { return err; diff --git a/media/extractors/amr/AMRExtractor.cpp b/media/extractors/amr/AMRExtractor.cpp index eec18b51f2..59d9ef123a 100644 --- a/media/extractors/amr/AMRExtractor.cpp +++ b/media/extractors/amr/AMRExtractor.cpp @@ -45,7 +45,7 @@ public: virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); protected: virtual ~AMRSource(); @@ -233,7 +233,7 @@ status_t AMRSource::start(MetaData * /* params */) { mOffset = mIsWide ? 9 : 6; mCurrentTimeUs = 0; mGroup = new MediaBufferGroup; - mGroup->add_buffer(new MediaBuffer(128)); + mGroup->add_buffer(MediaBufferBase::Create(128)); mStarted = true; return OK; @@ -254,7 +254,7 @@ sp AMRSource::getFormat() { } status_t AMRSource::read( - MediaBuffer **out, const ReadOptions *options) { + MediaBufferBase **out, const ReadOptions *options) { *out = NULL; int64_t seekTimeUs; @@ -303,7 +303,7 @@ status_t AMRSource::read( return ERROR_MALFORMED; } - MediaBuffer *buffer; + MediaBufferBase *buffer; status_t err = mGroup->acquire_buffer(&buffer); if (err != OK) { return err; diff --git a/media/extractors/flac/FLACExtractor.cpp b/media/extractors/flac/FLACExtractor.cpp index 2ce20db877..2c5e43e866 100644 --- a/media/extractors/flac/FLACExtractor.cpp +++ b/media/extractors/flac/FLACExtractor.cpp @@ -31,7 +31,7 @@ #include #include #include -#include +#include namespace android { @@ -173,7 +173,7 @@ public: virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); protected: virtual ~FLACSource(); @@ -232,10 +232,10 @@ public: // media buffers void allocateBuffers(); void releaseBuffers(); - MediaBuffer *readBuffer() { + MediaBufferBase *readBuffer() { return readBuffer(false, 0LL); } - MediaBuffer *readBuffer(FLAC__uint64 sample) { + MediaBufferBase *readBuffer(FLAC__uint64 sample) { return readBuffer(true, sample); } @@ -274,7 +274,7 @@ private: FLAC__StreamDecoderErrorStatus mErrorStatus; status_t init(); - MediaBuffer *readBuffer(bool doSeek, FLAC__uint64 sample); + MediaBufferBase *readBuffer(bool doSeek, FLAC__uint64 sample); // no copy constructor or assignment FLACParser(const FLACParser &); @@ -763,7 +763,7 @@ void FLACParser::allocateBuffers() CHECK(mGroup == NULL); mGroup = new MediaBufferGroup; mMaxBufferSize = getMaxBlockSize() * getChannels() * sizeof(short); - mGroup->add_buffer(new MediaBuffer(mMaxBufferSize)); + mGroup->add_buffer(MediaBufferBase::Create(mMaxBufferSize)); } void FLACParser::releaseBuffers() @@ -773,7 +773,7 @@ void FLACParser::releaseBuffers() mGroup = NULL; } -MediaBuffer *FLACParser::readBuffer(bool doSeek, FLAC__uint64 sample) +MediaBufferBase *FLACParser::readBuffer(bool doSeek, FLAC__uint64 sample) { mWriteRequested = true; mWriteCompleted = false; @@ -810,7 +810,7 @@ MediaBuffer *FLACParser::readBuffer(bool doSeek, FLAC__uint64 sample) } // acquire a media buffer CHECK(mGroup != NULL); - MediaBuffer *buffer; + MediaBufferBase *buffer; status_t err = mGroup->acquire_buffer(&buffer); if (err != OK) { return NULL; @@ -881,9 +881,9 @@ sp FLACSource::getFormat() } status_t FLACSource::read( - MediaBuffer **outBuffer, const ReadOptions *options) + MediaBufferBase **outBuffer, const ReadOptions *options) { - MediaBuffer *buffer; + MediaBufferBase *buffer; // process an optional seek request int64_t seekTimeUs; ReadOptions::SeekMode mode; diff --git a/media/extractors/midi/MidiExtractor.cpp b/media/extractors/midi/MidiExtractor.cpp index 1e38194988..cf446dbf04 100644 --- a/media/extractors/midi/MidiExtractor.cpp +++ b/media/extractors/midi/MidiExtractor.cpp @@ -30,7 +30,7 @@ namespace android { -// how many Sonivox output buffers to aggregate into one MediaBuffer +// how many Sonivox output buffers to aggregate into one MediaBufferBase static const int NUM_COMBINE_BUFFERS = 4; class MidiSource : public MediaSourceBase { @@ -45,7 +45,7 @@ public: virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); protected: virtual ~MidiSource(); @@ -114,10 +114,10 @@ sp MidiSource::getFormat() } status_t MidiSource::read( - MediaBuffer **outBuffer, const ReadOptions *options) + MediaBufferBase **outBuffer, const ReadOptions *options) { ALOGV("MidiSource::read"); - MediaBuffer *buffer; + MediaBufferBase *buffer; // process an optional seek request int64_t seekTimeUs; ReadOptions::SeekMode mode; @@ -207,7 +207,7 @@ status_t MidiEngine::allocateBuffers() { int bufsize = sizeof(EAS_PCM) * mEasConfig->mixBufferSize * mEasConfig->numChannels * NUM_COMBINE_BUFFERS; ALOGV("using %d byte buffer", bufsize); - mGroup->add_buffer(new MediaBuffer(bufsize)); + mGroup->add_buffer(MediaBufferBase::Create(bufsize)); return OK; } @@ -223,13 +223,13 @@ status_t MidiEngine::seekTo(int64_t positionUs) { return result == EAS_SUCCESS ? OK : UNKNOWN_ERROR; } -MediaBuffer* MidiEngine::readBuffer() { +MediaBufferBase* MidiEngine::readBuffer() { EAS_STATE state; EAS_State(mEasData, mEasHandle, &state); if ((state == EAS_STATE_STOPPED) || (state == EAS_STATE_ERROR)) { return NULL; } - MediaBuffer *buffer; + MediaBufferBase *buffer; status_t err = mGroup->acquire_buffer(&buffer); if (err != OK) { ALOGE("readBuffer: no buffer"); diff --git a/media/extractors/midi/MidiExtractor.h b/media/extractors/midi/MidiExtractor.h index 173a8146e3..427451344e 100644 --- a/media/extractors/midi/MidiExtractor.h +++ b/media/extractors/midi/MidiExtractor.h @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include #include @@ -39,7 +39,7 @@ public: status_t allocateBuffers(); status_t releaseBuffers(); status_t seekTo(int64_t positionUs); - MediaBuffer* readBuffer(); + MediaBufferBase* readBuffer(); private: sp mIoWrapper; MediaBufferGroup *mGroup; diff --git a/media/extractors/mkv/MatroskaExtractor.cpp b/media/extractors/mkv/MatroskaExtractor.cpp index 73961138a1..65988d3e53 100644 --- a/media/extractors/mkv/MatroskaExtractor.cpp +++ b/media/extractors/mkv/MatroskaExtractor.cpp @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include #include #include @@ -130,7 +130,7 @@ struct MatroskaSource : public MediaSourceBase { virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options); + MediaBufferBase **buffer, const ReadOptions *options); protected: virtual ~MatroskaSource(); @@ -150,11 +150,11 @@ private: BlockIterator mBlockIter; ssize_t mNALSizeLen; // for type AVC or HEVC - List mPendingFrames; + List mPendingFrames; status_t advance(); - status_t setWebmBlockCryptoInfo(MediaBuffer *mbuf); + status_t setWebmBlockCryptoInfo(MediaBufferBase *mbuf); status_t readBlock(); void clearPendingFrames(); @@ -568,7 +568,7 @@ static AString uriDebugString(const AString &uri) { void MatroskaSource::clearPendingFrames() { while (!mPendingFrames.empty()) { - MediaBuffer *frame = *mPendingFrames.begin(); + MediaBufferBase *frame = *mPendingFrames.begin(); mPendingFrames.erase(mPendingFrames.begin()); frame->release(); @@ -576,7 +576,7 @@ void MatroskaSource::clearPendingFrames() { } } -status_t MatroskaSource::setWebmBlockCryptoInfo(MediaBuffer *mbuf) { +status_t MatroskaSource::setWebmBlockCryptoInfo(MediaBufferBase *mbuf) { if (mbuf->range_length() < 1 || mbuf->range_length() - 1 > INT32_MAX) { // 1-byte signal return ERROR_MALFORMED; @@ -662,7 +662,7 @@ status_t MatroskaSource::readBlock() { } len += trackInfo->mHeaderLen; - MediaBuffer *mbuf = new MediaBuffer(len); + MediaBufferBase *mbuf = MediaBufferBase::Create(len); uint8_t *data = static_cast(mbuf->data()); if (trackInfo->mHeader) { memcpy(data, trackInfo->mHeader, trackInfo->mHeaderLen); @@ -695,7 +695,7 @@ status_t MatroskaSource::readBlock() { } status_t MatroskaSource::read( - MediaBuffer **out, const ReadOptions *options) { + MediaBufferBase **out, const ReadOptions *options) { *out = NULL; int64_t targetSampleTimeUs = -1ll; @@ -731,7 +731,7 @@ status_t MatroskaSource::read( } } - MediaBuffer *frame = *mPendingFrames.begin(); + MediaBufferBase *frame = *mPendingFrames.begin(); mPendingFrames.erase(mPendingFrames.begin()); if ((mType != AVC && mType != HEVC) || mNALSizeLen == 0) { @@ -760,7 +760,7 @@ status_t MatroskaSource::read( size_t srcSize = frame->range_length(); size_t dstSize = 0; - MediaBuffer *buffer = NULL; + MediaBufferBase *buffer = NULL; uint8_t *dstPtr = NULL; for (int32_t pass = 0; pass < 2; ++pass) { @@ -820,7 +820,7 @@ status_t MatroskaSource::read( // each 4-byte nal size with a 4-byte start code buffer = frame; } else { - buffer = new MediaBuffer(dstSize); + buffer = MediaBufferBase::Create(dstSize); } int64_t timeUs; diff --git a/media/extractors/mp3/MP3Extractor.cpp b/media/extractors/mp3/MP3Extractor.cpp index e55084e814..90ee653be8 100644 --- a/media/extractors/mp3/MP3Extractor.cpp +++ b/media/extractors/mp3/MP3Extractor.cpp @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include #include #include @@ -222,7 +222,7 @@ public: virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); protected: virtual ~MP3Source(); @@ -463,7 +463,7 @@ status_t MP3Source::start(MetaData *) { mGroup = new MediaBufferGroup; - mGroup->add_buffer(new MediaBuffer(kMaxFrameSize)); + mGroup->add_buffer(MediaBufferBase::Create(kMaxFrameSize)); mCurrentPos = mFirstFramePos; mCurrentTimeUs = 0; @@ -492,7 +492,7 @@ sp MP3Source::getFormat() { } status_t MP3Source::read( - MediaBuffer **out, const ReadOptions *options) { + MediaBufferBase **out, const ReadOptions *options) { *out = NULL; int64_t seekTimeUs; @@ -522,7 +522,7 @@ status_t MP3Source::read( mSamplesRead = 0; } - MediaBuffer *buffer; + MediaBufferBase *buffer; status_t err = mGroup->acquire_buffer(&buffer); if (err != OK) { return err; diff --git a/media/extractors/mp4/MPEG4Extractor.cpp b/media/extractors/mp4/MPEG4Extractor.cpp index 3d7e45ccdf..5e2908d64b 100644 --- a/media/extractors/mp4/MPEG4Extractor.cpp +++ b/media/extractors/mp4/MPEG4Extractor.cpp @@ -41,7 +41,7 @@ #include #include #include -#include +#include #include #include #include @@ -83,9 +83,9 @@ public: virtual sp getFormat(); - virtual status_t read(MediaBuffer **buffer, const ReadOptions *options = NULL); + virtual status_t read(MediaBufferBase **buffer, const ReadOptions *options = NULL); virtual bool supportNonblockingRead() { return true; } - virtual status_t fragmentedRead(MediaBuffer **buffer, const ReadOptions *options = NULL); + virtual status_t fragmentedRead(MediaBufferBase **buffer, const ReadOptions *options = NULL); virtual ~MPEG4Source(); @@ -128,7 +128,7 @@ private: MediaBufferGroup *mGroup; - MediaBuffer *mBuffer; + MediaBufferBase *mBuffer; bool mWantsNALFragments; @@ -4681,7 +4681,7 @@ size_t MPEG4Source::parseNALSize(const uint8_t *data) const { } status_t MPEG4Source::read( - MediaBuffer **out, const ReadOptions *options) { + MediaBufferBase **out, const ReadOptions *options) { Mutex::Autolock autoLock(mLock); CHECK(mStarted); @@ -4906,7 +4906,7 @@ status_t MPEG4Source::read( return ERROR_MALFORMED; } - MediaBuffer *clone = mBuffer->clone(); + MediaBufferBase *clone = mBuffer->clone(); CHECK(clone != NULL); clone->set_range(mBuffer->range_offset() + mNALLengthSize, nal_size); @@ -5026,7 +5026,7 @@ status_t MPEG4Source::read( } status_t MPEG4Source::fragmentedRead( - MediaBuffer **out, const ReadOptions *options) { + MediaBufferBase **out, const ReadOptions *options) { ALOGV("MPEG4Source::fragmentedRead"); @@ -5230,7 +5230,7 @@ status_t MPEG4Source::fragmentedRead( return ERROR_MALFORMED; } - MediaBuffer *clone = mBuffer->clone(); + MediaBufferBase *clone = mBuffer->clone(); CHECK(clone != NULL); clone->set_range(mBuffer->range_offset() + mNALLengthSize, nal_size); diff --git a/media/extractors/mpeg2/MPEG2PSExtractor.cpp b/media/extractors/mpeg2/MPEG2PSExtractor.cpp index b4d0ee5258..c2de6e7c0d 100644 --- a/media/extractors/mpeg2/MPEG2PSExtractor.cpp +++ b/media/extractors/mpeg2/MPEG2PSExtractor.cpp @@ -49,7 +49,7 @@ struct MPEG2PSExtractor::Track : public MediaSourceBase, public RefBase { virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options); + MediaBufferBase **buffer, const ReadOptions *options); protected: virtual ~Track(); @@ -80,7 +80,7 @@ struct MPEG2PSExtractor::WrappedTrack : public MediaSourceBase { virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options); + MediaBufferBase **buffer, const ReadOptions *options); protected: virtual ~WrappedTrack(); @@ -659,7 +659,7 @@ sp MPEG2PSExtractor::Track::getFormat() { } status_t MPEG2PSExtractor::Track::read( - MediaBuffer **buffer, const ReadOptions *options) { + MediaBufferBase **buffer, const ReadOptions *options) { if (mSource == NULL) { return NO_INIT; } @@ -744,7 +744,7 @@ sp MPEG2PSExtractor::WrappedTrack::getFormat() { } status_t MPEG2PSExtractor::WrappedTrack::read( - MediaBuffer **buffer, const ReadOptions *options) { + MediaBufferBase **buffer, const ReadOptions *options) { return mTrack->read(buffer, options); } diff --git a/media/extractors/mpeg2/MPEG2TSExtractor.cpp b/media/extractors/mpeg2/MPEG2TSExtractor.cpp index 31830648bd..7887a7cdba 100644 --- a/media/extractors/mpeg2/MPEG2TSExtractor.cpp +++ b/media/extractors/mpeg2/MPEG2TSExtractor.cpp @@ -61,7 +61,7 @@ struct MPEG2TSSource : public MediaSourceBase { virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); private: MPEG2TSExtractor *mExtractor; @@ -99,7 +99,7 @@ sp MPEG2TSSource::getFormat() { } status_t MPEG2TSSource::read( - MediaBuffer **out, const ReadOptions *options) { + MediaBufferBase **out, const ReadOptions *options) { *out = NULL; int64_t seekTimeUs; diff --git a/media/extractors/ogg/OggExtractor.cpp b/media/extractors/ogg/OggExtractor.cpp index ab51e5e6e5..6d7576f717 100644 --- a/media/extractors/ogg/OggExtractor.cpp +++ b/media/extractors/ogg/OggExtractor.cpp @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include #include @@ -54,7 +54,7 @@ struct OggSource : public MediaSourceBase { virtual status_t stop(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); protected: virtual ~OggSource(); @@ -82,7 +82,7 @@ struct MyOggExtractor { status_t seekToTime(int64_t timeUs); status_t seekToOffset(off64_t offset); - virtual status_t readNextPacket(MediaBuffer **buffer) = 0; + virtual status_t readNextPacket(MediaBufferBase **buffer) = 0; status_t init(); @@ -141,7 +141,7 @@ protected: // 1 - bitstream identification header // 3 - comment header // 5 - codec setup header (Vorbis only) - virtual status_t verifyHeader(MediaBuffer *buffer, uint8_t type) = 0; + virtual status_t verifyHeader(MediaBufferBase *buffer, uint8_t type) = 0; // Read the next ogg packet from the underlying data source; optionally // calculate the timestamp for the output packet whilst pretending @@ -149,9 +149,9 @@ protected: // // *buffer is NULL'ed out immediately upon entry, and if successful a new buffer is allocated; // clients are responsible for releasing the original buffer. - status_t _readNextPacket(MediaBuffer **buffer, bool calcVorbisTimestamp); + status_t _readNextPacket(MediaBufferBase **buffer, bool calcVorbisTimestamp); - int32_t getPacketBlockSize(MediaBuffer *buffer); + int32_t getPacketBlockSize(MediaBufferBase *buffer); void parseFileMetaData(); @@ -173,7 +173,7 @@ struct MyVorbisExtractor : public MyOggExtractor { virtual uint64_t approxBitrate() const; - virtual status_t readNextPacket(MediaBuffer **buffer) { + virtual status_t readNextPacket(MediaBufferBase **buffer) { return _readNextPacket(buffer, /* calcVorbisTimestamp = */ true); } @@ -185,7 +185,7 @@ protected: return granulePos * 1000000ll / mVi.rate; } - virtual status_t verifyHeader(MediaBuffer *buffer, uint8_t type); + virtual status_t verifyHeader(MediaBufferBase *buffer, uint8_t type); }; struct MyOpusExtractor : public MyOggExtractor { @@ -203,16 +203,16 @@ struct MyOpusExtractor : public MyOggExtractor { return 0; } - virtual status_t readNextPacket(MediaBuffer **buffer); + virtual status_t readNextPacket(MediaBufferBase **buffer); protected: virtual int64_t getTimeUsOfGranule(uint64_t granulePos) const; - virtual status_t verifyHeader(MediaBuffer *buffer, uint8_t type); + virtual status_t verifyHeader(MediaBufferBase *buffer, uint8_t type); private: - status_t verifyOpusHeader(MediaBuffer *buffer); - status_t verifyOpusComments(MediaBuffer *buffer); - uint32_t getNumSamplesInPacket(MediaBuffer *buffer) const; + status_t verifyOpusHeader(MediaBufferBase *buffer); + status_t verifyOpusComments(MediaBufferBase *buffer); + uint32_t getNumSamplesInPacket(MediaBufferBase *buffer) const; uint8_t mChannelCount; uint16_t mCodecDelay; @@ -256,7 +256,7 @@ status_t OggSource::stop() { } status_t OggSource::read( - MediaBuffer **out, const ReadOptions *options) { + MediaBufferBase **out, const ReadOptions *options) { *out = NULL; int64_t seekTimeUs; @@ -268,7 +268,7 @@ status_t OggSource::read( } } - MediaBuffer *packet; + MediaBufferBase *packet; status_t err = mExtractor->mImpl->readNextPacket(&packet); if (err != OK) { @@ -562,13 +562,13 @@ ssize_t MyOggExtractor::readPage(off64_t offset, Page *page) { return sizeof(header) + page->mNumSegments + totalSize; } -status_t MyOpusExtractor::readNextPacket(MediaBuffer **out) { +status_t MyOpusExtractor::readNextPacket(MediaBufferBase **out) { if (mOffset <= mFirstDataOffset && mStartGranulePosition < 0) { // The first sample might not start at time 0; find out where by subtracting // the number of samples on the first page from the granule position // (position of last complete sample) of the first page. This happens // the first time before we attempt to read a packet from the first page. - MediaBuffer *mBuf; + MediaBufferBase *mBuf; uint32_t numSamples = 0; uint64_t curGranulePosition = 0; while (true) { @@ -623,7 +623,7 @@ status_t MyOpusExtractor::readNextPacket(MediaBuffer **out) { return OK; } -uint32_t MyOpusExtractor::getNumSamplesInPacket(MediaBuffer *buffer) const { +uint32_t MyOpusExtractor::getNumSamplesInPacket(MediaBufferBase *buffer) const { if (buffer == NULL || buffer->range_length() < 1) { return 0; } @@ -669,10 +669,10 @@ uint32_t MyOpusExtractor::getNumSamplesInPacket(MediaBuffer *buffer) const { return numSamples; } -status_t MyOggExtractor::_readNextPacket(MediaBuffer **out, bool calcVorbisTimestamp) { +status_t MyOggExtractor::_readNextPacket(MediaBufferBase **out, bool calcVorbisTimestamp) { *out = NULL; - MediaBuffer *buffer = NULL; + MediaBufferBase *buffer = NULL; int64_t timeUs = -1; for (;;) { @@ -708,7 +708,7 @@ status_t MyOggExtractor::_readNextPacket(MediaBuffer **out, bool calcVorbisTimes ALOGE("b/36592202"); return ERROR_MALFORMED; } - MediaBuffer *tmp = new (std::nothrow) MediaBuffer(fullSize); + MediaBufferBase *tmp = MediaBufferBase::Create(fullSize); if (tmp == NULL) { if (buffer != NULL) { buffer->release(); @@ -833,7 +833,7 @@ status_t MyOggExtractor::init() { mMeta->setCString(kKeyMIMEType, mMimeType); status_t err; - MediaBuffer *packet; + MediaBufferBase *packet; for (size_t i = 0; i < mNumHeaders; ++i) { // ignore timestamp for configuration packets if ((err = _readNextPacket(&packet, /* calcVorbisTimestamp = */ false)) != OK) { @@ -910,7 +910,7 @@ void MyOggExtractor::buildTableOfContents() { } } -int32_t MyOggExtractor::getPacketBlockSize(MediaBuffer *buffer) { +int32_t MyOggExtractor::getPacketBlockSize(MediaBufferBase *buffer) { const uint8_t *data = (const uint8_t *)buffer->data() + buffer->range_offset(); @@ -950,7 +950,7 @@ int64_t MyOpusExtractor::getTimeUsOfGranule(uint64_t granulePos) const { return pcmSamplePosition * 1000000ll / kOpusSampleRate; } -status_t MyOpusExtractor::verifyHeader(MediaBuffer *buffer, uint8_t type) { +status_t MyOpusExtractor::verifyHeader(MediaBufferBase *buffer, uint8_t type) { switch (type) { // there are actually no header types defined in the Opus spec; we choose 1 and 3 to mean // header and comments such that we can share code with MyVorbisExtractor. @@ -963,7 +963,7 @@ status_t MyOpusExtractor::verifyHeader(MediaBuffer *buffer, uint8_t type) { } } -status_t MyOpusExtractor::verifyOpusHeader(MediaBuffer *buffer) { +status_t MyOpusExtractor::verifyOpusHeader(MediaBufferBase *buffer) { const size_t kOpusHeaderSize = 19; const uint8_t *data = (const uint8_t *)buffer->data() + buffer->range_offset(); @@ -989,7 +989,7 @@ status_t MyOpusExtractor::verifyOpusHeader(MediaBuffer *buffer) { return OK; } -status_t MyOpusExtractor::verifyOpusComments(MediaBuffer *buffer) { +status_t MyOpusExtractor::verifyOpusComments(MediaBufferBase *buffer) { // add artificial framing bit so we can reuse _vorbis_unpack_comment int32_t commentSize = buffer->range_length() + 1; sp aBuf = new ABuffer(commentSize); @@ -1081,7 +1081,7 @@ status_t MyOpusExtractor::verifyOpusComments(MediaBuffer *buffer) { } status_t MyVorbisExtractor::verifyHeader( - MediaBuffer *buffer, uint8_t type) { + MediaBufferBase *buffer, uint8_t type) { const uint8_t *data = (const uint8_t *)buffer->data() + buffer->range_offset(); diff --git a/media/extractors/wav/WAVExtractor.cpp b/media/extractors/wav/WAVExtractor.cpp index 2c991a76ed..a18cee58e1 100644 --- a/media/extractors/wav/WAVExtractor.cpp +++ b/media/extractors/wav/WAVExtractor.cpp @@ -68,7 +68,7 @@ struct WAVSource : public MediaSourceBase { virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); virtual bool supportNonblockingRead() { return true; } @@ -385,7 +385,7 @@ status_t WAVSource::start(MetaData * /* params */) { if (mBitsPerSample == 8) { // As a temporary buffer for 8->16 bit conversion. - mGroup->add_buffer(new MediaBuffer(kMaxFrameSize)); + mGroup->add_buffer(MediaBufferBase::Create(kMaxFrameSize)); } mCurrentPos = mOffset; @@ -415,7 +415,7 @@ sp WAVSource::getFormat() { } status_t WAVSource::read( - MediaBuffer **out, const ReadOptions *options) { + MediaBufferBase **out, const ReadOptions *options) { *out = NULL; if (options != nullptr && options->getNonBlocking() && !mGroup->has_buffers()) { @@ -441,7 +441,7 @@ status_t WAVSource::read( mCurrentPos = pos + mOffset; } - MediaBuffer *buffer; + MediaBufferBase *buffer; status_t err = mGroup->acquire_buffer(&buffer); if (err != OK) { return err; @@ -492,7 +492,7 @@ status_t WAVSource::read( // Convert 8-bit unsigned samples to 16-bit signed. // Create new buffer with 2 byte wide samples - MediaBuffer *tmp; + MediaBufferBase *tmp; CHECK_EQ(mGroup->acquire_buffer(&tmp), (status_t)OK); tmp->set_range(0, 2 * n); diff --git a/media/libmedia/IMediaSource.cpp b/media/libmedia/IMediaSource.cpp index 0d5127c51f..f6b925553b 100644 --- a/media/libmedia/IMediaSource.cpp +++ b/media/libmedia/IMediaSource.cpp @@ -113,9 +113,9 @@ public: return NULL; } - virtual status_t read(MediaBuffer **buffer, + virtual status_t read(MediaBufferBase **buffer, const MediaSource::ReadOptions *options) { - Vector buffers; + Vector buffers; status_t ret = readMultiple(&buffers, 1 /* maxNumBuffers */, options); *buffer = buffers.size() == 0 ? nullptr : buffers[0]; ALOGV("read status %d, bufferCount %u, sinceStop %u", @@ -124,7 +124,7 @@ public: } virtual status_t readMultiple( - Vector *buffers, uint32_t maxNumBuffers, + Vector *buffers, uint32_t maxNumBuffers, const MediaSource::ReadOptions *options) { ALOGV("readMultiple"); if (buffers == NULL || !buffers->isEmpty()) { @@ -341,7 +341,7 @@ status_t BnMediaSource::onTransact( uint32_t bufferCount = 0; for (; bufferCount < maxNumBuffers; ++bufferCount, ++mBuffersSinceStop) { MediaBuffer *buf = nullptr; - ret = read(&buf, useOptions ? &opts : nullptr); + ret = read((MediaBufferBase **)&buf, useOptions ? &opts : nullptr); opts.clearNonPersistent(); // Remove options that only apply to first buffer. if (ret != NO_ERROR || buf == nullptr) { break; @@ -364,7 +364,7 @@ status_t BnMediaSource::onTransact( } else { ALOGD("Large buffer %zu without IMemory!", length); ret = mGroup->acquire_buffer( - &transferBuf, false /* nonBlocking */, length); + (MediaBufferBase **)&transferBuf, false /* nonBlocking */, length); if (ret != OK || transferBuf == nullptr || transferBuf->mMemory == nullptr) { diff --git a/media/libmedia/include/media/IMediaSource.h b/media/libmedia/include/media/IMediaSource.h index dabe231d62..7a4b1b949e 100644 --- a/media/libmedia/include/media/IMediaSource.h +++ b/media/libmedia/include/media/IMediaSource.h @@ -64,7 +64,7 @@ public: // // TODO: consider removing read() in favor of readMultiple(). virtual status_t read( - MediaBuffer **buffer, + MediaBufferBase **buffer, const MediaSource::ReadOptions *options = NULL) = 0; // Returns a vector of new buffers of data, where the new buffers are added @@ -80,7 +80,7 @@ public: // ReadOptions may be specified. Persistent options apply to all reads; // non-persistent options (e.g. seek) apply only to the first read. virtual status_t readMultiple( - Vector *buffers, uint32_t maxNumBuffers = 1, + Vector *buffers, uint32_t maxNumBuffers = 1, const MediaSource::ReadOptions *options = nullptr) = 0; // Returns true if |readMultiple| is supported, otherwise false. @@ -110,7 +110,7 @@ public: // TODO: Implement this for local media sources. virtual status_t readMultiple( - Vector * /* buffers */, uint32_t /* maxNumBuffers = 1 */, + Vector * /* buffers */, uint32_t /* maxNumBuffers = 1 */, const MediaSource::ReadOptions * /* options = nullptr */) { return ERROR_UNSUPPORTED; } diff --git a/media/libmedia/include/media/MediaBufferHolder.h b/media/libmedia/include/media/MediaBufferHolder.h index e8e2c4b391..f9dfdf55b9 100644 --- a/media/libmedia/include/media/MediaBufferHolder.h +++ b/media/libmedia/include/media/MediaBufferHolder.h @@ -24,7 +24,7 @@ namespace android { struct MediaBufferHolder : public RefBase { - MediaBufferHolder(MediaBuffer* buffer) + MediaBufferHolder(MediaBufferBase* buffer) : mMediaBuffer(buffer) { if (mMediaBuffer != nullptr) { mMediaBuffer->add_ref(); @@ -37,10 +37,10 @@ struct MediaBufferHolder : public RefBase { } } - MediaBuffer* mediaBuffer() { return mMediaBuffer; } + MediaBufferBase* mediaBuffer() { return mMediaBuffer; } private: - MediaBuffer* const mMediaBuffer; + MediaBufferBase* const mMediaBuffer; }; } // android diff --git a/media/libmediaextractor/Android.bp b/media/libmediaextractor/Android.bp index 8f4ba70b5b..79af05816e 100644 --- a/media/libmediaextractor/Android.bp +++ b/media/libmediaextractor/Android.bp @@ -25,6 +25,7 @@ cc_library { srcs: [ "DataSourceBase.cpp", "MediaBuffer.cpp", + "MediaBufferBase.cpp", "MediaBufferGroup.cpp", "MediaSourceBase.cpp", "MediaSource.cpp", diff --git a/media/libmediaextractor/MediaBuffer.cpp b/media/libmediaextractor/MediaBuffer.cpp index 28fc760864..dac3d50b07 100644 --- a/media/libmediaextractor/MediaBuffer.cpp +++ b/media/libmediaextractor/MediaBuffer.cpp @@ -177,7 +177,7 @@ void MediaBuffer::setObserver(MediaBufferObserver *observer) { mObserver = observer; } -MediaBuffer *MediaBuffer::clone() { +MediaBufferBase *MediaBuffer::clone() { MediaBuffer *buffer = new MediaBuffer(mData, mSize); buffer->set_range(mRangeOffset, mRangeLength); buffer->mMetaData = new MetaData(*mMetaData.get()); diff --git a/media/libmediaextractor/MediaBufferBase.cpp b/media/libmediaextractor/MediaBufferBase.cpp new file mode 100644 index 0000000000..a5532892b9 --- /dev/null +++ b/media/libmediaextractor/MediaBufferBase.cpp @@ -0,0 +1,30 @@ +/* + * Copyright 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "MediaBufferBase" +#include + +#include +#include + +namespace android { + +//static +MediaBufferBase *MediaBufferBase::Create(size_t size) { + return new (std::nothrow) MediaBuffer(size); +} + +} // android diff --git a/media/libmediaextractor/MediaBufferGroup.cpp b/media/libmediaextractor/MediaBufferGroup.cpp index 22f01a5ed0..2a8dd41c06 100644 --- a/media/libmediaextractor/MediaBufferGroup.cpp +++ b/media/libmediaextractor/MediaBufferGroup.cpp @@ -40,7 +40,7 @@ struct MediaBufferGroup::InternalData { Mutex mLock; Condition mCondition; size_t mGrowthLimit; // Do not automatically grow group larger than this. - std::list mBuffers; + std::list mBuffers; }; MediaBufferGroup::MediaBufferGroup(size_t growthLimit) @@ -94,7 +94,7 @@ MediaBufferGroup::MediaBufferGroup(size_t buffers, size_t buffer_size, size_t gr } MediaBufferGroup::~MediaBufferGroup() { - for (MediaBuffer *buffer : mInternal->mBuffers) { + for (MediaBufferBase *buffer : mInternal->mBuffers) { if (buffer->refcount() != 0) { const int localRefcount = buffer->localRefcount(); const int remoteRefcount = buffer->remoteRefcount(); @@ -119,7 +119,7 @@ MediaBufferGroup::~MediaBufferGroup() { delete mInternal; } -void MediaBufferGroup::add_buffer(MediaBuffer *buffer) { +void MediaBufferGroup::add_buffer(MediaBufferBase *buffer) { Mutex::Autolock autoLock(mInternal->mLock); // if we're above our growth limit, release buffers if we can @@ -144,7 +144,7 @@ bool MediaBufferGroup::has_buffers() { if (mInternal->mBuffers.size() < mInternal->mGrowthLimit) { return true; // We can add more buffers internally. } - for (MediaBuffer *buffer : mInternal->mBuffers) { + for (MediaBufferBase *buffer : mInternal->mBuffers) { if (buffer->refcount() == 0) { return true; } @@ -153,11 +153,11 @@ bool MediaBufferGroup::has_buffers() { } status_t MediaBufferGroup::acquire_buffer( - MediaBuffer **out, bool nonBlocking, size_t requestedSize) { + MediaBufferBase **out, bool nonBlocking, size_t requestedSize) { Mutex::Autolock autoLock(mInternal->mLock); for (;;) { size_t smallest = requestedSize; - MediaBuffer *buffer = nullptr; + MediaBufferBase *buffer = nullptr; auto free = mInternal->mBuffers.end(); for (auto it = mInternal->mBuffers.begin(); it != mInternal->mBuffers.end(); ++it) { if ((*it)->refcount() == 0) { @@ -217,7 +217,7 @@ size_t MediaBufferGroup::buffers() const { return mInternal->mBuffers.size(); } -void MediaBufferGroup::signalBufferReturned(MediaBuffer *) { +void MediaBufferGroup::signalBufferReturned(MediaBufferBase *) { Mutex::Autolock autoLock(mInternal->mLock); mInternal->mCondition.signal(); } diff --git a/media/libmediaextractor/include/media/MediaSourceBase.h b/media/libmediaextractor/include/media/MediaSourceBase.h index 9db60990d5..ab56613f82 100644 --- a/media/libmediaextractor/include/media/MediaSourceBase.h +++ b/media/libmediaextractor/include/media/MediaSourceBase.h @@ -30,7 +30,7 @@ namespace android { -class MediaBuffer; +class MediaBufferBase; class SourceBaseAllocTracker { public: @@ -111,7 +111,7 @@ struct MediaSourceBase // MediaSource has changed mid-stream, the client can continue reading // but should be prepared for buffers of the new configuration. virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL) = 0; + MediaBufferBase **buffer, const ReadOptions *options = NULL) = 0; // Causes this source to suspend pulling data from its upstream source // until a subsequent read-with-seek. This is currently not supported diff --git a/media/libmediaextractor/include/media/stagefright/MediaBuffer.h b/media/libmediaextractor/include/media/stagefright/MediaBuffer.h index a8f8375c2a..85b45219f3 100644 --- a/media/libmediaextractor/include/media/stagefright/MediaBuffer.h +++ b/media/libmediaextractor/include/media/stagefright/MediaBuffer.h @@ -26,6 +26,7 @@ #include #include #include +#include namespace android { @@ -34,19 +35,7 @@ class MediaBuffer; class MediaBufferObserver; class MetaData; -class MediaBufferObserver { -public: - MediaBufferObserver() {} - virtual ~MediaBufferObserver() {} - - virtual void signalBufferReturned(MediaBuffer *buffer) = 0; - -private: - MediaBufferObserver(const MediaBufferObserver &); - MediaBufferObserver &operator=(const MediaBufferObserver &); -}; - -class MediaBuffer { +class MediaBuffer : public MediaBufferBase { public: // allocations larger than or equal to this will use shared memory. static const size_t kSharedMemThreshold = 64 * 1024; @@ -70,42 +59,42 @@ public: // // If no MediaBufferGroup is set, the local reference count must be zero // when called, whereupon the MediaBuffer is deleted. - void release(); + virtual void release(); // Increments the local reference count. // Use only when MediaBufferGroup is set. - void add_ref(); + virtual void add_ref(); - void *data() const; - size_t size() const; + virtual void *data() const; + virtual size_t size() const; - size_t range_offset() const; - size_t range_length() const; + virtual size_t range_offset() const; + virtual size_t range_length() const; - void set_range(size_t offset, size_t length); + virtual void set_range(size_t offset, size_t length); - sp meta_data(); + virtual sp meta_data(); // Clears meta data and resets the range to the full extent. - void reset(); + virtual void reset(); - void setObserver(MediaBufferObserver *group); + virtual void setObserver(MediaBufferObserver *group); // Returns a clone of this MediaBuffer increasing its reference count. // The clone references the same data but has its own range and // MetaData. - MediaBuffer *clone(); + virtual MediaBufferBase *clone(); // sum of localRefcount() and remoteRefcount() - int refcount() const { + virtual int refcount() const { return localRefcount() + remoteRefcount(); } - int localRefcount() const { + virtual int localRefcount() const { return mRefCount; } - int remoteRefcount() const { + virtual int remoteRefcount() const { if (mMemory.get() == nullptr || mMemory->pointer() == nullptr) return 0; int32_t remoteRefcount = reinterpret_cast(mMemory->pointer())->getRemoteRefcount(); diff --git a/media/libmediaextractor/include/media/stagefright/MediaBufferBase.h b/media/libmediaextractor/include/media/stagefright/MediaBufferBase.h new file mode 100644 index 0000000000..81dd7d931b --- /dev/null +++ b/media/libmediaextractor/include/media/stagefright/MediaBufferBase.h @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MEDIA_BUFFER_BASE_H_ + +#define MEDIA_BUFFER_BASE_H_ + +#include + +namespace android { + +class MediaBufferBase; +class MetaData; + +class MediaBufferObserver { +public: + MediaBufferObserver() {} + virtual ~MediaBufferObserver() {} + + virtual void signalBufferReturned(MediaBufferBase *buffer) = 0; + +private: + MediaBufferObserver(const MediaBufferObserver &); + MediaBufferObserver &operator=(const MediaBufferObserver &); +}; + +class MediaBufferBase { +public: + static MediaBufferBase *Create(size_t size); + + // If MediaBufferGroup is set, decrement the local reference count; + // if the local reference count drops to 0, return the buffer to the + // associated MediaBufferGroup. + // + // If no MediaBufferGroup is set, the local reference count must be zero + // when called, whereupon the MediaBuffer is deleted. + virtual void release() = 0; + + // Increments the local reference count. + // Use only when MediaBufferGroup is set. + virtual void add_ref() = 0; + + virtual void *data() const = 0; + virtual size_t size() const = 0; + + virtual size_t range_offset() const = 0; + virtual size_t range_length() const = 0; + + virtual void set_range(size_t offset, size_t length) = 0; + + virtual sp meta_data() = 0; + + // Clears meta data and resets the range to the full extent. + virtual void reset() = 0; + + virtual void setObserver(MediaBufferObserver *group) = 0; + + // Returns a clone of this MediaBufferBase increasing its reference + // count. The clone references the same data but has its own range and + // MetaData. + virtual MediaBufferBase *clone() = 0; + + virtual int refcount() const = 0; + + virtual int localRefcount() const = 0; + virtual int remoteRefcount() const = 0; + + virtual ~MediaBufferBase() {}; +}; + +} // namespace android + +#endif // MEDIA_BUFFER_BASE_H_ diff --git a/media/libmediaextractor/include/media/stagefright/MediaBufferGroup.h b/media/libmediaextractor/include/media/stagefright/MediaBufferGroup.h index 63d0a18b5b..75d5df746e 100644 --- a/media/libmediaextractor/include/media/stagefright/MediaBufferGroup.h +++ b/media/libmediaextractor/include/media/stagefright/MediaBufferGroup.h @@ -18,11 +18,15 @@ #define MEDIA_BUFFER_GROUP_H_ -#include +#include + +#include +#include +#include namespace android { -class MediaBuffer; +class MediaBufferBase; class MediaBufferGroup : public MediaBufferObserver { public: @@ -33,7 +37,7 @@ public: ~MediaBufferGroup(); - void add_buffer(MediaBuffer *buffer); + void add_buffer(MediaBufferBase *buffer); bool has_buffers(); @@ -46,16 +50,14 @@ public: // If requestedSize is > 0, the returned MediaBuffer should have buffer // size of at least requstedSize. status_t acquire_buffer( - MediaBuffer **buffer, bool nonBlocking = false, size_t requestedSize = 0); + MediaBufferBase **buffer, bool nonBlocking = false, size_t requestedSize = 0); size_t buffers() const; // If buffer is nullptr, have acquire_buffer() check for remote release. - virtual void signalBufferReturned(MediaBuffer *buffer); + virtual void signalBufferReturned(MediaBufferBase *buffer); private: - friend class MediaBuffer; - struct InternalData; InternalData *mInternal; diff --git a/media/libmediaplayer2/nuplayer2/GenericSource2.cpp b/media/libmediaplayer2/nuplayer2/GenericSource2.cpp index 4700660a04..c34aabb9ba 100644 --- a/media/libmediaplayer2/nuplayer2/GenericSource2.cpp +++ b/media/libmediaplayer2/nuplayer2/GenericSource2.cpp @@ -1149,7 +1149,7 @@ status_t NuPlayer2::GenericSource2::doSeek(int64_t seekTimeUs, MediaPlayer2SeekM } sp NuPlayer2::GenericSource2::mediaBufferToABuffer( - MediaBuffer* mb, + MediaBufferBase* mb, media_track_type trackType) { bool audio = trackType == MEDIA_TRACK_TYPE_AUDIO; size_t outLength = mb->range_length(); @@ -1333,7 +1333,7 @@ void NuPlayer2::GenericSource2::readBuffer( int32_t generation = getDataGeneration(trackType); for (size_t numBuffers = 0; numBuffers < maxBuffers; ) { - Vector mediaBuffers; + Vector mediaBuffers; status_t err = NO_ERROR; sp source = track->mSource; @@ -1342,7 +1342,7 @@ void NuPlayer2::GenericSource2::readBuffer( err = source->readMultiple( &mediaBuffers, maxBuffers - numBuffers, &options); } else { - MediaBuffer *mbuf = NULL; + MediaBufferBase *mbuf = NULL; err = source->read(&mbuf, &options); if (err == OK && mbuf != NULL) { mediaBuffers.push_back(mbuf); @@ -1365,7 +1365,7 @@ void NuPlayer2::GenericSource2::readBuffer( for (; id < count; ++id) { int64_t timeUs; - MediaBuffer *mbuf = mediaBuffers[id]; + MediaBufferBase *mbuf = mediaBuffers[id]; if (!mbuf->meta_data()->findInt64(kKeyTime, &timeUs)) { mbuf->meta_data()->dumpToLog(); track->mPackets->signalEOS(ERROR_MALFORMED); @@ -1659,7 +1659,7 @@ status_t NuPlayer2::GenericSource2::checkDrmInfo() return OK; } -void NuPlayer2::GenericSource2::signalBufferReturned(MediaBuffer *buffer) +void NuPlayer2::GenericSource2::signalBufferReturned(MediaBufferBase *buffer) { //ALOGV("signalBufferReturned %p refCount: %d", buffer, buffer->localRefcount()); diff --git a/media/libmediaplayer2/nuplayer2/GenericSource2.h b/media/libmediaplayer2/nuplayer2/GenericSource2.h index 1a5409a6b5..896c39786b 100644 --- a/media/libmediaplayer2/nuplayer2/GenericSource2.h +++ b/media/libmediaplayer2/nuplayer2/GenericSource2.h @@ -86,7 +86,7 @@ struct NuPlayer2::GenericSource2 : public NuPlayer2::Source, virtual bool isStreaming() const; // Modular DRM - virtual void signalBufferReturned(MediaBuffer *buffer); + virtual void signalBufferReturned(MediaBufferBase *buffer); virtual status_t prepareDrm( const uint8_t uuid[16], @@ -202,7 +202,7 @@ private: int32_t curGen, const sp& packets, const sp& msg); sp mediaBufferToABuffer( - MediaBuffer *mbuf, + MediaBufferBase *mbuf, media_track_type trackType); void postReadBuffer(media_track_type trackType); diff --git a/media/libmediaplayer2/nuplayer2/NuPlayer2Decoder.cpp b/media/libmediaplayer2/nuplayer2/NuPlayer2Decoder.cpp index a436592873..c49bccb60f 100644 --- a/media/libmediaplayer2/nuplayer2/NuPlayer2Decoder.cpp +++ b/media/libmediaplayer2/nuplayer2/NuPlayer2Decoder.cpp @@ -1066,7 +1066,7 @@ bool NuPlayer2::Decoder::onInputBufferFetched(const sp &msg) { } // Modular DRM - MediaBuffer *mediaBuf = NULL; + MediaBufferBase *mediaBuf = NULL; sp cryptInfo; // copy into codec buffer diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.cpp b/media/libmediaplayerservice/nuplayer/GenericSource.cpp index 511f46f456..b0c82f26c6 100644 --- a/media/libmediaplayerservice/nuplayer/GenericSource.cpp +++ b/media/libmediaplayerservice/nuplayer/GenericSource.cpp @@ -1143,7 +1143,7 @@ status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs, MediaPlayerSeekMode } sp NuPlayer::GenericSource::mediaBufferToABuffer( - MediaBuffer* mb, + MediaBufferBase* mb, media_track_type trackType) { bool audio = trackType == MEDIA_TRACK_TYPE_AUDIO; size_t outLength = mb->range_length(); @@ -1326,7 +1326,7 @@ void NuPlayer::GenericSource::readBuffer( int32_t generation = getDataGeneration(trackType); for (size_t numBuffers = 0; numBuffers < maxBuffers; ) { - Vector mediaBuffers; + Vector mediaBuffers; status_t err = NO_ERROR; sp source = track->mSource; @@ -1335,7 +1335,7 @@ void NuPlayer::GenericSource::readBuffer( err = source->readMultiple( &mediaBuffers, maxBuffers - numBuffers, &options); } else { - MediaBuffer *mbuf = NULL; + MediaBufferBase *mbuf = NULL; err = source->read(&mbuf, &options); if (err == OK && mbuf != NULL) { mediaBuffers.push_back(mbuf); @@ -1358,7 +1358,7 @@ void NuPlayer::GenericSource::readBuffer( for (; id < count; ++id) { int64_t timeUs; - MediaBuffer *mbuf = mediaBuffers[id]; + MediaBufferBase *mbuf = mediaBuffers[id]; if (!mbuf->meta_data()->findInt64(kKeyTime, &timeUs)) { mbuf->meta_data()->dumpToLog(); track->mPackets->signalEOS(ERROR_MALFORMED); @@ -1654,7 +1654,7 @@ status_t NuPlayer::GenericSource::checkDrmInfo() return OK; } -void NuPlayer::GenericSource::signalBufferReturned(MediaBuffer *buffer) +void NuPlayer::GenericSource::signalBufferReturned(MediaBufferBase *buffer) { //ALOGV("signalBufferReturned %p refCount: %d", buffer, buffer->localRefcount()); diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.h b/media/libmediaplayerservice/nuplayer/GenericSource.h index 2406665746..065cac1048 100644 --- a/media/libmediaplayerservice/nuplayer/GenericSource.h +++ b/media/libmediaplayerservice/nuplayer/GenericSource.h @@ -86,7 +86,7 @@ struct NuPlayer::GenericSource : public NuPlayer::Source, virtual bool isStreaming() const; // Modular DRM - virtual void signalBufferReturned(MediaBuffer *buffer); + virtual void signalBufferReturned(MediaBufferBase *buffer); virtual status_t prepareDrm( const uint8_t uuid[16], const Vector &drmSessionId, sp *outCrypto); @@ -201,7 +201,7 @@ private: int32_t curGen, const sp& packets, const sp& msg); sp mediaBufferToABuffer( - MediaBuffer *mbuf, + MediaBufferBase *mbuf, media_track_type trackType); void postReadBuffer(media_track_type trackType); diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp index 1aca96c511..88594d2024 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp @@ -1046,7 +1046,7 @@ bool NuPlayer::Decoder::onInputBufferFetched(const sp &msg) { } // Modular DRM - MediaBuffer *mediaBuf = NULL; + MediaBufferBase *mediaBuf = NULL; NuPlayerDrm::CryptoInfo *cryptInfo = NULL; // copy into codec buffer diff --git a/media/libstagefright/AACWriter.cpp b/media/libstagefright/AACWriter.cpp index 281af477ec..d64138ef0b 100644 --- a/media/libstagefright/AACWriter.cpp +++ b/media/libstagefright/AACWriter.cpp @@ -294,7 +294,7 @@ status_t AACWriter::threadFunc() { prctl(PR_SET_NAME, (unsigned long)"AACWriterThread", 0, 0, 0); while (!mDone && err == OK) { - MediaBuffer *buffer; + MediaBufferBase *buffer; err = mSource->read(&buffer); if (err != OK) { diff --git a/media/libstagefright/AMRWriter.cpp b/media/libstagefright/AMRWriter.cpp index 910abc642c..e33d3da812 100644 --- a/media/libstagefright/AMRWriter.cpp +++ b/media/libstagefright/AMRWriter.cpp @@ -193,7 +193,7 @@ status_t AMRWriter::threadFunc() { prctl(PR_SET_NAME, (unsigned long)"AMRWriter", 0, 0, 0); while (!mDone) { - MediaBuffer *buffer; + MediaBufferBase *buffer; err = mSource->read(&buffer); if (err != OK) { diff --git a/media/libstagefright/AudioSource.cpp b/media/libstagefright/AudioSource.cpp index 70ce38c629..d8545824dd 100644 --- a/media/libstagefright/AudioSource.cpp +++ b/media/libstagefright/AudioSource.cpp @@ -240,7 +240,7 @@ void AudioSource::rampVolume( } status_t AudioSource::read( - MediaBuffer **out, const ReadOptions * /* options */) { + MediaBufferBase **out, const ReadOptions * /* options */) { Mutex::Autolock autoLock(mLock); *out = NULL; @@ -311,7 +311,7 @@ status_t AudioSource::setStopTimeUs(int64_t stopTimeUs) { return OK; } -void AudioSource::signalBufferReturned(MediaBuffer *buffer) { +void AudioSource::signalBufferReturned(MediaBufferBase *buffer) { ALOGV("signalBufferReturned: %p", buffer->data()); Mutex::Autolock autoLock(mLock); --mNumClientOwnedBuffers; diff --git a/media/libstagefright/CallbackMediaSource.cpp b/media/libstagefright/CallbackMediaSource.cpp index 6811882db6..ea7392efc0 100644 --- a/media/libstagefright/CallbackMediaSource.cpp +++ b/media/libstagefright/CallbackMediaSource.cpp @@ -36,7 +36,7 @@ sp CallbackMediaSource::getFormat() { return mSource->getFormat(); } -status_t CallbackMediaSource::read(MediaBuffer **buffer, const ReadOptions *options) { +status_t CallbackMediaSource::read(MediaBufferBase **buffer, const ReadOptions *options) { return mSource->read(buffer, reinterpret_cast(options)); } diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp index 6ed0d0eb43..4960418dd3 100644 --- a/media/libstagefright/CameraSource.cpp +++ b/media/libstagefright/CameraSource.cpp @@ -1040,7 +1040,7 @@ void CameraSource::releaseOneRecordingFrame(const sp& frame) { releaseRecordingFrame(frame); } -void CameraSource::signalBufferReturned(MediaBuffer *buffer) { +void CameraSource::signalBufferReturned(MediaBufferBase *buffer) { ALOGV("signalBufferReturned: %p", buffer->data()); Mutex::Autolock autoLock(mLock); for (List >::iterator it = mFramesBeingEncoded.begin(); @@ -1059,7 +1059,7 @@ void CameraSource::signalBufferReturned(MediaBuffer *buffer) { } status_t CameraSource::read( - MediaBuffer **buffer, const ReadOptions *options) { + MediaBufferBase **buffer, const ReadOptions *options) { ALOGV("read"); *buffer = NULL; diff --git a/media/libstagefright/CameraSourceTimeLapse.cpp b/media/libstagefright/CameraSourceTimeLapse.cpp index 970526af66..f3f06d8e92 100644 --- a/media/libstagefright/CameraSourceTimeLapse.cpp +++ b/media/libstagefright/CameraSourceTimeLapse.cpp @@ -168,7 +168,7 @@ bool CameraSourceTimeLapse::trySettingVideoSize( return isSuccessful; } -void CameraSourceTimeLapse::signalBufferReturned(MediaBuffer* buffer) { +void CameraSourceTimeLapse::signalBufferReturned(MediaBufferBase* buffer) { ALOGV("signalBufferReturned"); Mutex::Autolock autoLock(mQuickStopLock); if (mQuickStop && (buffer == mLastReadBufferCopy)) { @@ -180,9 +180,9 @@ void CameraSourceTimeLapse::signalBufferReturned(MediaBuffer* buffer) { } void createMediaBufferCopy( - const MediaBuffer& sourceBuffer, + const MediaBufferBase& sourceBuffer, int64_t frameTime, - MediaBuffer **newBuffer) { + MediaBufferBase **newBuffer) { ALOGV("createMediaBufferCopy"); size_t sourceSize = sourceBuffer.size(); @@ -194,7 +194,7 @@ void createMediaBufferCopy( (*newBuffer)->meta_data()->setInt64(kKeyTime, frameTime); } -void CameraSourceTimeLapse::fillLastReadBufferCopy(MediaBuffer& sourceBuffer) { +void CameraSourceTimeLapse::fillLastReadBufferCopy(MediaBufferBase& sourceBuffer) { ALOGV("fillLastReadBufferCopy"); int64_t frameTime; CHECK(sourceBuffer.meta_data()->findInt64(kKeyTime, &frameTime)); @@ -204,7 +204,7 @@ void CameraSourceTimeLapse::fillLastReadBufferCopy(MediaBuffer& sourceBuffer) { } status_t CameraSourceTimeLapse::read( - MediaBuffer **buffer, const ReadOptions *options) { + MediaBufferBase **buffer, const ReadOptions *options) { ALOGV("read"); if (mLastReadBufferCopy == NULL) { mLastReadStatus = CameraSource::read(buffer, options); diff --git a/media/libstagefright/FrameDecoder.cpp b/media/libstagefright/FrameDecoder.cpp index b529940f31..6f88c0ec93 100644 --- a/media/libstagefright/FrameDecoder.cpp +++ b/media/libstagefright/FrameDecoder.cpp @@ -230,7 +230,7 @@ status_t FrameDecoder::extractInternal( } codecBuffer = inputBuffers[inputIndex]; - MediaBuffer *mediaBuffer = NULL; + MediaBufferBase *mediaBuffer = NULL; err = mSource->read(&mediaBuffer, &options); options.clearSeekTo(); diff --git a/media/libstagefright/JPEGSource.cpp b/media/libstagefright/JPEGSource.cpp index ee3aedbf78..10eb2d26d0 100644 --- a/media/libstagefright/JPEGSource.cpp +++ b/media/libstagefright/JPEGSource.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -108,7 +109,7 @@ sp JPEGSource::getFormat() { } status_t JPEGSource::read( - MediaBuffer **out, const ReadOptions *options) { + MediaBufferBase **out, const ReadOptions *options) { *out = NULL; int64_t seekTimeUs; @@ -117,7 +118,7 @@ status_t JPEGSource::read( return UNKNOWN_ERROR; } - MediaBuffer *buffer; + MediaBufferBase *buffer; mGroup->acquire_buffer(&buffer); ssize_t n = mSource->readAt(mOffset, buffer->data(), mSize - mOffset); diff --git a/media/libstagefright/MPEG2TSWriter.cpp b/media/libstagefright/MPEG2TSWriter.cpp index 4c85b0d222..cdcd657bf0 100644 --- a/media/libstagefright/MPEG2TSWriter.cpp +++ b/media/libstagefright/MPEG2TSWriter.cpp @@ -85,8 +85,8 @@ private: void extractCodecSpecificData(); - void appendAACFrames(MediaBuffer *buffer); - void appendAVCFrame(MediaBuffer *buffer); + void appendAACFrames(MediaBufferBase *buffer); + void appendAVCFrame(MediaBufferBase *buffer); DISALLOW_EVIL_CONSTRUCTORS(SourceInfo); }; @@ -249,7 +249,7 @@ void MPEG2TSWriter::SourceInfo::extractCodecSpecificData() { notify->post(); } -void MPEG2TSWriter::SourceInfo::appendAVCFrame(MediaBuffer *buffer) { +void MPEG2TSWriter::SourceInfo::appendAVCFrame(MediaBufferBase *buffer) { sp notify = mNotify->dup(); notify->setInt32("what", kNotifyBuffer); @@ -279,7 +279,7 @@ void MPEG2TSWriter::SourceInfo::appendAVCFrame(MediaBuffer *buffer) { notify->post(); } -void MPEG2TSWriter::SourceInfo::appendAACFrames(MediaBuffer *buffer) { +void MPEG2TSWriter::SourceInfo::appendAACFrames(MediaBufferBase *buffer) { sp notify = mNotify->dup(); notify->setInt32("what", kNotifyBuffer); @@ -368,7 +368,7 @@ void MPEG2TSWriter::SourceInfo::onMessageReceived(const sp &msg) { case kWhatRead: { - MediaBuffer *buffer; + MediaBufferBase *buffer; status_t err = mSource->read(&buffer); if (err != OK && err != INFO_FORMAT_CHANGED) { diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index 8db00f08a7..387cb13df1 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -2809,7 +2809,7 @@ status_t MPEG4Writer::Track::threadEntry() { sp meta_data; status_t err = OK; - MediaBuffer *buffer; + MediaBufferBase *buffer; const char *trackName = getTrackType(); while (!mDone && (err = mSource->read(&buffer)) == OK) { if (buffer->range_length() == 0) { diff --git a/media/libstagefright/MediaAdapter.cpp b/media/libstagefright/MediaAdapter.cpp index 74eb1ffe4c..f1b6e8c36a 100644 --- a/media/libstagefright/MediaAdapter.cpp +++ b/media/libstagefright/MediaAdapter.cpp @@ -72,7 +72,7 @@ sp MediaAdapter::getFormat() { return mOutputFormat; } -void MediaAdapter::signalBufferReturned(MediaBuffer *buffer) { +void MediaAdapter::signalBufferReturned(MediaBufferBase *buffer) { Mutex::Autolock autoLock(mAdapterLock); CHECK(buffer != NULL); buffer->setObserver(0); @@ -82,7 +82,7 @@ void MediaAdapter::signalBufferReturned(MediaBuffer *buffer) { } status_t MediaAdapter::read( - MediaBuffer **buffer, const ReadOptions * /* options */) { + MediaBufferBase **buffer, const ReadOptions * /* options */) { Mutex::Autolock autoLock(mAdapterLock); if (!mStarted) { ALOGV("Read before even started!"); diff --git a/media/libstagefright/MediaCodecSource.cpp b/media/libstagefright/MediaCodecSource.cpp index 04d83af9fd..08331ad62e 100644 --- a/media/libstagefright/MediaCodecSource.cpp +++ b/media/libstagefright/MediaCodecSource.cpp @@ -59,7 +59,7 @@ struct MediaCodecSource::Puller : public AHandler { void pause(); void resume(); status_t setStopTimeUs(int64_t stopTimeUs); - bool readBuffer(MediaBuffer **buffer); + bool readBuffer(MediaBufferBase **buffer); protected: virtual void onMessageReceived(const sp &msg); @@ -86,14 +86,14 @@ private: int64_t mReadPendingSince; bool mPaused; bool mPulling; - Vector mReadBuffers; + Vector mReadBuffers; void flush(); // if queue is empty, return false and set *|buffer| to NULL . Otherwise, pop // buffer from front of the queue, place it into *|buffer| and return true. - bool readBuffer(MediaBuffer **buffer); + bool readBuffer(MediaBufferBase **buffer); // add a buffer to the back of the queue - void pushBuffer(MediaBuffer *mbuf); + void pushBuffer(MediaBufferBase *mbuf); }; Mutexed mQueue; @@ -123,11 +123,11 @@ MediaCodecSource::Puller::~Puller() { mLooper->stop(); } -void MediaCodecSource::Puller::Queue::pushBuffer(MediaBuffer *mbuf) { +void MediaCodecSource::Puller::Queue::pushBuffer(MediaBufferBase *mbuf) { mReadBuffers.push_back(mbuf); } -bool MediaCodecSource::Puller::Queue::readBuffer(MediaBuffer **mbuf) { +bool MediaCodecSource::Puller::Queue::readBuffer(MediaBufferBase **mbuf) { if (mReadBuffers.empty()) { *mbuf = NULL; return false; @@ -138,14 +138,14 @@ bool MediaCodecSource::Puller::Queue::readBuffer(MediaBuffer **mbuf) { } void MediaCodecSource::Puller::Queue::flush() { - MediaBuffer *mbuf; + MediaBufferBase *mbuf; while (readBuffer(&mbuf)) { // there are no null buffers in the queue mbuf->release(); } } -bool MediaCodecSource::Puller::readBuffer(MediaBuffer **mbuf) { +bool MediaCodecSource::Puller::readBuffer(MediaBufferBase **mbuf) { Mutexed::Locked queue(mQueue); return queue->readBuffer(mbuf); } @@ -298,7 +298,7 @@ void MediaCodecSource::Puller::onMessageReceived(const sp &msg) { } queue.unlock(); - MediaBuffer *mbuf = NULL; + MediaBufferBase *mbuf = NULL; status_t err = mSource->read(&mbuf); queue.lock(); @@ -413,7 +413,7 @@ sp MediaCodecSource::getGraphicBufferProducer() { } status_t MediaCodecSource::read( - MediaBuffer** buffer, const ReadOptions* /* options */) { + MediaBufferBase** buffer, const ReadOptions* /* options */) { Mutexed::Locked output(mOutput); *buffer = NULL; @@ -428,7 +428,7 @@ status_t MediaCodecSource::read( return output->mErrorCode; } -void MediaCodecSource::signalBufferReturned(MediaBuffer *buffer) { +void MediaCodecSource::signalBufferReturned(MediaBufferBase *buffer) { buffer->setObserver(0); buffer->release(); } @@ -636,7 +636,7 @@ void MediaCodecSource::signalEOS(status_t err) { if (!reachedEOS) { ALOGV("encoder (%s) reached EOS", mIsVideo ? "video" : "audio"); // release all unread media buffers - for (List::iterator it = output->mBufferQueue.begin(); + for (List::iterator it = output->mBufferQueue.begin(); it != output->mBufferQueue.end(); it++) { (*it)->release(); } @@ -682,7 +682,7 @@ void MediaCodecSource::resume(int64_t resumeStartTimeUs) { } status_t MediaCodecSource::feedEncoderInputBuffers() { - MediaBuffer* mbuf = NULL; + MediaBufferBase* mbuf = NULL; while (!mAvailEncoderInputIndices.empty() && mPuller->readBuffer(&mbuf)) { size_t bufferIndex = *mAvailEncoderInputIndices.begin(); mAvailEncoderInputIndices.erase(mAvailEncoderInputIndices.begin()); @@ -906,7 +906,7 @@ void MediaCodecSource::onMessageReceived(const sp &msg) { break; } - MediaBuffer *mbuf = new MediaBuffer(outbuf->size()); + MediaBufferBase *mbuf = new MediaBuffer(outbuf->size()); mbuf->setObserver(this); mbuf->add_ref(); diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp index d96f7e010c..c6cbb2f085 100644 --- a/media/libstagefright/NuMediaExtractor.cpp +++ b/media/libstagefright/NuMediaExtractor.cpp @@ -45,7 +45,7 @@ NuMediaExtractor::Sample::Sample() mSampleTimeUs(-1ll) { } -NuMediaExtractor::Sample::Sample(MediaBuffer *buffer, int64_t timeUs) +NuMediaExtractor::Sample::Sample(MediaBufferBase *buffer, int64_t timeUs) : mBuffer(buffer), mSampleTimeUs(timeUs) { } @@ -488,12 +488,12 @@ void NuMediaExtractor::fetchTrackSamples(TrackInfo *info, } status_t err = OK; - Vector mediaBuffers; + Vector mediaBuffers; if (info->mSource->supportReadMultiple()) { options.setNonBlocking(); err = info->mSource->readMultiple(&mediaBuffers, info->mMaxFetchCount, &options); } else { - MediaBuffer *mbuf = NULL; + MediaBufferBase *mbuf = NULL; err = info->mSource->read(&mbuf, &options); if (err == OK && mbuf != NULL) { mediaBuffers.push_back(mbuf); @@ -505,7 +505,7 @@ void NuMediaExtractor::fetchTrackSamples(TrackInfo *info, ALOGW("read on track %zu failed with error %d", info->mTrackIndex, err); size_t count = mediaBuffers.size(); for (size_t id = 0; id < count; ++id) { - MediaBuffer *mbuf = mediaBuffers[id]; + MediaBufferBase *mbuf = mediaBuffers[id]; if (mbuf != NULL) { mbuf->release(); } @@ -517,7 +517,7 @@ void NuMediaExtractor::fetchTrackSamples(TrackInfo *info, bool releaseRemaining = false; for (size_t id = 0; id < count; ++id) { int64_t timeUs; - MediaBuffer *mbuf = mediaBuffers[id]; + MediaBufferBase *mbuf = mediaBuffers[id]; if (mbuf == NULL) { continue; } @@ -565,7 +565,8 @@ status_t NuMediaExtractor::advance() { return OK; } -status_t NuMediaExtractor::appendVorbisNumPageSamples(MediaBuffer *mbuf, const sp &buffer) { +status_t NuMediaExtractor::appendVorbisNumPageSamples( + MediaBufferBase *mbuf, const sp &buffer) { int32_t numPageSamples; if (!mbuf->meta_data()->findInt32( kKeyValidSamples, &numPageSamples)) { diff --git a/media/libstagefright/RemoteMediaSource.cpp b/media/libstagefright/RemoteMediaSource.cpp index 6b48ce8459..d038454426 100644 --- a/media/libstagefright/RemoteMediaSource.cpp +++ b/media/libstagefright/RemoteMediaSource.cpp @@ -45,7 +45,8 @@ sp RemoteMediaSource::getFormat() { return mSource->getFormat(); } -status_t RemoteMediaSource::read(MediaBuffer **buffer, const MediaSource::ReadOptions *options) { +status_t RemoteMediaSource::read( + MediaBufferBase **buffer, const MediaSource::ReadOptions *options) { return mSource->read(buffer, reinterpret_cast(options)); } diff --git a/media/libstagefright/SimpleDecodingSource.cpp b/media/libstagefright/SimpleDecodingSource.cpp index 9b2fb4ff16..f93a0b7ac1 100644 --- a/media/libstagefright/SimpleDecodingSource.cpp +++ b/media/libstagefright/SimpleDecodingSource.cpp @@ -200,7 +200,7 @@ SimpleDecodingSource::ProtectedState::ProtectedState(const sp &format) } status_t SimpleDecodingSource::read( - MediaBuffer **buffer, const ReadOptions *options) { + MediaBufferBase **buffer, const ReadOptions *options) { *buffer = NULL; Mutexed::Locked me(mProtectedState); @@ -221,7 +221,7 @@ status_t SimpleDecodingSource::read( } status_t SimpleDecodingSource::doRead( - Mutexed::Locked &me, MediaBuffer **buffer, const ReadOptions *options) { + Mutexed::Locked &me, MediaBufferBase **buffer, const ReadOptions *options) { // |me| is always locked on entry, but is allowed to be unlocked on exit CHECK_EQ(me->mState, STARTED); @@ -267,7 +267,7 @@ status_t SimpleDecodingSource::doRead( return UNKNOWN_ERROR; } - MediaBuffer *in_buf; + MediaBufferBase *in_buf; while (true) { in_buf = NULL; me.unlock(); diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp index d14e86b1f2..4b3076a30d 100644 --- a/media/libstagefright/SurfaceMediaSource.cpp +++ b/media/libstagefright/SurfaceMediaSource.cpp @@ -251,7 +251,7 @@ sp SurfaceMediaSource::getFormat() // Pass the data to the MediaBuffer. Pass in only the metadata // Note: Call only when you have the lock -void SurfaceMediaSource::passMetadataBuffer_l(MediaBuffer **buffer, +void SurfaceMediaSource::passMetadataBuffer_l(MediaBufferBase **buffer, ANativeWindowBuffer *bufferHandle) const { *buffer = new MediaBuffer(sizeof(VideoNativeMetadata)); VideoNativeMetadata *data = (VideoNativeMetadata *)(*buffer)->data(); @@ -267,7 +267,7 @@ void SurfaceMediaSource::passMetadataBuffer_l(MediaBuffer **buffer, } status_t SurfaceMediaSource::read( - MediaBuffer **buffer, const ReadOptions * /* options */) { + MediaBufferBase **buffer, const ReadOptions * /* options */) { ALOGV("read"); Mutex::Autolock lock(mMutex); @@ -371,7 +371,7 @@ status_t SurfaceMediaSource::read( return OK; } -static buffer_handle_t getMediaBufferHandle(MediaBuffer *buffer) { +static buffer_handle_t getMediaBufferHandle(MediaBufferBase *buffer) { // need to convert to char* for pointer arithmetic and then // copy the byte stream into our handle buffer_handle_t bufferHandle; @@ -379,7 +379,7 @@ static buffer_handle_t getMediaBufferHandle(MediaBuffer *buffer) { return bufferHandle; } -void SurfaceMediaSource::signalBufferReturned(MediaBuffer *buffer) { +void SurfaceMediaSource::signalBufferReturned(MediaBufferBase *buffer) { ALOGV("signalBufferReturned"); bool foundBuffer = false; diff --git a/media/libstagefright/codecs/cmds/codec2.cpp b/media/libstagefright/codecs/cmds/codec2.cpp index d95bb075e5..8022b84ee1 100644 --- a/media/libstagefright/codecs/cmds/codec2.cpp +++ b/media/libstagefright/codecs/cmds/codec2.cpp @@ -295,7 +295,7 @@ void SimplePlayer::play(const sp &source) { size_t size = 0u; void *data = nullptr; int64_t timestamp = 0u; - MediaBuffer *buffer = nullptr; + MediaBufferBase *buffer = nullptr; sp csd; if (csd0 != nullptr) { csd = csd0; diff --git a/media/libstagefright/include/media/stagefright/AudioPlayer.h b/media/libstagefright/include/media/stagefright/AudioPlayer.h index e971762591..7c2c36fc0e 100644 --- a/media/libstagefright/include/media/stagefright/AudioPlayer.h +++ b/media/libstagefright/include/media/stagefright/AudioPlayer.h @@ -69,7 +69,7 @@ private: sp mSource; sp mAudioTrack; - MediaBuffer *mInputBuffer; + MediaBufferBase *mInputBuffer; int mSampleRate; int64_t mLatencyUs; @@ -91,7 +91,7 @@ private: bool mIsFirstBuffer; status_t mFirstBufferResult; - MediaBuffer *mFirstBuffer; + MediaBufferBase *mFirstBuffer; sp mAudioSink; diff --git a/media/libstagefright/include/media/stagefright/AudioSource.h b/media/libstagefright/include/media/stagefright/AudioSource.h index f66b92df9f..206d322661 100644 --- a/media/libstagefright/include/media/stagefright/AudioSource.h +++ b/media/libstagefright/include/media/stagefright/AudioSource.h @@ -56,11 +56,11 @@ struct AudioSource : public MediaSource, public MediaBufferObserver { int16_t getMaxAmplitude(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); virtual status_t setStopTimeUs(int64_t stopTimeUs); status_t dataCallback(const AudioRecord::Buffer& buffer); - virtual void signalBufferReturned(MediaBuffer *buffer); + virtual void signalBufferReturned(MediaBufferBase *buffer); status_t setInputDevice(audio_port_handle_t deviceId); status_t getRoutedDeviceId(audio_port_handle_t* deviceId); diff --git a/media/libstagefright/include/media/stagefright/CallbackMediaSource.h b/media/libstagefright/include/media/stagefright/CallbackMediaSource.h index 944d951788..33453faae6 100644 --- a/media/libstagefright/include/media/stagefright/CallbackMediaSource.h +++ b/media/libstagefright/include/media/stagefright/CallbackMediaSource.h @@ -33,7 +33,7 @@ public: virtual status_t stop(); virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); virtual status_t pause(); private: diff --git a/media/libstagefright/include/media/stagefright/CameraSource.h b/media/libstagefright/include/media/stagefright/CameraSource.h index 945e1be58b..475976b6eb 100644 --- a/media/libstagefright/include/media/stagefright/CameraSource.h +++ b/media/libstagefright/include/media/stagefright/CameraSource.h @@ -97,7 +97,7 @@ public: virtual status_t start(MetaData *params = NULL); virtual status_t stop() { return reset(); } virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); virtual status_t setStopTimeUs(int64_t stopTimeUs); /** @@ -127,7 +127,7 @@ public: */ MetadataBufferType metaDataStoredInVideoBuffers() const; - virtual void signalBufferReturned(MediaBuffer* buffer); + virtual void signalBufferReturned(MediaBufferBase* buffer); protected: diff --git a/media/libstagefright/include/media/stagefright/CameraSourceTimeLapse.h b/media/libstagefright/include/media/stagefright/CameraSourceTimeLapse.h index b066f9a463..533e33b4ce 100644 --- a/media/libstagefright/include/media/stagefright/CameraSourceTimeLapse.h +++ b/media/libstagefright/include/media/stagefright/CameraSourceTimeLapse.h @@ -107,7 +107,7 @@ private: // Stores a copy of the MediaBuffer read in the last read() call after // mQuickStop was true. - MediaBuffer* mLastReadBufferCopy; + MediaBufferBase* mLastReadBufferCopy; // Status code for last read. status_t mLastReadStatus; @@ -128,10 +128,10 @@ private: // Wrapper over CameraSource::signalBufferReturned() to implement quick stop. // It only handles the case when mLastReadBufferCopy is signalled. Otherwise // it calls the base class' function. - virtual void signalBufferReturned(MediaBuffer* buffer); + virtual void signalBufferReturned(MediaBufferBase* buffer); // Wrapper over CameraSource::read() to implement quick stop. - virtual status_t read(MediaBuffer **buffer, const ReadOptions *options = NULL); + virtual status_t read(MediaBufferBase **buffer, const ReadOptions *options = NULL); // mSkipCurrentFrame is set to true in dataCallbackTimestamp() if the current // frame needs to be skipped and this function just returns the value of mSkipCurrentFrame. @@ -170,7 +170,7 @@ private: // Convenience function to fill mLastReadBufferCopy from the just read // buffer. - void fillLastReadBufferCopy(MediaBuffer& sourceBuffer); + void fillLastReadBufferCopy(MediaBufferBase& sourceBuffer); // If the passed in size (width x height) is a supported video/preview size, // the function sets the camera's video/preview size to it and returns true. diff --git a/media/libstagefright/include/media/stagefright/JPEGSource.h b/media/libstagefright/include/media/stagefright/JPEGSource.h index 9fcbfc2bce..8ab3d11b84 100644 --- a/media/libstagefright/include/media/stagefright/JPEGSource.h +++ b/media/libstagefright/include/media/stagefright/JPEGSource.h @@ -33,7 +33,7 @@ struct JPEGSource : public MediaSource { virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); protected: virtual ~JPEGSource(); diff --git a/media/libstagefright/include/media/stagefright/MediaAdapter.h b/media/libstagefright/include/media/stagefright/MediaAdapter.h index 4b47160cb4..589c8275d2 100644 --- a/media/libstagefright/include/media/stagefright/MediaAdapter.h +++ b/media/libstagefright/include/media/stagefright/MediaAdapter.h @@ -40,13 +40,13 @@ public: virtual status_t stop(); virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); ///////////////////////////////////////////////// // Inherited functions from MediaBufferObserver ///////////////////////////////////////////////// - virtual void signalBufferReturned(MediaBuffer *buffer); + virtual void signalBufferReturned(MediaBufferBase *buffer); ///////////////////////////////////////////////// // Non-inherited functions: diff --git a/media/libstagefright/include/media/stagefright/MediaBufferBase.h b/media/libstagefright/include/media/stagefright/MediaBufferBase.h new file mode 120000 index 0000000000..80e49b019a --- /dev/null +++ b/media/libstagefright/include/media/stagefright/MediaBufferBase.h @@ -0,0 +1 @@ +../../../../libmediaextractor/include/media/stagefright/MediaBufferBase.h \ No newline at end of file diff --git a/media/libstagefright/include/media/stagefright/MediaCodecSource.h b/media/libstagefright/include/media/stagefright/MediaCodecSource.h index eec115e902..a68cc19864 100644 --- a/media/libstagefright/include/media/stagefright/MediaCodecSource.h +++ b/media/libstagefright/include/media/stagefright/MediaCodecSource.h @@ -57,13 +57,13 @@ struct MediaCodecSource : public MediaSource, virtual status_t pause(MetaData *params); virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, + MediaBufferBase **buffer, const ReadOptions *options = NULL); virtual status_t setStopTimeUs(int64_t stopTimeUs); // MediaBufferObserver - virtual void signalBufferReturned(MediaBuffer *buffer); + virtual void signalBufferReturned(MediaBufferBase *buffer); // for AHandlerReflector void onMessageReceived(const sp &msg); @@ -136,7 +136,7 @@ private: sp mEncoderActivityNotify; sp mGraphicBufferProducer; sp mPersistentSurface; - List mInputBufferQueue; + List mInputBufferQueue; List mAvailEncoderInputIndices; List mDecodingTimeQueue; // decoding time (us) for video int64_t mInputBufferTimeOffsetUs; @@ -149,7 +149,7 @@ private: struct Output { Output(); - List mBufferQueue; + List mBufferQueue; bool mEncoderReachedEOS; status_t mErrorCode; Condition mCond; diff --git a/media/libstagefright/include/media/stagefright/NuMediaExtractor.h b/media/libstagefright/include/media/stagefright/NuMediaExtractor.h index 6a2e39b6ad..5e5ef6e32d 100644 --- a/media/libstagefright/include/media/stagefright/NuMediaExtractor.h +++ b/media/libstagefright/include/media/stagefright/NuMediaExtractor.h @@ -107,8 +107,8 @@ private: struct Sample { Sample(); - Sample(MediaBuffer *buffer, int64_t timeUs); - MediaBuffer *mBuffer; + Sample(MediaBufferBase *buffer, int64_t timeUs); + MediaBufferBase *mBuffer; int64_t mSampleTimeUs; }; @@ -150,7 +150,7 @@ private: bool getTotalBitrate(int64_t *bitRate) const; status_t updateDurationAndBitrate(); - status_t appendVorbisNumPageSamples(MediaBuffer *mbuf, const sp &buffer); + status_t appendVorbisNumPageSamples(MediaBufferBase *mbuf, const sp &buffer); DISALLOW_EVIL_CONSTRUCTORS(NuMediaExtractor); }; diff --git a/media/libstagefright/include/media/stagefright/RemoteMediaSource.h b/media/libstagefright/include/media/stagefright/RemoteMediaSource.h index d1afa6a9b7..a9bf8206f5 100644 --- a/media/libstagefright/include/media/stagefright/RemoteMediaSource.h +++ b/media/libstagefright/include/media/stagefright/RemoteMediaSource.h @@ -35,7 +35,7 @@ public: virtual status_t stop(); virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, + MediaBufferBase **buffer, const MediaSource::ReadOptions *options = NULL); virtual status_t pause(); virtual status_t setStopTimeUs(int64_t stopTimeUs); diff --git a/media/libstagefright/include/media/stagefright/SimpleDecodingSource.h b/media/libstagefright/include/media/stagefright/SimpleDecodingSource.h index 3006b451c9..23defb4a29 100644 --- a/media/libstagefright/include/media/stagefright/SimpleDecodingSource.h +++ b/media/libstagefright/include/media/stagefright/SimpleDecodingSource.h @@ -65,7 +65,7 @@ public: virtual sp getFormat(); // reads from the source. This call always blocks. - virtual status_t read(MediaBuffer **buffer, const ReadOptions *options); + virtual status_t read(MediaBufferBase **buffer, const ReadOptions *options); // unsupported methods virtual status_t pause() { return INVALID_OPERATION; } @@ -104,7 +104,8 @@ private: // do the actual reading status_t doRead( - Mutexed::Locked &me, MediaBuffer **buffer, const ReadOptions *options); + Mutexed::Locked &me, MediaBufferBase **buffer, + const ReadOptions *options); }; } // namespace android diff --git a/media/libstagefright/include/media/stagefright/SurfaceMediaSource.h b/media/libstagefright/include/media/stagefright/SurfaceMediaSource.h index 2e495f9e8c..d49e44cd8a 100644 --- a/media/libstagefright/include/media/stagefright/SurfaceMediaSource.h +++ b/media/libstagefright/include/media/stagefright/SurfaceMediaSource.h @@ -79,7 +79,7 @@ public: // For the MediaSource interface for use by StageFrightRecorder: virtual status_t start(MetaData *params = NULL); virtual status_t stop(); - virtual status_t read(MediaBuffer **buffer, + virtual status_t read(MediaBufferBase **buffer, const ReadOptions *options = NULL); virtual sp getFormat(); @@ -90,7 +90,7 @@ public: // The call for the StageFrightRecorder to tell us that // it is done using the MediaBuffer data so that its state // can be set to FREE for dequeuing - virtual void signalBufferReturned(MediaBuffer* buffer); + virtual void signalBufferReturned(MediaBufferBase* buffer); // end of MediaSource interface // getTimestamp retrieves the timestamp associated with the image @@ -236,7 +236,7 @@ private: Condition mMediaBuffersAvailableCondition; // Allocate and return a new MediaBuffer and pass the ANW buffer as metadata into it. - void passMetadataBuffer_l(MediaBuffer **buffer, ANativeWindowBuffer *bufferHandle) const; + void passMetadataBuffer_l(MediaBufferBase **buffer, ANativeWindowBuffer *bufferHandle) const; // Avoid copying and equating and default constructor DISALLOW_EVIL_CONSTRUCTORS(SurfaceMediaSource); diff --git a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp index 1dac1713cd..d0b17e09d2 100644 --- a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp +++ b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp @@ -163,7 +163,7 @@ void AnotherPacketSource::requeueAccessUnit(const sp &buffer) { } status_t AnotherPacketSource::read( - MediaBuffer **out, const ReadOptions *) { + MediaBufferBase **out, const ReadOptions *) { *out = NULL; Mutex::Autolock autoLock(mLock); @@ -202,7 +202,7 @@ status_t AnotherPacketSource::read( seg.mMaxDequeTimeUs = timeUs; } - MediaBuffer *mediaBuffer = new MediaBuffer(buffer); + MediaBufferBase *mediaBuffer = new MediaBuffer(buffer); sp bufmeta = mediaBuffer->meta_data(); bufmeta->setInt64(kKeyTime, timeUs); diff --git a/media/libstagefright/mpeg2ts/AnotherPacketSource.h b/media/libstagefright/mpeg2ts/AnotherPacketSource.h index 3abd57317e..f4a6acbe27 100644 --- a/media/libstagefright/mpeg2ts/AnotherPacketSource.h +++ b/media/libstagefright/mpeg2ts/AnotherPacketSource.h @@ -39,7 +39,7 @@ struct AnotherPacketSource : public MediaSource { virtual sp getFormat(); virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); + MediaBufferBase **buffer, const ReadOptions *options = NULL); void clear(); diff --git a/media/libstagefright/omx/tests/OMXHarness.cpp b/media/libstagefright/omx/tests/OMXHarness.cpp index 86c7211eed..3d9c791d56 100644 --- a/media/libstagefright/omx/tests/OMXHarness.cpp +++ b/media/libstagefright/omx/tests/OMXHarness.cpp @@ -658,7 +658,7 @@ status_t Harness::testSeek( requestedSeekTimeUs, requestedSeekTimeUs / 1E6); } - MediaBuffer *buffer = NULL; + MediaBufferBase *buffer = NULL; options.setSeekTo( requestedSeekTimeUs, MediaSource::ReadOptions::SEEK_NEXT_SYNC); @@ -679,7 +679,7 @@ status_t Harness::testSeek( } status_t err; - MediaBuffer *buffer; + MediaBufferBase *buffer; for (;;) { err = codec->read(&buffer, &options); options.clearSeekTo(); diff --git a/media/libstagefright/rtsp/ARTPWriter.cpp b/media/libstagefright/rtsp/ARTPWriter.cpp index 8604b693e0..4ce8a0c253 100644 --- a/media/libstagefright/rtsp/ARTPWriter.cpp +++ b/media/libstagefright/rtsp/ARTPWriter.cpp @@ -173,7 +173,7 @@ status_t ARTPWriter::pause() { return OK; } -static void StripStartcode(MediaBuffer *buffer) { +static void StripStartcode(MediaBufferBase *buffer) { if (buffer->range_length() < 4) { return; } @@ -195,7 +195,7 @@ void ARTPWriter::onMessageReceived(const sp &msg) { #if 0 if (mMode == H264) { - MediaBuffer *buffer; + MediaBufferBase *buffer; CHECK_EQ(mSource->read(&buffer), (status_t)OK); StripStartcode(buffer); @@ -265,7 +265,7 @@ void ARTPWriter::onMessageReceived(const sp &msg) { } void ARTPWriter::onRead(const sp &msg) { - MediaBuffer *mediaBuf; + MediaBufferBase *mediaBuf; status_t err = mSource->read(&mediaBuf); if (err != OK) { @@ -523,7 +523,7 @@ void ARTPWriter::dumpSessionDesc() { ALOGI("%s", sdp.c_str()); } -void ARTPWriter::makeH264SPropParamSets(MediaBuffer *buffer) { +void ARTPWriter::makeH264SPropParamSets(MediaBufferBase *buffer) { static const char kStartCode[] = "\x00\x00\x00\x01"; const uint8_t *data = @@ -567,7 +567,7 @@ void ARTPWriter::sendBye() { send(buffer, true /* isRTCP */); } -void ARTPWriter::sendAVCData(MediaBuffer *mediaBuf) { +void ARTPWriter::sendAVCData(MediaBufferBase *mediaBuf) { // 12 bytes RTP header + 2 bytes for the FU-indicator and FU-header. CHECK_GE(kMaxPacketSize, 12u + 2u); @@ -663,7 +663,7 @@ void ARTPWriter::sendAVCData(MediaBuffer *mediaBuf) { mLastNTPTime = GetNowNTP(); } -void ARTPWriter::sendH263Data(MediaBuffer *mediaBuf) { +void ARTPWriter::sendH263Data(MediaBufferBase *mediaBuf) { CHECK_GE(kMaxPacketSize, 12u + 2u); int64_t timeUs; @@ -741,7 +741,7 @@ static size_t getFrameSize(bool isWide, unsigned FT) { return frameSize; } -void ARTPWriter::sendAMRData(MediaBuffer *mediaBuf) { +void ARTPWriter::sendAMRData(MediaBufferBase *mediaBuf) { const uint8_t *mediaData = (const uint8_t *)mediaBuf->data() + mediaBuf->range_offset(); diff --git a/media/libstagefright/rtsp/ARTPWriter.h b/media/libstagefright/rtsp/ARTPWriter.h index 92a64f278d..2f134861bf 100644 --- a/media/libstagefright/rtsp/ARTPWriter.h +++ b/media/libstagefright/rtsp/ARTPWriter.h @@ -110,13 +110,13 @@ private: void addSR(const sp &buffer); void addSDES(const sp &buffer); - void makeH264SPropParamSets(MediaBuffer *buffer); + void makeH264SPropParamSets(MediaBufferBase *buffer); void dumpSessionDesc(); void sendBye(); - void sendAVCData(MediaBuffer *mediaBuf); - void sendH263Data(MediaBuffer *mediaBuf); - void sendAMRData(MediaBuffer *mediaBuf); + void sendAVCData(MediaBufferBase *mediaBuf); + void sendH263Data(MediaBufferBase *mediaBuf); + void sendAMRData(MediaBufferBase *mediaBuf); void send(const sp &buffer, bool isRTCP); diff --git a/media/libstagefright/tests/DummyRecorder.cpp b/media/libstagefright/tests/DummyRecorder.cpp index 4f560cb324..c79e6b1a9c 100644 --- a/media/libstagefright/tests/DummyRecorder.cpp +++ b/media/libstagefright/tests/DummyRecorder.cpp @@ -75,7 +75,7 @@ void DummyRecorder::readFromSource() { } status_t err = OK; - MediaBuffer *buffer; + MediaBufferBase *buffer; ALOGV("A fake writer accessing the frames"); while (mStarted && (err = mSource->read(&buffer)) == OK){ // if not getting a valid buffer from source, then exit diff --git a/media/libstagefright/tests/SurfaceMediaSource_test.cpp b/media/libstagefright/tests/SurfaceMediaSource_test.cpp index 051108f335..1b1c3b8cdb 100644 --- a/media/libstagefright/tests/SurfaceMediaSource_test.cpp +++ b/media/libstagefright/tests/SurfaceMediaSource_test.cpp @@ -601,7 +601,7 @@ struct SimpleDummyRecorder { // fakes reading from a media source status_t readFromSource() { - MediaBuffer *buffer; + MediaBufferBase *buffer; status_t err = mSource->read(&buffer); if (err != OK) { return err; diff --git a/media/libstagefright/webm/WebmFrame.cpp b/media/libstagefright/webm/WebmFrame.cpp index e5134ede61..4b0d47cd06 100644 --- a/media/libstagefright/webm/WebmFrame.cpp +++ b/media/libstagefright/webm/WebmFrame.cpp @@ -27,7 +27,7 @@ using namespace android; using namespace webm; namespace { -sp toABuffer(MediaBuffer *mbuf) { +sp toABuffer(MediaBufferBase *mbuf) { sp abuf = new ABuffer(mbuf->range_length()); memcpy(abuf->data(), (uint8_t*) mbuf->data() + mbuf->range_offset(), mbuf->range_length()); return abuf; @@ -46,7 +46,7 @@ WebmFrame::WebmFrame() mEos(true) { } -WebmFrame::WebmFrame(int type, bool key, uint64_t absTimecode, MediaBuffer *mbuf) +WebmFrame::WebmFrame(int type, bool key, uint64_t absTimecode, MediaBufferBase *mbuf) : mType(type), mKey(key), mAbsTimecode(absTimecode), diff --git a/media/libstagefright/webm/WebmFrame.h b/media/libstagefright/webm/WebmFrame.h index 4f0b055a9f..a410a87480 100644 --- a/media/libstagefright/webm/WebmFrame.h +++ b/media/libstagefright/webm/WebmFrame.h @@ -30,7 +30,7 @@ public: const bool mEos; WebmFrame(); - WebmFrame(int type, bool key, uint64_t absTimecode, MediaBuffer *buf); + WebmFrame(int type, bool key, uint64_t absTimecode, MediaBufferBase *buf); ~WebmFrame() {} sp SimpleBlock(uint64_t baseTimecode) const; diff --git a/media/libstagefright/webm/WebmFrameThread.cpp b/media/libstagefright/webm/WebmFrameThread.cpp index 420890b152..0d4c6998a0 100644 --- a/media/libstagefright/webm/WebmFrameThread.cpp +++ b/media/libstagefright/webm/WebmFrameThread.cpp @@ -337,7 +337,7 @@ void WebmFrameMediaSourceThread::run() { mStartTimeUs = kUninitialized; status_t err = OK; - MediaBuffer *buffer; + MediaBufferBase *buffer; while (!mDone && (err = mSource->read(&buffer, NULL)) == OK) { if (buffer->range_length() == 0) { buffer->release();