summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHouxiang Dai <houxiang.dai@mediatek.com>2020-07-23 14:07:22 +0800
committerBruno Martins <bgcngm@gmail.com>2021-03-07 15:30:33 +0000
commit80e20aedb084e5bb5afa6ec673ff9e0d1a2ccdf0 (patch)
tree617f51ad93699690a23af8950000b09a4ffc9fe8
parent842477aef144e06d5a819bfc13c9e19bc931299b (diff)
ACodec: Handle HDR10+ metadata at OutputPortSettingsChangedState
[Description] handle kWhatSetParameters message in OutputPortSettingsChangedState handle OMX_EventConfigUpdate event in OutputPortSettingsChangedState In HDR10+ test, we have to associate each HDR10+ metadata to a particular frame. If receive a kWhatSetParameters message with "hdr10-plus-info" buffer, it should not be deferred in OutputPortSettingsChangedState and adopt OMX_SetConfig to associates this config with the next input buffer sent in OMX_EmptyThisBuffer. The OMX_EventConfigUpdate event report from component should be handled also in OutputPortSettingsChangedState, where is to associate updated "hdr10-plus-info" metadata with the next output buffer sent via FillBufferDone callback. Bug: 157213958 Bug: 157435393 Change-Id: I27e4614487414063831fa760b9e9ca96b1c3712c (cherry picked from commit c111aa4fda9b5b434edb1b46898ff8dd7e51cec6)
-rw-r--r--media/libstagefright/ACodec.cpp36
1 files changed, 33 insertions, 3 deletions
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 413c7e39a0..acf96fd9b8 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -8349,13 +8349,34 @@ bool ACodec::OutputPortSettingsChangedState::onMessageReceived(
FALLTHROUGH_INTENDED;
}
case kWhatResume:
+ {
+ ALOGV("[%s] Deferring resume", mCodec->mComponentName.c_str());
+
+ mCodec->deferMessage(msg);
+ handled = true;
+ break;
+ }
+
case kWhatSetParameters:
{
- if (msg->what() == kWhatResume) {
- ALOGV("[%s] Deferring resume", mCodec->mComponentName.c_str());
+ sp<AMessage> params;
+ CHECK(msg->findMessage("params", &params));
+
+ sp<ABuffer> hdr10PlusInfo;
+ if (params->findBuffer("hdr10-plus-info", &hdr10PlusInfo)) {
+ if (hdr10PlusInfo != nullptr && hdr10PlusInfo->size() > 0) {
+ (void)mCodec->setHdr10PlusInfo(hdr10PlusInfo);
+ }
+ params->removeEntryAt(params->findEntryByName("hdr10-plus-info"));
+
+ if (params->countEntries() == 0) {
+ msg->removeEntryAt(msg->findEntryByName("params"));
+ }
}
- mCodec->deferMessage(msg);
+ if (msg->countEntries() > 0) {
+ mCodec->deferMessage(msg);
+ }
handled = true;
break;
}
@@ -8470,6 +8491,15 @@ bool ACodec::OutputPortSettingsChangedState::onOMXEvent(
return false;
}
+ case OMX_EventConfigUpdate:
+ {
+ CHECK_EQ(data1, (OMX_U32)kPortIndexOutput);
+
+ mCodec->onConfigUpdate((OMX_INDEXTYPE)data2);
+
+ return true;
+ }
+
default:
return BaseState::onOMXEvent(event, data1, data2);
}