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
gugelfrei
Dongwon Kang 7 years ago
parent 405b3c70cc
commit 1889c3edad

@ -4,6 +4,7 @@
#include <media/stagefright/MediaBufferGroup.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MetaData.h>
@ -59,10 +60,10 @@ sp<MetaData> 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) {

@ -18,7 +18,7 @@ struct SineSource : public MediaSource {
virtual sp<MetaData> getFormat();
virtual status_t read(
MediaBuffer **out, const ReadOptions *options = NULL);
MediaBufferBase **out, const ReadOptions *options = NULL);
protected:
virtual ~SineSource();

@ -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...

@ -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);

@ -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, ".");

@ -150,7 +150,7 @@ static void dumpSource(const sp<MediaSource> &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<MediaSource> &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<MediaSource> &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<MetaData> getFormat();
virtual status_t read(
MediaBuffer **buffer, const ReadOptions *options);
MediaBufferBase **buffer, const ReadOptions *options);
private:
enum StreamType {
@ -465,7 +465,7 @@ sp<MetaData> 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<MediaSource> &source) {
options.setSeekTo(
seekTimeUs, MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC);
MediaBuffer *buffer;
MediaBufferBase *buffer;
status_t err;
for (;;) {
err = source->read(&buffer, &options);

@ -46,7 +46,7 @@ public:
virtual sp<MetaData> 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<MetaData> 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;

@ -45,7 +45,7 @@ public:
virtual sp<MetaData> 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<MetaData> 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;

@ -31,7 +31,7 @@
#include <media/stagefright/MediaBufferGroup.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaBufferBase.h>
namespace android {
@ -173,7 +173,7 @@ public:
virtual sp<MetaData> 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<MetaData> 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;

@ -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<MetaData> 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<MetaData> 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");

@ -19,7 +19,7 @@
#include <media/DataSourceBase.h>
#include <media/MediaExtractor.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaBufferBase.h>
#include <media/stagefright/MediaBufferGroup.h>
#include <media/MidiIoWrapper.h>
#include <utils/String8.h>
@ -39,7 +39,7 @@ public:
status_t allocateBuffers();
status_t releaseBuffers();
status_t seekTo(int64_t positionUs);
MediaBuffer* readBuffer();
MediaBufferBase* readBuffer();
private:
sp<MidiIoWrapper> mIoWrapper;
MediaBufferGroup *mGroup;

@ -29,7 +29,7 @@
#include <media/stagefright/foundation/ByteUtils.h>
#include <media/stagefright/foundation/ColorUtils.h>
#include <media/stagefright/foundation/hexdump.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaBufferBase.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/MetaData.h>
@ -130,7 +130,7 @@ struct MatroskaSource : public MediaSourceBase {
virtual sp<MetaData> 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<MediaBuffer *> mPendingFrames;
List<MediaBufferBase *> 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<uint8_t *>(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;

@ -30,7 +30,7 @@
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/foundation/avc_utils.h>
#include <media/stagefright/foundation/ByteUtils.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaBufferBase.h>
#include <media/stagefright/MediaBufferGroup.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
@ -222,7 +222,7 @@ public:
virtual sp<MetaData> 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<MetaData> 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;

@ -41,7 +41,7 @@
#include <media/stagefright/foundation/ColorUtils.h>
#include <media/stagefright/foundation/avc_utils.h>
#include <media/stagefright/foundation/hexdump.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaBufferBase.h>
#include <media/stagefright/MediaBufferGroup.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MetaData.h>
@ -83,9 +83,9 @@ public:
virtual sp<MetaData> 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);

@ -49,7 +49,7 @@ struct MPEG2PSExtractor::Track : public MediaSourceBase, public RefBase {
virtual sp<MetaData> 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<MetaData> getFormat();
virtual status_t read(
MediaBuffer **buffer, const ReadOptions *options);
MediaBufferBase **buffer, const ReadOptions *options);
protected:
virtual ~WrappedTrack();
@ -659,7 +659,7 @@ sp<MetaData> 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<MetaData> MPEG2PSExtractor::WrappedTrack::getFormat() {
}
status_t MPEG2PSExtractor::WrappedTrack::read(
MediaBuffer **buffer, const ReadOptions *options) {
MediaBufferBase **buffer, const ReadOptions *options) {
return mTrack->read(buffer, options);
}

@ -61,7 +61,7 @@ struct MPEG2TSSource : public MediaSourceBase {
virtual sp<MetaData> 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<MetaData> MPEG2TSSource::getFormat() {
}
status_t MPEG2TSSource::read(
MediaBuffer **out, const ReadOptions *options) {
MediaBufferBase **out, const ReadOptions *options) {
*out = NULL;
int64_t seekTimeUs;

@ -27,7 +27,7 @@
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/base64.h>
#include <media/stagefright/foundation/ByteUtils.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaBufferBase.h>
#include <media/stagefright/MediaBufferGroup.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
@ -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<ABuffer> 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();

@ -68,7 +68,7 @@ struct WAVSource : public MediaSourceBase {
virtual sp<MetaData> 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<MetaData> 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);

@ -113,9 +113,9 @@ public:
return NULL;
}
virtual status_t read(MediaBuffer **buffer,
virtual status_t read(MediaBufferBase **buffer,
const MediaSource::ReadOptions *options) {
Vector<MediaBuffer *> buffers;
Vector<MediaBufferBase *> 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<MediaBuffer *> *buffers, uint32_t maxNumBuffers,
Vector<MediaBufferBase *> *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) {

@ -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<MediaBuffer *> *buffers, uint32_t maxNumBuffers = 1,
Vector<MediaBufferBase *> *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<MediaBuffer *> * /* buffers */, uint32_t /* maxNumBuffers = 1 */,
Vector<MediaBufferBase *> * /* buffers */, uint32_t /* maxNumBuffers = 1 */,
const MediaSource::ReadOptions * /* options = nullptr */) {
return ERROR_UNSUPPORTED;
}

@ -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

@ -25,6 +25,7 @@ cc_library {
srcs: [
"DataSourceBase.cpp",
"MediaBuffer.cpp",
"MediaBufferBase.cpp",
"MediaBufferGroup.cpp",
"MediaSourceBase.cpp",
"MediaSource.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());

@ -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 <utils/Log.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaBufferBase.h>
namespace android {
//static
MediaBufferBase *MediaBufferBase::Create(size_t size) {
return new (std::nothrow) MediaBuffer(size);
}
} // android

@ -40,7 +40,7 @@ struct MediaBufferGroup::InternalData {
Mutex mLock;
Condition mCondition;
size_t mGrowthLimit; // Do not automatically grow group larger than this.
std::list<MediaBuffer *> mBuffers;
std::list<MediaBufferBase *> 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();
}

@ -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

@ -26,6 +26,7 @@
#include <binder/MemoryDealer.h>
#include <utils/Errors.h>
#include <utils/RefBase.h>
#include <media/stagefright/MediaBufferBase.h>
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<MetaData> meta_data();
virtual sp<MetaData> 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<SharedControl *>(mMemory->pointer())->getRemoteRefcount();

@ -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 <utils/RefBase.h>
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<MetaData> 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_

@ -18,11 +18,15 @@
#define MEDIA_BUFFER_GROUP_H_
#include <media/stagefright/MediaBuffer.h>
#include <list>
#include <media/stagefright/MediaBufferBase.h>
#include <utils/Errors.h>
#include <utils/threads.h>
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;

@ -1149,7 +1149,7 @@ status_t NuPlayer2::GenericSource2::doSeek(int64_t seekTimeUs, MediaPlayer2SeekM
}
sp<ABuffer> 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<MediaBuffer *> mediaBuffers;
Vector<MediaBufferBase *> mediaBuffers;
status_t err = NO_ERROR;
sp<IMediaSource> 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());

@ -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<AnotherPacketSource>& packets, const sp<AMessage>& msg);
sp<ABuffer> mediaBufferToABuffer(
MediaBuffer *mbuf,
MediaBufferBase *mbuf,
media_track_type trackType);
void postReadBuffer(media_track_type trackType);

@ -1066,7 +1066,7 @@ bool NuPlayer2::Decoder::onInputBufferFetched(const sp<AMessage> &msg) {
}
// Modular DRM
MediaBuffer *mediaBuf = NULL;
MediaBufferBase *mediaBuf = NULL;
sp<AMediaCodecCryptoInfoWrapper> cryptInfo;
// copy into codec buffer

@ -1143,7 +1143,7 @@ status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs, MediaPlayerSeekMode
}
sp<ABuffer> 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<MediaBuffer *> mediaBuffers;
Vector<MediaBufferBase *> mediaBuffers;
status_t err = NO_ERROR;
sp<IMediaSource> 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());

@ -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<uint8_t> &drmSessionId, sp<ICrypto> *outCrypto);
@ -201,7 +201,7 @@ private:
int32_t curGen, const sp<AnotherPacketSource>& packets, const sp<AMessage>& msg);
sp<ABuffer> mediaBufferToABuffer(
MediaBuffer *mbuf,
MediaBufferBase *mbuf,
media_track_type trackType);
void postReadBuffer(media_track_type trackType);

@ -1046,7 +1046,7 @@ bool NuPlayer::Decoder::onInputBufferFetched(const sp<AMessage> &msg) {
}
// Modular DRM
MediaBuffer *mediaBuf = NULL;
MediaBufferBase *mediaBuf = NULL;
NuPlayerDrm::CryptoInfo *cryptInfo = NULL;
// copy into codec buffer

@ -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) {

@ -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) {

@ -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;

@ -36,7 +36,7 @@ sp<MetaData> 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<const ReadOptions*>(options));
}

