am e71a6408: Merge change I1bceff91 into eclair-mr2
Merge commit 'e71a6408867a80f847cd3f7671f6ef009f67a78e' into eclair-mr2-plus-aosp * commit 'e71a6408867a80f847cd3f7671f6ef009f67a78e': Make sure the decoder's input buffers are large enough to hold the largest input data. Verify that the setting actually sticks.
This commit is contained in:
@@ -635,6 +635,15 @@ status_t MPEG4Extractor::parseChunk(off_t *offset, int depth) {
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t max_size;
|
||||||
|
CHECK_EQ(mLastTrack->sampleTable->getMaxSampleSize(&max_size), OK);
|
||||||
|
|
||||||
|
// Assume that a given buffer only contains at most 10 fragments,
|
||||||
|
// each fragment originally prefixed with a 2 byte length will
|
||||||
|
// have a 4 byte header (0x00 0x00 0x00 0x01) after conversion,
|
||||||
|
// and thus will grow by 2 bytes per fragment.
|
||||||
|
mLastTrack->meta->setInt32(kKeyMaxInputSize, max_size + 10 * 2);
|
||||||
|
|
||||||
*offset += chunk_size;
|
*offset += chunk_size;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -792,15 +801,10 @@ status_t MPEG4Source::start(MetaData *params) {
|
|||||||
|
|
||||||
mGroup = new MediaBufferGroup;
|
mGroup = new MediaBufferGroup;
|
||||||
|
|
||||||
size_t max_size;
|
int32_t max_size;
|
||||||
status_t err = mSampleTable->getMaxSampleSize(&max_size);
|
CHECK(mFormat->findInt32(kKeyMaxInputSize, &max_size));
|
||||||
CHECK_EQ(err, OK);
|
|
||||||
|
|
||||||
// Assume that a given buffer only contains at most 10 fragments,
|
mGroup->add_buffer(new MediaBuffer(max_size));
|
||||||
// each fragment originally prefixed with a 2 byte length will
|
|
||||||
// have a 4 byte header (0x00 0x00 0x00 0x01) after conversion,
|
|
||||||
// and thus will grow by 2 bytes per fragment.
|
|
||||||
mGroup->add_buffer(new MediaBuffer(max_size + 10 * 2));
|
|
||||||
|
|
||||||
mSrcBuffer = new uint8_t[max_size];
|
mSrcBuffer = new uint8_t[max_size];
|
||||||
|
|
||||||
|
|||||||
@@ -462,7 +462,7 @@ sp<OMXCodec> OMXCodec::Create(
|
|||||||
}
|
}
|
||||||
|
|
||||||
int32_t maxInputSize;
|
int32_t maxInputSize;
|
||||||
if (createEncoder && meta->findInt32(kKeyMaxInputSize, &maxInputSize)) {
|
if (meta->findInt32(kKeyMaxInputSize, &maxInputSize)) {
|
||||||
codec->setMinBufferSize(kPortIndexInput, (OMX_U32)maxInputSize);
|
codec->setMinBufferSize(kPortIndexInput, (OMX_U32)maxInputSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -487,12 +487,18 @@ void OMXCodec::setMinBufferSize(OMX_U32 portIndex, OMX_U32 size) {
|
|||||||
|
|
||||||
if (def.nBufferSize < size) {
|
if (def.nBufferSize < size) {
|
||||||
def.nBufferSize = size;
|
def.nBufferSize = size;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = mOMX->setParameter(
|
err = mOMX->setParameter(
|
||||||
mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));
|
mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));
|
||||||
CHECK_EQ(err, OK);
|
CHECK_EQ(err, OK);
|
||||||
|
|
||||||
|
err = mOMX->getParameter(
|
||||||
|
mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));
|
||||||
|
CHECK_EQ(err, OK);
|
||||||
|
|
||||||
|
// Make sure the setting actually stuck.
|
||||||
|
CHECK(def.nBufferSize >= size);
|
||||||
}
|
}
|
||||||
|
|
||||||
status_t OMXCodec::setVideoPortFormatType(
|
status_t OMXCodec::setVideoPortFormatType(
|
||||||
|
|||||||
Reference in New Issue
Block a user