diff options
author | Jamie Gennis <jgennis@google.com> | 2010-10-07 14:08:38 -0700 |
---|---|---|
committer | Jamie Gennis <jgennis@google.com> | 2010-10-20 11:03:30 -0700 |
commit | 6a9da9fc558263548ebfbae2cbf177eb7454a41b (patch) | |
tree | 267bd7076e4e9a6b6db1235d73e6a306a30b9496 /media/libstagefright/MediaBuffer.cpp | |
parent | 4d63523ece864ea783cf9ceeb036400af5804397 (diff) | |
download | frameworks_av-6a9da9fc558263548ebfbae2cbf177eb7454a41b.zip frameworks_av-6a9da9fc558263548ebfbae2cbf177eb7454a41b.tar.gz frameworks_av-6a9da9fc558263548ebfbae2cbf177eb7454a41b.tar.bz2 |
Add decode-to-ANativeWindow support to Stagefright.
This change adds support to Stagefright for doing OMX video decoding directly
into buffers dequeued from an ANativeWindow. It does this by registering the
dequeued buffers with the OMX component using an Android-specific OMX
extension, and then exchanging buffers between the OMX component and the
ANativeWindow.
Change-Id: Ida66f836503255a68d378c6903d96dfe9747ce87
Diffstat (limited to 'media/libstagefright/MediaBuffer.cpp')
-rw-r--r-- | media/libstagefright/MediaBuffer.cpp | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/media/libstagefright/MediaBuffer.cpp b/media/libstagefright/MediaBuffer.cpp index b973745..cbccd31 100644 --- a/media/libstagefright/MediaBuffer.cpp +++ b/media/libstagefright/MediaBuffer.cpp @@ -25,6 +25,8 @@ #include <media/stagefright/MediaDebug.h> #include <media/stagefright/MetaData.h> +#include <ui/GraphicBuffer.h> + namespace android { // XXX make this truly atomic. @@ -61,6 +63,20 @@ MediaBuffer::MediaBuffer(size_t size) mOriginal(NULL) { } +MediaBuffer::MediaBuffer(const sp<GraphicBuffer>& graphicBuffer) + : mObserver(NULL), + mNextBuffer(NULL), + mRefCount(0), + mData(NULL), + mSize(1), + mRangeOffset(0), + mRangeLength(mSize), + mGraphicBuffer(graphicBuffer), + mOwnsData(false), + mMetaData(new MetaData), + mOriginal(NULL) { +} + void MediaBuffer::release() { if (mObserver == NULL) { CHECK_EQ(mRefCount, 0); @@ -92,10 +108,12 @@ void MediaBuffer::add_ref() { } void *MediaBuffer::data() const { + CHECK(mGraphicBuffer == NULL); return mData; } size_t MediaBuffer::size() const { + CHECK(mGraphicBuffer == NULL); return mSize; } @@ -108,15 +126,19 @@ size_t MediaBuffer::range_length() const { } void MediaBuffer::set_range(size_t offset, size_t length) { - if (offset + length > mSize) { + if ((mGraphicBuffer == NULL) && (offset + length > mSize)) { LOGE("offset = %d, length = %d, mSize = %d", offset, length, mSize); } - CHECK(offset + length <= mSize); + CHECK((mGraphicBuffer != NULL) || (offset + length <= mSize)); mRangeOffset = offset; mRangeLength = length; } +sp<GraphicBuffer> MediaBuffer::graphicBuffer() const { + return mGraphicBuffer; +} + sp<MetaData> MediaBuffer::meta_data() { return mMetaData; } @@ -158,6 +180,8 @@ int MediaBuffer::refcount() const { } MediaBuffer *MediaBuffer::clone() { + CHECK_EQ(mGraphicBuffer, NULL); + MediaBuffer *buffer = new MediaBuffer(mData, mSize); buffer->set_range(mRangeOffset, mRangeLength); buffer->mMetaData = new MetaData(*mMetaData.get()); @@ -169,4 +193,3 @@ MediaBuffer *MediaBuffer::clone() { } } // namespace android - |