diff options
Diffstat (limited to 'libavcodec/h264.c')
-rw-r--r-- | libavcodec/h264.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 367f6bf282..46eaec2ab0 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -959,6 +959,34 @@ static int get_last_needed_nal(H264Context *h) return nals_needed; } +static void debug_green_metadata(const GreenMetaData *gm, void *logctx) +{ + av_log(logctx, AV_LOG_DEBUG, "Green Metadata Info SEI message\n"); + av_log(logctx, AV_LOG_DEBUG, " green_metadata_type: %d\n", gm->green_metadata_type); + + if (gm->green_metadata_type == 0) { + av_log(logctx, AV_LOG_DEBUG, " green_metadata_period_type: %d\n", gm->period_type); + + if (gm->period_type == 2) + av_log(logctx, AV_LOG_DEBUG, " green_metadata_num_seconds: %d\n", gm->num_seconds); + else if (gm->period_type == 3) + av_log(logctx, AV_LOG_DEBUG, " green_metadata_num_pictures: %d\n", gm->num_pictures); + + av_log(logctx, AV_LOG_DEBUG, " SEI GREEN Complexity Metrics: %f %f %f %f\n", + (float)gm->percent_non_zero_macroblocks/255, + (float)gm->percent_intra_coded_macroblocks/255, + (float)gm->percent_six_tap_filtering/255, + (float)gm->percent_alpha_point_deblocking_instance/255); + + } else if (gm->green_metadata_type == 1) { + av_log(logctx, AV_LOG_DEBUG, " xsd_metric_type: %d\n", gm->xsd_metric_type); + + if (gm->xsd_metric_type == 0) + av_log(logctx, AV_LOG_DEBUG, " xsd_metric_value: %f\n", + (float)gm->xsd_metric_value/100); + } +} + static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size, int parse_extradata) { @@ -1141,6 +1169,8 @@ again: case NAL_SEI: h->gb = nal->gb; ret = ff_h264_decode_sei(h); + if (avctx->debug & FF_DEBUG_GREEN_MD) + debug_green_metadata(&h->sei_green_metadata, h->avctx); if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE)) goto end; break; |