@ -1040,7 +1040,7 @@ void CameraSource::releaseOneRecordingFrame(const sp<IMemory>& frame) {
releaseRecordingFrame(frame);
}
void CameraSource::signalBufferReturned(MediaBuffer *buffer) {
void CameraSource::signalBufferReturned(MediaBufferBase *buffer) {
ALOGV("signalBufferReturned: %p", buffer->data());
Mutex::Autolock autoLock(mLock);
for (List<sp<IMemory> >::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;

@ -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);

@ -230,7 +230,7 @@ status_t FrameDecoder::extractInternal(
}
codecBuffer = inputBuffers[inputIndex];
MediaBuffer *mediaBuffer = NULL;
MediaBufferBase *mediaBuffer = NULL;
err = mSource->read(&mediaBuffer, &options);
options.clearSeekTo();

@ -21,6 +21,7 @@
#include <media/DataSource.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/JPEGSource.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaBufferGroup.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
@ -108,7 +109,7 @@ sp<MetaData> 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);

@ -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<AMessage> 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<AMessage> notify = mNotify->dup();
notify->setInt32("what", kNotifyBuffer);
@ -368,7 +368,7 @@ void MPEG2TSWriter::SourceInfo::onMessageReceived(const sp<AMessage> &msg) {
case kWhatRead:
{
MediaBuffer *buffer;
MediaBufferBase *buffer;
status_t err = mSource->read(&buffer);
if (err != OK && err != INFO_FORMAT_CHANGED) {

@ -2809,7 +2809,7 @@ status_t MPEG4Writer::Track::threadEntry() {
sp<MetaData> 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) {

@ -72,7 +72,7 @@ sp<MetaData> 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!");

@ -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<AMessage> &msg);
@ -86,14 +86,14 @@ private:
int64_t mReadPendingSince;
bool mPaused;
bool mPulling;
Vector<MediaBuffer *> mReadBuffers;
Vector<MediaBufferBase *> 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<Queue> 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<Queue>::Locked queue(mQueue);
return queue->readBuffer(mbuf);
}
@ -298,7 +298,7 @@ void MediaCodecSource::Puller::onMessageReceived(const sp<AMessage> &msg) {
}
queue.unlock();
MediaBuffer *mbuf = NULL;
MediaBufferBase *mbuf = NULL;
status_t err = mSource->read(&mbuf);
queue.lock();
@ -413,7 +413,7 @@ sp<IGraphicBufferProducer> MediaCodecSource::getGraphicBufferProducer() {
}
status_t MediaCodecSource::read(
MediaBuffer** buffer, const ReadOptions* /* options */) {
MediaBufferBase** buffer, const ReadOptions* /* options */) {
Mutexed<Output>::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<MediaBuffer*>::iterator it = output->mBufferQueue.begin();
for (List<MediaBufferBase*>::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<AMessage> &msg) {
break;
}
MediaBuffer *mbuf = new MediaBuffer(outbuf->size());
MediaBufferBase *mbuf = new MediaBuffer(outbuf->size());
mbuf->setObserver(this);
mbuf->add_ref();

@ -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<MediaBuffer *> mediaBuffers;
Vector<MediaBufferBase *> 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<ABuffer> &buffer) {
status_t NuMediaExtractor::appendVorbisNumPageSamples(
MediaBufferBase *mbuf, const sp<ABuffer> &buffer) {
int32_t numPageSamples;
if (!mbuf->meta_data()->findInt32(
kKeyValidSamples, &numPageSamples)) {

@ -45,7 +45,8 @@ sp<MetaData> 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<const MediaSource::ReadOptions*>(options));
}

@ -200,7 +200,7 @@ SimpleDecodingSource::ProtectedState::ProtectedState(const sp<AMessage> &format)
}
status_t SimpleDecodingSource::read(
MediaBuffer **buffer, const ReadOptions *options) {
MediaBufferBase **buffer, const ReadOptions *options) {
*buffer = NULL;
Mutexed<ProtectedState>::Locked me(mProtectedState);
@ -221,7 +221,7 @@ status_t SimpleDecodingSource::read(
}
status_t SimpleDecodingSource::doRead(
Mutexed<ProtectedState>::Locked &me, MediaBuffer **buffer, const ReadOptions *options) {
Mutexed<ProtectedState>::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();

@ -251,7 +251,7 @@ sp<MetaData> 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;

@ -295,7 +295,7 @@ void SimplePlayer::play(const sp<IMediaSource> &source) {
size_t size = 0u;
void *data = nullptr;
int64_t timestamp = 0u;
MediaBuffer *buffer = nullptr;
MediaBufferBase *buffer = nullptr;
sp<ABuffer> csd;
if (csd0 != nullptr) {
csd = csd0;

@ -69,7 +69,7 @@ private:
sp<MediaSource> mSource;
sp<AudioTrack> 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<MediaPlayerBase::AudioSink> mAudioSink;

@ -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);

@ -33,7 +33,7 @@ public:
virtual status_t stop();
virtual sp<MetaData> getFormat();
virtual status_t read(
MediaBuffer **buffer, const ReadOptions *options = NULL);
MediaBufferBase **buffer, const ReadOptions *options = NULL);
virtual status_t pause();
private:

@ -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:

@ -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.

@ -33,7 +33,7 @@ struct JPEGSource : public MediaSource {
virtual sp<MetaData> getFormat();
virtual status_t read(
MediaBuffer **buffer, const ReadOptions *options = NULL);
MediaBufferBase **buffer, const ReadOptions *options = NULL);
protected:
virtual ~JPEGSource();

@ -40,13 +40,13 @@ public:
virtual status_t stop();
virtual sp<MetaData> 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:

@ -0,0 +1 @@
../../../../libmediaextractor/include/media/stagefright/MediaBufferBase.h

@ -57,13 +57,13 @@ struct MediaCodecSource : public MediaSource,
virtual status_t pause(MetaData *params);
virtual sp<MetaData> 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<AMessage> &msg);
@ -136,7 +136,7 @@ private:
sp<AMessage> mEncoderActivityNotify;
sp<IGraphicBufferProducer> mGraphicBufferProducer;
sp<PersistentSurface> mPersistentSurface;
List<MediaBuffer *> mInputBufferQueue;
List<MediaBufferBase *> mInputBufferQueue;
List<size_t> mAvailEncoderInputIndices;
List<int64_t> mDecodingTimeQueue; // decoding time (us) for video
int64_t mInputBufferTimeOffsetUs;
@ -149,7 +149,7 @@ private:
struct Output {
Output();
List<MediaBuffer*> mBufferQueue;
List<MediaBufferBase*> mBufferQueue;
bool mEncoderReachedEOS;
status_t mErrorCode;
Condition mCond;

@ -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<ABuffer> &buffer);
status_t appendVorbisNumPageSamples(MediaBufferBase *mbuf, const sp<ABuffer> &buffer);
DISALLOW_EVIL_CONSTRUCTORS(NuMediaExtractor);
};

@ -35,7 +35,7 @@ public:
virtual status_t stop();
virtual sp<MetaData> 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);

@ -65,7 +65,7 @@ public:
virtual sp<MetaData> 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<ProtectedState>::Locked &me, MediaBuffer **buffer, const ReadOptions *options);
Mutexed<ProtectedState>::Locked &me, MediaBufferBase **buffer,
const ReadOptions *options);
};
} // namespace android

