diff options
author | Lajos Molnar <lajos@google.com> | 2015-01-09 10:11:51 -0800 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2015-01-09 13:21:39 -0800 |
commit | 38a97bd7891cb0e16f8127510aa81b1b05df3f17 (patch) | |
tree | 32a7ac835c17a70627c11dd829cb2bec88cd8156 | |
parent | c8c68c88c1f0eed0c647b0a9cdf1c402aecb2667 (diff) | |
download | frameworks_av-38a97bd7891cb0e16f8127510aa81b1b05df3f17.zip frameworks_av-38a97bd7891cb0e16f8127510aa81b1b05df3f17.tar.gz frameworks_av-38a97bd7891cb0e16f8127510aa81b1b05df3f17.tar.bz2 |
stagefright: keep alignment restrictions for SoftVideoDecoder
Reuse updatePortDefinitions for setParam(PortDefinition).
Allow increasing input buffer size even if size changes.
Bug: 18528130
Change-Id: I62b66d8f1135504dd16ac576046bfc5b5b8cda59
-rw-r--r-- | media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp b/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp index 532cf2f..4ce165b 100644 --- a/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp +++ b/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp @@ -149,7 +149,9 @@ void SoftVideoDecoderOMXComponent::updatePortDefinitions(bool updateCrop, bool u // when output format changes, input buffer size does not actually change if (updateInputSize) { - inDef->nBufferSize = max(outDef->nBufferSize / mMinCompressionRatio, mMinInputBufferSize); + inDef->nBufferSize = max( + outDef->nBufferSize / mMinCompressionRatio, + max(mMinInputBufferSize, inDef->nBufferSize)); } if (updateCrop) { @@ -388,30 +390,21 @@ OMX_ERRORTYPE SoftVideoDecoderOMXComponent::internalSetParameter( uint32_t newHeight = video_def->nFrameHeight; if (newWidth != oldWidth || newHeight != oldHeight) { bool outputPort = (newParams->nPortIndex == kOutputPortIndex); - def->format.video.nFrameWidth = - (mIsAdaptive && outputPort) ? mAdaptiveMaxWidth : newWidth; - def->format.video.nFrameHeight = - (mIsAdaptive && outputPort) ? mAdaptiveMaxHeight : newHeight; if (outputPort) { - def->format.video.nStride = def->format.video.nFrameWidth; - def->format.video.nSliceHeight = def->format.video.nFrameHeight; - def->nBufferSize = - def->format.video.nStride * def->format.video.nSliceHeight * 3 / 2; - - - OMX_PARAM_PORTDEFINITIONTYPE *inDef = &editPortInfo(kInputPortIndex)->mDef; - // increase input buffer size if required - inDef->nBufferSize = - max(def->nBufferSize / mMinCompressionRatio, inDef->nBufferSize); - + // only update (essentially crop) if size changes mWidth = newWidth; mHeight = newHeight; - mCropLeft = 0; - mCropTop = 0; - mCropWidth = newWidth; - mCropHeight = newHeight; + + updatePortDefinitions(true /* updateCrop */, true /* updateInputSize */); + // reset buffer size based on frame size + newParams->nBufferSize = def->nBufferSize; + } else { + // For input port, we only set nFrameWidth and nFrameHeight. Buffer size + // is updated when configuring the output port using the max-frame-size, + // though client can still request a larger size. + def->format.video.nFrameWidth = newWidth; + def->format.video.nFrameHeight = newHeight; } - newParams->nBufferSize = def->nBufferSize; } return SimpleSoftOMXComponent::internalSetParameter(index, params); } |