summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MediaBuffer.cpp
diff options
context:
space:
mode:
authorJamie Gennis <jgennis@google.com>2010-10-07 14:08:38 -0700
committerJamie Gennis <jgennis@google.com>2010-10-20 11:03:30 -0700
commit6a9da9fc558263548ebfbae2cbf177eb7454a41b (patch)
tree267bd7076e4e9a6b6db1235d73e6a306a30b9496 /media/libstagefright/MediaBuffer.cpp
parent4d63523ece864ea783cf9ceeb036400af5804397 (diff)
downloadframeworks_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.cpp29
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
-