@ -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<MetaData> 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);

@ -163,7 +163,7 @@ void AnotherPacketSource::requeueAccessUnit(const sp<ABuffer> &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<MetaData> bufmeta = mediaBuffer->meta_data();
bufmeta->setInt64(kKeyTime, timeUs);

@ -39,7 +39,7 @@ struct AnotherPacketSource : public MediaSource {
virtual sp<MetaData> getFormat();
virtual status_t read(
MediaBuffer **buffer, const ReadOptions *options = NULL);
MediaBufferBase **buffer, const ReadOptions *options = NULL);
void clear();

@ -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();

@ -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<AMessage> &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<AMessage> &msg) {
}
void ARTPWriter::onRead(const sp<AMessage> &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();

@ -110,13 +110,13 @@ private:
void addSR(const sp<ABuffer> &buffer);
void addSDES(const sp<ABuffer> &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<ABuffer> &buffer, bool isRTCP);

@ -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

@ -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;

@ -27,7 +27,7 @@ using namespace android;
using namespace webm;
namespace {
sp<ABuffer> toABuffer(MediaBuffer *mbuf) {
sp<ABuffer> toABuffer(MediaBufferBase *mbuf) {
sp<ABuffer> 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),

@ -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<WebmElement> SimpleBlock(uint64_t baseTimecode) const;

@ -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();

Loading…
Cancel
Save