Loading media/libstagefright/MediaCodec.cpp +46 −0 Original line number Diff line number Diff line Loading @@ -112,6 +112,13 @@ static const char *kCodecFrameRate = "android.media.mediacodec.frame-rate"; static const char *kCodecCaptureRate = "android.media.mediacodec.capture-rate"; static const char *kCodecOperatingRate = "android.media.mediacodec.operating-rate"; static const char *kCodecPriority = "android.media.mediacodec.priority"; static const char *kCodecConfigColorStandard = "android.media.mediacodec.config-color-standard"; static const char *kCodecConfigColorRange = "android.media.mediacodec.config-color-range"; static const char *kCodecConfigColorTransfer = "android.media.mediacodec.config-color-transfer"; static const char *kCodecParsedColorStandard = "android.media.mediacodec.parsed-color-standard"; static const char *kCodecParsedColorRange = "android.media.mediacodec.parsed-color-range"; static const char *kCodecParsedColorTransfer = "android.media.mediacodec.parsed-color-transfer"; static const char *kCodecHDRMetadataFlags = "android.media.mediacodec.hdr-metadata-flags"; // Min/Max QP before shaping static const char *kCodecOriginalVideoQPIMin = "android.media.mediacodec.original-video-qp-i-min"; Loading Loading @@ -748,6 +755,7 @@ MediaCodec::MediaCodec( mVideoWidth(0), mVideoHeight(0), mRotationDegrees(0), mHDRMetadataFlags(0), mDequeueInputTimeoutGeneration(0), mDequeueInputReplyID(0), mDequeueOutputTimeoutGeneration(0), Loading Loading @@ -898,6 +906,8 @@ void MediaCodec::updateMediametrics() { mediametrics_setInt64(mMetricsHandle, kCodecFirstFrameIndexLowLatencyModeOn, mIndexOfFirstFrameWhenLowLatencyOn); } mediametrics_setInt32(mMetricsHandle, kCodecHDRMetadataFlags, mHDRMetadataFlags); #if 0 // enable for short term, only while debugging updateEphemeralMediametrics(mMetricsHandle); Loading Loading @@ -1566,6 +1576,23 @@ status_t MediaCodec::configure( if (format->findInt32("priority", &priority)) { mediametrics_setInt32(mMetricsHandle, kCodecPriority, priority); } int32_t colorStandard = -1; if (format->findInt32(KEY_COLOR_STANDARD, &colorStandard)) { mediametrics_setInt32(mMetricsHandle, kCodecConfigColorStandard, colorStandard); } int32_t colorRange = -1; if (format->findInt32(KEY_COLOR_RANGE, &colorRange)) { mediametrics_setInt32(mMetricsHandle, kCodecConfigColorRange, colorRange); } int32_t colorTransfer = -1; if (format->findInt32(KEY_COLOR_TRANSFER, &colorTransfer)) { mediametrics_setInt32(mMetricsHandle, kCodecConfigColorTransfer, colorTransfer); } HDRStaticInfo info; if (ColorUtils::getHDRStaticInfoFromFormat(format, &info) && ColorUtils::isHDRStaticInfoValid(&info)) { mHDRMetadataFlags |= kFlagHDRStaticInfo; } } // Prevent possible integer overflow in downstream code. Loading Loading @@ -4516,6 +4543,9 @@ void MediaCodec::handleOutputFormatChangeIfNeeded(const sp<MediaCodecBuffer> &bu HDRStaticInfo info; if (ColorUtils::getHDRStaticInfoFromFormat(mOutputFormat, &info)) { setNativeWindowHdrMetadata(mSurface.get(), &info); if (ColorUtils::isHDRStaticInfoValid(&info)) { mHDRMetadataFlags |= kFlagHDRStaticInfo; } } } Loading @@ -4524,6 +4554,7 @@ void MediaCodec::handleOutputFormatChangeIfNeeded(const sp<MediaCodecBuffer> &bu && hdr10PlusInfo != nullptr && hdr10PlusInfo->size() > 0) { native_window_set_buffers_hdr10_plus_metadata(mSurface.get(), hdr10PlusInfo->size(), hdr10PlusInfo->data()); mHDRMetadataFlags |= kFlagHDR10PlusInfo; } if (mime.startsWithIgnoreCase("video/")) { Loading Loading @@ -4568,6 +4599,21 @@ void MediaCodec::handleOutputFormatChangeIfNeeded(const sp<MediaCodecBuffer> &bu mCrypto->notifyResolution(width, height); } } if (mMetricsHandle != 0) { int32_t colorStandard = -1; if (format->findInt32(KEY_COLOR_STANDARD, &colorStandard)) { mediametrics_setInt32(mMetricsHandle, kCodecParsedColorStandard, colorStandard); } int32_t colorRange = -1; if (format->findInt32( KEY_COLOR_RANGE, &colorRange)) { mediametrics_setInt32(mMetricsHandle, kCodecParsedColorRange, colorRange); } int32_t colorTransfer = -1; if (format->findInt32(KEY_COLOR_TRANSFER, &colorTransfer)) { mediametrics_setInt32(mMetricsHandle, kCodecParsedColorTransfer, colorTransfer); } } } void MediaCodec::extractCSD(const sp<AMessage> &format) { Loading media/libstagefright/foundation/ColorUtils.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -781,5 +781,14 @@ bool ColorUtils::getHDRStaticInfoFromFormat(const sp<AMessage> &format, HDRStati return true; } // static bool ColorUtils::isHDRStaticInfoValid(HDRStaticInfo *info) { if (info->sType1.mMaxDisplayLuminance > 0.0f && info->sType1.mMinDisplayLuminance > 0.0f) return true; if (info->sType1.mMaxContentLightLevel > 0.0f && info->sType1.mMaxFrameAverageLightLevel > 0.0f) return true; return false; } } // namespace android media/libstagefright/foundation/include/media/stagefright/foundation/ColorUtils.h +3 −0 Original line number Diff line number Diff line Loading @@ -193,6 +193,9 @@ struct ColorUtils { static void setHDRStaticInfoIntoAMediaFormat(const HDRStaticInfo &info, AMediaFormat *format); // (internal) used by the setHDRStaticInfoInfo* routines static void fillHdrStaticInfoBuffer( const HDRStaticInfo &info, uint8_t *data); // determine whether HDR static info is valid static bool isHDRStaticInfoValid(HDRStaticInfo *info); }; inline static const char *asString(android::ColorUtils::ColorStandard i, const char *def = "??") { Loading media/libstagefright/include/media/stagefright/MediaCodec.h +6 −0 Original line number Diff line number Diff line Loading @@ -445,6 +445,12 @@ private: int32_t mRotationDegrees; int32_t mAllowFrameDroppingBySurface; uint32_t mHDRMetadataFlags; /* bitmask of kFlagHDR* */ enum { kFlagHDRStaticInfo = 1 << 0, kFlagHDR10PlusInfo = 1 << 1, }; // initial create parameters AString mInitName; Loading services/mediametrics/statsd_codec.cpp +42 −0 Original line number Diff line number Diff line Loading @@ -390,6 +390,48 @@ bool statsd_codec(const std::shared_ptr<const mediametrics::Item>& item, } AStatsEvent_writeInt32(event, qpBMaxOri); // int32_t configColorStandard = -1; // if (item->getInt32("android.media.mediacodec.config-color-standard", &configColorStandard)) { // metrics_proto.set_config_color_standard(configColorStandard); // } // AStatsEvent_writeInt32(event, configColorStandard); // int32_t configColorRange = -1; // if (item->getInt32("android.media.mediacodec.config-color-range", &configColorRange)) { // metrics_proto.set_config_color_range(configColorRange); // } // AStatsEvent_writeInt32(event, configColorRange); // int32_t configColorTransfer = -1; // if (item->getInt32("android.media.mediacodec.config-color-transfer", &configColorTransfer)) { // metrics_proto.set_config_color_transfer(configColorTransfer); // } // AStatsEvent_writeInt32(event, configColorTransfer); // int32_t parsedColorStandard = -1; // if (item->getInt32("android.media.mediacodec.parsed-color-standard", &parsedColorStandard)) { // metrics_proto.set_parsed_color_standard(parsedColorStandard); // } // AStatsEvent_writeInt32(event, parsedColorStandard); // int32_t parsedColorRange = -1; // if (item->getInt32("android.media.mediacodec.parsed-color-range", &parsedColorRange)) { // metrics_proto.set_parsed_color_range(parsedColorRange); // } // AStatsEvent_writeInt32(event, parsedColorRange); // int32_t parsedColorTransfer = -1; // if (item->getInt32("android.media.mediacodec.parsed-color-transfer", &parsedColorTransfer)) { // metrics_proto.set_parsed_color_transfer(parsedColorTransfer); // } // AStatsEvent_writeInt32(event, parsedColorTransfer); // int32_t hdrMetadataFlags = -1; // if (item->getInt32("android.media.mediacodec.hdr-metadata-flags", &hdrMetadataFlags)) { // metrics_proto.set_hdr_metadata_flags(hdrMetadataFlags); // } // AStatsEvent_writeInt32(event, hdrMetadataFlags); int err = AStatsEvent_write(event); if (err < 0) { ALOGE("Failed to write codec metrics to statsd (%d)", err); Loading Loading
media/libstagefright/MediaCodec.cpp +46 −0 Original line number Diff line number Diff line Loading @@ -112,6 +112,13 @@ static const char *kCodecFrameRate = "android.media.mediacodec.frame-rate"; static const char *kCodecCaptureRate = "android.media.mediacodec.capture-rate"; static const char *kCodecOperatingRate = "android.media.mediacodec.operating-rate"; static const char *kCodecPriority = "android.media.mediacodec.priority"; static const char *kCodecConfigColorStandard = "android.media.mediacodec.config-color-standard"; static const char *kCodecConfigColorRange = "android.media.mediacodec.config-color-range"; static const char *kCodecConfigColorTransfer = "android.media.mediacodec.config-color-transfer"; static const char *kCodecParsedColorStandard = "android.media.mediacodec.parsed-color-standard"; static const char *kCodecParsedColorRange = "android.media.mediacodec.parsed-color-range"; static const char *kCodecParsedColorTransfer = "android.media.mediacodec.parsed-color-transfer"; static const char *kCodecHDRMetadataFlags = "android.media.mediacodec.hdr-metadata-flags"; // Min/Max QP before shaping static const char *kCodecOriginalVideoQPIMin = "android.media.mediacodec.original-video-qp-i-min"; Loading Loading @@ -748,6 +755,7 @@ MediaCodec::MediaCodec( mVideoWidth(0), mVideoHeight(0), mRotationDegrees(0), mHDRMetadataFlags(0), mDequeueInputTimeoutGeneration(0), mDequeueInputReplyID(0), mDequeueOutputTimeoutGeneration(0), Loading Loading @@ -898,6 +906,8 @@ void MediaCodec::updateMediametrics() { mediametrics_setInt64(mMetricsHandle, kCodecFirstFrameIndexLowLatencyModeOn, mIndexOfFirstFrameWhenLowLatencyOn); } mediametrics_setInt32(mMetricsHandle, kCodecHDRMetadataFlags, mHDRMetadataFlags); #if 0 // enable for short term, only while debugging updateEphemeralMediametrics(mMetricsHandle); Loading Loading @@ -1566,6 +1576,23 @@ status_t MediaCodec::configure( if (format->findInt32("priority", &priority)) { mediametrics_setInt32(mMetricsHandle, kCodecPriority, priority); } int32_t colorStandard = -1; if (format->findInt32(KEY_COLOR_STANDARD, &colorStandard)) { mediametrics_setInt32(mMetricsHandle, kCodecConfigColorStandard, colorStandard); } int32_t colorRange = -1; if (format->findInt32(KEY_COLOR_RANGE, &colorRange)) { mediametrics_setInt32(mMetricsHandle, kCodecConfigColorRange, colorRange); } int32_t colorTransfer = -1; if (format->findInt32(KEY_COLOR_TRANSFER, &colorTransfer)) { mediametrics_setInt32(mMetricsHandle, kCodecConfigColorTransfer, colorTransfer); } HDRStaticInfo info; if (ColorUtils::getHDRStaticInfoFromFormat(format, &info) && ColorUtils::isHDRStaticInfoValid(&info)) { mHDRMetadataFlags |= kFlagHDRStaticInfo; } } // Prevent possible integer overflow in downstream code. Loading Loading @@ -4516,6 +4543,9 @@ void MediaCodec::handleOutputFormatChangeIfNeeded(const sp<MediaCodecBuffer> &bu HDRStaticInfo info; if (ColorUtils::getHDRStaticInfoFromFormat(mOutputFormat, &info)) { setNativeWindowHdrMetadata(mSurface.get(), &info); if (ColorUtils::isHDRStaticInfoValid(&info)) { mHDRMetadataFlags |= kFlagHDRStaticInfo; } } } Loading @@ -4524,6 +4554,7 @@ void MediaCodec::handleOutputFormatChangeIfNeeded(const sp<MediaCodecBuffer> &bu && hdr10PlusInfo != nullptr && hdr10PlusInfo->size() > 0) { native_window_set_buffers_hdr10_plus_metadata(mSurface.get(), hdr10PlusInfo->size(), hdr10PlusInfo->data()); mHDRMetadataFlags |= kFlagHDR10PlusInfo; } if (mime.startsWithIgnoreCase("video/")) { Loading Loading @@ -4568,6 +4599,21 @@ void MediaCodec::handleOutputFormatChangeIfNeeded(const sp<MediaCodecBuffer> &bu mCrypto->notifyResolution(width, height); } } if (mMetricsHandle != 0) { int32_t colorStandard = -1; if (format->findInt32(KEY_COLOR_STANDARD, &colorStandard)) { mediametrics_setInt32(mMetricsHandle, kCodecParsedColorStandard, colorStandard); } int32_t colorRange = -1; if (format->findInt32( KEY_COLOR_RANGE, &colorRange)) { mediametrics_setInt32(mMetricsHandle, kCodecParsedColorRange, colorRange); } int32_t colorTransfer = -1; if (format->findInt32(KEY_COLOR_TRANSFER, &colorTransfer)) { mediametrics_setInt32(mMetricsHandle, kCodecParsedColorTransfer, colorTransfer); } } } void MediaCodec::extractCSD(const sp<AMessage> &format) { Loading
media/libstagefright/foundation/ColorUtils.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -781,5 +781,14 @@ bool ColorUtils::getHDRStaticInfoFromFormat(const sp<AMessage> &format, HDRStati return true; } // static bool ColorUtils::isHDRStaticInfoValid(HDRStaticInfo *info) { if (info->sType1.mMaxDisplayLuminance > 0.0f && info->sType1.mMinDisplayLuminance > 0.0f) return true; if (info->sType1.mMaxContentLightLevel > 0.0f && info->sType1.mMaxFrameAverageLightLevel > 0.0f) return true; return false; } } // namespace android
media/libstagefright/foundation/include/media/stagefright/foundation/ColorUtils.h +3 −0 Original line number Diff line number Diff line Loading @@ -193,6 +193,9 @@ struct ColorUtils { static void setHDRStaticInfoIntoAMediaFormat(const HDRStaticInfo &info, AMediaFormat *format); // (internal) used by the setHDRStaticInfoInfo* routines static void fillHdrStaticInfoBuffer( const HDRStaticInfo &info, uint8_t *data); // determine whether HDR static info is valid static bool isHDRStaticInfoValid(HDRStaticInfo *info); }; inline static const char *asString(android::ColorUtils::ColorStandard i, const char *def = "??") { Loading
media/libstagefright/include/media/stagefright/MediaCodec.h +6 −0 Original line number Diff line number Diff line Loading @@ -445,6 +445,12 @@ private: int32_t mRotationDegrees; int32_t mAllowFrameDroppingBySurface; uint32_t mHDRMetadataFlags; /* bitmask of kFlagHDR* */ enum { kFlagHDRStaticInfo = 1 << 0, kFlagHDR10PlusInfo = 1 << 1, }; // initial create parameters AString mInitName; Loading
services/mediametrics/statsd_codec.cpp +42 −0 Original line number Diff line number Diff line Loading @@ -390,6 +390,48 @@ bool statsd_codec(const std::shared_ptr<const mediametrics::Item>& item, } AStatsEvent_writeInt32(event, qpBMaxOri); // int32_t configColorStandard = -1; // if (item->getInt32("android.media.mediacodec.config-color-standard", &configColorStandard)) { // metrics_proto.set_config_color_standard(configColorStandard); // } // AStatsEvent_writeInt32(event, configColorStandard); // int32_t configColorRange = -1; // if (item->getInt32("android.media.mediacodec.config-color-range", &configColorRange)) { // metrics_proto.set_config_color_range(configColorRange); // } // AStatsEvent_writeInt32(event, configColorRange); // int32_t configColorTransfer = -1; // if (item->getInt32("android.media.mediacodec.config-color-transfer", &configColorTransfer)) { // metrics_proto.set_config_color_transfer(configColorTransfer); // } // AStatsEvent_writeInt32(event, configColorTransfer); // int32_t parsedColorStandard = -1; // if (item->getInt32("android.media.mediacodec.parsed-color-standard", &parsedColorStandard)) { // metrics_proto.set_parsed_color_standard(parsedColorStandard); // } // AStatsEvent_writeInt32(event, parsedColorStandard); // int32_t parsedColorRange = -1; // if (item->getInt32("android.media.mediacodec.parsed-color-range", &parsedColorRange)) { // metrics_proto.set_parsed_color_range(parsedColorRange); // } // AStatsEvent_writeInt32(event, parsedColorRange); // int32_t parsedColorTransfer = -1; // if (item->getInt32("android.media.mediacodec.parsed-color-transfer", &parsedColorTransfer)) { // metrics_proto.set_parsed_color_transfer(parsedColorTransfer); // } // AStatsEvent_writeInt32(event, parsedColorTransfer); // int32_t hdrMetadataFlags = -1; // if (item->getInt32("android.media.mediacodec.hdr-metadata-flags", &hdrMetadataFlags)) { // metrics_proto.set_hdr_metadata_flags(hdrMetadataFlags); // } // AStatsEvent_writeInt32(event, hdrMetadataFlags); int err = AStatsEvent_write(event); if (err < 0) { ALOGE("Failed to write codec metrics to statsd (%d)", err); Loading