Merge "Workaround for a QCOM issue where the output buffer size advertised by the AVC encoder is occasionally too small." into gingerbread
This commit is contained in:
@ -102,6 +102,7 @@ private:
|
|||||||
kInputBufferSizesAreBogus = 512,
|
kInputBufferSizesAreBogus = 512,
|
||||||
kSupportsMultipleFramesPerInputBuffer = 1024,
|
kSupportsMultipleFramesPerInputBuffer = 1024,
|
||||||
kAvoidMemcopyInputRecordingFrames = 2048,
|
kAvoidMemcopyInputRecordingFrames = 2048,
|
||||||
|
kRequiresLargerEncoderOutputBuffer = 4096,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BufferInfo {
|
struct BufferInfo {
|
||||||
|
@ -353,6 +353,15 @@ uint32_t OMXCodec::getComponentQuirks(const char *componentName) {
|
|||||||
quirks |= kRequiresLoadedToIdleAfterAllocation;
|
quirks |= kRequiresLoadedToIdleAfterAllocation;
|
||||||
quirks |= kRequiresAllocateBufferOnInputPorts;
|
quirks |= kRequiresAllocateBufferOnInputPorts;
|
||||||
quirks |= kRequiresAllocateBufferOnOutputPorts;
|
quirks |= kRequiresAllocateBufferOnOutputPorts;
|
||||||
|
if (!strncmp(componentName, "OMX.qcom.video.encoder.avc", 26)) {
|
||||||
|
|
||||||
|
// The AVC encoder advertises the size of output buffers
|
||||||
|
// based on the input video resolution and assumes
|
||||||
|
// the worst/least compression ratio is 0.5. It is found that
|
||||||
|
// sometimes, the output buffer size is larger than
|
||||||
|
// size advertised by the encoder.
|
||||||
|
quirks |= kRequiresLargerEncoderOutputBuffer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!strncmp(componentName, "OMX.qcom.7x30.video.encoder.", 28)) {
|
if (!strncmp(componentName, "OMX.qcom.7x30.video.encoder.", 28)) {
|
||||||
}
|
}
|
||||||
@ -906,6 +915,10 @@ void OMXCodec::setVideoInputFormat(
|
|||||||
video_def->nBitrate = bitRate; // Q16 format
|
video_def->nBitrate = bitRate; // Q16 format
|
||||||
video_def->eCompressionFormat = compressionFormat;
|
video_def->eCompressionFormat = compressionFormat;
|
||||||
video_def->eColorFormat = OMX_COLOR_FormatUnused;
|
video_def->eColorFormat = OMX_COLOR_FormatUnused;
|
||||||
|
if (mQuirks & kRequiresLargerEncoderOutputBuffer) {
|
||||||
|
// Increases the output buffer size
|
||||||
|
def.nBufferSize = ((def.nBufferSize * 3) >> 1);
|
||||||
|
}
|
||||||
|
|
||||||
err = mOMX->setParameter(
|
err = mOMX->setParameter(
|
||||||
mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));
|
mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));
|
||||||
|
Reference in New Issue
Block a user