From dc2c78e38d3809480e0e816abd6dbaefe5cc81e1 Mon Sep 17 00:00:00 2001 From: Chong Zhang Date: Tue, 4 Dec 2018 12:41:32 -0800 Subject: [PATCH] hdr10+: adding OMX config index and profiles bug: 118507186 Change-Id: I09f694e9339af9c556f92daf9b8e26458d73cd7a --- .../media_plugin/media/hardware/HardwareAPI.h | 60 ++++++++++++++++++- headers/media_plugin/media/openmax/OMX_Core.h | 14 +++++ .../media_plugin/media/openmax/OMX_VideoExt.h | 3 + 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/headers/media_plugin/media/hardware/HardwareAPI.h b/headers/media_plugin/media/hardware/HardwareAPI.h index 6c1ba3de00..ae0220a5eb 100644 --- a/headers/media_plugin/media/hardware/HardwareAPI.h +++ b/headers/media_plugin/media/hardware/HardwareAPI.h @@ -425,7 +425,7 @@ struct DescribeColorAspectsParams { // HDR color description parameters. // This is passed via OMX_SetConfig or OMX_GetConfig to video encoders and decoders when the -// 'OMX.google.android.index.describeHDRColorInfo' extension is given and an HDR stream +// 'OMX.google.android.index.describeHDRStaticInfo' extension is given and an HDR stream // is detected. Component SHALL behave as described below if it supports this extension. // // Currently, only Static Metadata Descriptor Type 1 support is required. @@ -496,6 +496,64 @@ struct DescribeHDRStaticInfoParams { HDRStaticInfo sInfo; // IN/OUT }; +// HDR10+ metadata configuration. +// +// nParamSize: size of the storage starting at nValue (must be at least 1 and at most +// MAX_HDR10PLUSINFO_SIZE). This field must not be modified by the component. +// nParamSizeUsed: size of the actual HDR10+ metadata starting at nValue. For OMX_SetConfig, +// it must not be modified by the component. For OMX_GetConfig, the component +// should put the actual size of the retrieved config in this field (and in +// case where nParamSize is smaller than nParamSizeUsed, the component should +// still update nParamSizeUsed without actually copying the metadata to nValue). +// nValue: storage of the HDR10+ metadata conforming to the user_data_registered_itu_t_t35() +// syntax of SEI message for ST 2094-40. +// +// This is passed via OMX_SetConfig or OMX_GetConfig to video encoders and decoders when the +// 'OMX.google.android.index.describeHDR10PlusInfo' extension is given. In general, this config +// is associated with a particular frame. A typical sequence of usage is as follows: +// +// a) OMX_SetConfig associates the config with the next input buffer sent in OMX_EmptyThisBuffer +// (input A); +// b) The component sends OMX_EventConfigUpdate to notify the client that there is a config +// update on the output port that is associated with the next output buffer that's about to +// be sent via FillBufferDone callback (output A); +// c) The client, upon receiving the OMX_EventConfigUpdate, calls OMX_GetConfig to retrieve +// the config and associates it with output A. +// +// All config updates will be retrieved in the order reported, and the client is required to +// call OMX_GetConfig for each OMX_EventConfigUpdate for this config. Note that the order of +// OMX_EventConfigUpdate relative to FillBufferDone callback determines which output frame +// the config should be associated with, the actual OMX_GetConfig for the config could happen +// before or after the component calls the FillBufferDone callback. +// +// Depending on the video codec type (in particular, whether the codec uses in-band or out-of- +// band HDR10+ metadata), the component shall behave as detailed below: +// +// VIDEO DECODERS: +// 1) If the codec utilizes out-of-band HDR10+ metadata, the decoder must support the sequence +// a) ~ c) outlined above; +// 2) If the codec utilizes in-band HDR10+ metadata, OMX_SetConfig for this config should be +// ignored (as the metadata is embedded in the input buffer), while the notification and +// retrieval of the config on the output as outlined in b) & c) must be supported. +// +// VIDEO ENCODERS: +// 1) If the codec utilizes out-of-band HDR10+ metadata, the decoder must support the sequence +// a) ~ c) outlined above; +// 2) If the codec utilizes in-band HDR10+ metadata, OMX_SetConfig for this config outlined in +// a) must be supported. The notification as outlined in b) must not be sent, and the +// retrieval of the config via OMX_GetConfig should be ignored (as the metadata is embedded +// in the output buffer). + +#define MAX_HDR10PLUSINFO_SIZE 1024 +struct DescribeHDR10PlusInfoParams { + OMX_U32 nSize; // IN + OMX_VERSIONTYPE nVersion; // IN + OMX_U32 nPortIndex; // IN + OMX_U32 nParamSize; // IN + OMX_U32 nParamSizeUsed; // IN/OUT + OMX_U8 nValue[1]; // IN/OUT +}; + } // namespace android extern android::OMXPluginBase *createOMXPlugin(); diff --git a/headers/media_plugin/media/openmax/OMX_Core.h b/headers/media_plugin/media/openmax/OMX_Core.h index bb974b3f88..9ff934e4a0 100644 --- a/headers/media_plugin/media/openmax/OMX_Core.h +++ b/headers/media_plugin/media/openmax/OMX_Core.h @@ -542,6 +542,20 @@ typedef enum OMX_EVENTTYPE * fool-proof way to do that for video encoders. */ OMX_EventDataSpaceChanged, + + /** + * Event when a component has an updated configuration on output for the client to retrieve. + * |arg1| contains the port index (currently only output port is valid). |arg2| contains the + * index of the updated config. + * + * For config updates that's associated with one frame, the update should be applied to the + * next output frame that comes in EmptyBufferDone callback. + * + * Upon receiving this event, the client must call the corresponding OMX_GetConfig to retrieve + * the config update. + */ + OMX_EventConfigUpdate, + OMX_EventMax = 0x7FFFFFFF } OMX_EVENTTYPE; diff --git a/headers/media_plugin/media/openmax/OMX_VideoExt.h b/headers/media_plugin/media/openmax/OMX_VideoExt.h index bbf157b889..435fcc8cca 100644 --- a/headers/media_plugin/media/openmax/OMX_VideoExt.h +++ b/headers/media_plugin/media/openmax/OMX_VideoExt.h @@ -164,6 +164,8 @@ typedef enum OMX_VIDEO_VP9PROFILETYPE { // HDR profiles also support passing HDR metadata OMX_VIDEO_VP9Profile2HDR = 0x1000, OMX_VIDEO_VP9Profile3HDR = 0x2000, + OMX_VIDEO_VP9Profile2HDR10Plus = 0x4000, + OMX_VIDEO_VP9Profile3HDR10Plus = 0x8000, OMX_VIDEO_VP9ProfileUnknown = 0x6EFFFFFF, OMX_VIDEO_VP9ProfileMax = 0x7FFFFFFF } OMX_VIDEO_VP9PROFILETYPE; @@ -216,6 +218,7 @@ typedef enum OMX_VIDEO_HEVCPROFILETYPE { OMX_VIDEO_HEVCProfileMainStill = 0x4, // Main10 profile with HDR SEI support. OMX_VIDEO_HEVCProfileMain10HDR10 = 0x1000, + OMX_VIDEO_HEVCProfileMain10HDR10Plus = 0x2000, OMX_VIDEO_HEVCProfileMax = 0x7FFFFFFF } OMX_VIDEO_HEVCPROFILETYPE;