Message ID | tencent_5715C325B7886B7201DD6BC27C4AAC82390A@qq.com |
---|---|
State | Accepted |
Commit | 33698ef891bac5f09fe0ec26af9b24322d7594ce |
Headers | show |
Series | [FFmpeg-devel,1/2] avcodec/mpegutils: make debug_info2 thread safe | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
On Sat, Dec 30, 2023 at 01:20:16AM +0800, Zhao Zhili wrote: > From: Zhao Zhili <zhilizhao@tencent.com> > > For example, > > ./ffmpeg -nostats -threads 1 -debug qp \ > -export_side_data +venc_params \ > -i reinit-small_420_9-to-small_420_8.h264 \ > -frames 2 \ > -f null - > > New frame, type: B > 0 64 128 192 > 0 313131313131313131313131313129 > 16 292929292929292929292929292929 > 32 323232323232323232323232323232 > 48 323232323232323232323232323232 > 64 323232323232323232323232323232 > 80 323232323232323232323232323232 > 96 323232323030303030303030303030 > 112 303030303030303030303030303030 > 128 303030303030303030303030303028 > 144 313131312929292929292929292929 > 160 292929292929292929292929292929 > 176 292929292929292929292929292931 > 192 312831312631313131312730283131 the output looks nice thx [...]
diff --git a/libavcodec/mpegutils.c b/libavcodec/mpegutils.c index a565773c5e..fc3e270631 100644 --- a/libavcodec/mpegutils.c +++ b/libavcodec/mpegutils.c @@ -254,12 +254,43 @@ void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, AVBPrint buf; char *str = NULL; int n; + int margin_left; + int x_step; av_log(avctx, AV_LOG_DEBUG, "New frame, type: %c\n", av_get_picture_type_char(pict->pict_type)); + + margin_left = 2; + n = mb_width << 4; + while ((n /= 10)) + margin_left++; + + av_bprint_init(&buf, 1, AV_BPRINT_SIZE_UNLIMITED); + av_bprintf(&buf, "%*s", margin_left, " "); + + n = 0; + if (avctx->debug & FF_DEBUG_SKIP) + n++; + if (avctx->debug & FF_DEBUG_QP) + n += 2; + if (avctx->debug & FF_DEBUG_MB_TYPE) + n += 3; + x_step = (mb_width * 16 > 999) ? 8 : 4; + for (x = 0; x < mb_width; x += x_step) + av_bprintf(&buf, "%-*d", n * x_step, x << 4); + n = av_bprint_finalize(&buf, &str); + if (n < 0) { + av_log(avctx, AV_LOG_ERROR, "%s failed, %s\n", __func__, av_err2str(n)); + return; + } + av_log(avctx, AV_LOG_DEBUG, "%s\n", str); + av_freep(&str); + for (y = 0; y < mb_height; y++) { av_bprint_init(&buf, 1, AV_BPRINT_SIZE_UNLIMITED); for (x = 0; x < mb_width; x++) { + if (x == 0) + av_bprintf(&buf, "%*d ", margin_left - 1, y << 4); if (avctx->debug & FF_DEBUG_SKIP) { int count = mbskip_table ? mbskip_table[x + y * mb_stride] : 0; if (count > 9)