am 63d64a14: Merge "Properly rotate video that\'s marked as such and decoded to a surface." into honeycomb

* commit '63d64a14790ae21db31b60747864b4a7565b33c3':
  Properly rotate video that's marked as such and decoded to a surface.
This commit is contained in:
Andreas Huber
2011-01-21 14:44:21 -08:00
committed by Android Git Automerger
2 changed files with 34 additions and 0 deletions

View File

@@ -305,6 +305,8 @@ private:
void restorePatchedDataPointer(BufferInfo *info);
status_t applyRotation();
OMXCodec(const OMXCodec &);
OMXCodec &operator=(const OMXCodec &);
};

View File

@@ -1680,6 +1680,33 @@ status_t OMXCodec::allocateBuffersOnPort(OMX_U32 portIndex) {
return OK;
}
status_t OMXCodec::applyRotation() {
sp<MetaData> meta = mSource->getFormat();
int32_t rotationDegrees;
if (!meta->findInt32(kKeyRotation, &rotationDegrees)) {
rotationDegrees = 0;
}
uint32_t transform;
switch (rotationDegrees) {
case 0: transform = 0; break;
case 90: transform = HAL_TRANSFORM_ROT_90; break;
case 180: transform = HAL_TRANSFORM_ROT_180; break;
case 270: transform = HAL_TRANSFORM_ROT_270; break;
default: transform = 0; break;
}
status_t err = OK;
if (transform) {
err = native_window_set_buffers_transform(
mNativeWindow.get(), transform);
}
return err;
}
status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {
// Get the number of buffers needed.
OMX_PARAM_PORTDEFINITIONTYPE def;
@@ -1713,6 +1740,11 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {
return err;
}
err = applyRotation();
if (err != OK) {
return err;
}
// Set up the native window.
// XXX TODO: Get the gralloc usage flags from the OMX plugin!
err = native_window_set_usage(