diff options
author | Lajos Molnar <lajos@google.com> | 2015-06-10 11:07:37 -0700 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2015-06-10 11:19:36 -0700 |
commit | 5fb8b2987ab96ad65dc4b046616607ece16d6fb3 (patch) | |
tree | 125f7d60b9cf55238664ae2e3204ec5ee39df5d4 /media/libstagefright/omx/OMXNodeInstance.cpp | |
parent | 2f3406517d1fd4486b8b90eb2635d784fad17a48 (diff) | |
download | frameworks_av-5fb8b2987ab96ad65dc4b046616607ece16d6fb3.zip frameworks_av-5fb8b2987ab96ad65dc4b046616607ece16d6fb3.tar.gz frameworks_av-5fb8b2987ab96ad65dc4b046616607ece16d6fb3.tar.bz2 |
stagefright: fix legacy support for CameraSource
- allocate big enough buffers for native metadata source even in
CameraSource mode
- don't check range when using native metadata mode (and converting
it to GrallocSource) as OMX buffer will be smaller than input
- log allocated vs. OMX reported sizes in OMXNodeInstance logs
Bug: 21708032
Change-Id: I7eeffc5116079e5b368f84980e8e7524260aaccf
Diffstat (limited to 'media/libstagefright/omx/OMXNodeInstance.cpp')
-rw-r--r-- | media/libstagefright/omx/OMXNodeInstance.cpp | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp index 7e92da8..692667f 100644 --- a/media/libstagefright/omx/OMXNodeInstance.cpp +++ b/media/libstagefright/omx/OMXNodeInstance.cpp @@ -683,7 +683,7 @@ status_t OMXNodeInstance::useBuffer( } CLOG_BUFFER(useBuffer, NEW_BUFFER_FMT( - *buffer, portIndex, "%u@%p", allottedSize, params->pointer())); + *buffer, portIndex, "%u(%zu)@%p", allottedSize, params->size(), params->pointer())); return OK; } @@ -1024,8 +1024,8 @@ status_t OMXNodeInstance::allocateBufferWithBackup( bufferSource->addCodecBuffer(header); } - CLOG_BUFFER(allocateBufferWithBackup, NEW_BUFFER_FMT(*buffer, portIndex, "%u@%p :> %p", - allottedSize, params->pointer(), header->pBuffer)); + CLOG_BUFFER(allocateBufferWithBackup, NEW_BUFFER_FMT(*buffer, portIndex, "%zu@%p :> %u@%p", + params->size(), params->pointer(), allottedSize, header->pBuffer)); return OK; } @@ -1087,18 +1087,6 @@ status_t OMXNodeInstance::emptyBuffer( Mutex::Autolock autoLock(mLock); OMX_BUFFERHEADERTYPE *header = findBufferHeader(buffer); - // rangeLength and rangeOffset must be a subset of the allocated data in the buffer. - // corner case: we permit rangeOffset == end-of-buffer with rangeLength == 0. - if (rangeOffset > header->nAllocLen - || rangeLength > header->nAllocLen - rangeOffset) { - if (fenceFd >= 0) { - ::close(fenceFd); - } - return BAD_VALUE; - } - header->nFilledLen = rangeLength; - header->nOffset = rangeOffset; - BufferMeta *buffer_meta = static_cast<BufferMeta *>(header->pAppPrivate); sp<ABuffer> backup = buffer_meta->getBuffer(header, true /* backup */); @@ -1112,11 +1100,25 @@ status_t OMXNodeInstance::emptyBuffer( == kMetadataBufferTypeANWBuffer) { VideoNativeMetadata &backupMeta = *(VideoNativeMetadata *)backup->base(); VideoGrallocMetadata &codecMeta = *(VideoGrallocMetadata *)codec->base(); - ALOGV("converting ANWB %p to handle %p", backupMeta.pBuffer, backupMeta.pBuffer->handle); + CLOG_BUFFER(emptyBuffer, "converting ANWB %p to handle %p", + backupMeta.pBuffer, backupMeta.pBuffer->handle); codecMeta.pHandle = backupMeta.pBuffer->handle; codecMeta.eType = kMetadataBufferTypeGrallocSource; - header->nFilledLen = sizeof(codecMeta); + header->nFilledLen = rangeLength ? sizeof(codecMeta) : 0; + header->nOffset = 0; } else { + // rangeLength and rangeOffset must be a subset of the allocated data in the buffer. + // corner case: we permit rangeOffset == end-of-buffer with rangeLength == 0. + if (rangeOffset > header->nAllocLen + || rangeLength > header->nAllocLen - rangeOffset) { + if (fenceFd >= 0) { + ::close(fenceFd); + } + return BAD_VALUE; + } + header->nFilledLen = rangeLength; + header->nOffset = rangeOffset; + buffer_meta->CopyToOMX(header); } |