summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp
diff options
context:
space:
mode:
authorLajos Molnar <lajos@google.com>2015-01-09 10:11:51 -0800
committerLajos Molnar <lajos@google.com>2015-01-09 13:21:39 -0800
commit38a97bd7891cb0e16f8127510aa81b1b05df3f17 (patch)
tree32a7ac835c17a70627c11dd829cb2bec88cd8156 /media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp
parentc8c68c88c1f0eed0c647b0a9cdf1c402aecb2667 (diff)
downloadframeworks_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
Diffstat (limited to 'media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp')
-rw-r--r--media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp35
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);
}