From patchwork Sun Jun 17 04:21:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ramiro Polla X-Patchwork-Id: 9430 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:11c:0:0:0:0:0 with SMTP id c28-v6csp2459778jad; Sat, 16 Jun 2018 21:28:42 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJ1T3w85Qw5rxJtC+QnTTemrwmC7Tr3DZngl1Ul7NIP72ZFZmr8GQOX0WWKotiHWxTky6Gz X-Received: by 2002:adf:aadd:: with SMTP id i29-v6mr6182171wrc.149.1529209722824; Sat, 16 Jun 2018 21:28:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529209722; cv=none; d=google.com; s=arc-20160816; b=SF9wWgXLExWwbfgQuV+TxPLQL5PlvV/BqjlvOL4E08nFfTZ8UWMXaXclx+i+0TJGeC EVhoYpXJEqTM8Bc0szwHrzKNymfQi+rlioxWgwAAjavTT3SRT/CXyf2mNpaSlaM9ZhUx A4CXTQvvaYWACZbIkZhQJXb3vemU658njxls+OG7rknaDaZ2FGlBe+6nF36gpe+L7muB 4JpI+luZFWy2AkH4XP4MC1dlYLwvbqlTBIzgjr+4qfnMQVbTgWsaQvZ6AKpeMcYQJQbP Pol91sjYs5ZHA6fw97WRsbInrx6BfBmz/hkuVjb6RxLP3gKaD35bib46pXUfRS086U8s VTtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=TjlEPh8h2CxfD3Qwv8HbXiL6oNrKB9SAy3jgbsyoKgw=; b=Afg7t1BTiSLa+lziIge2gxc2V4E1JKy3hPN2bUrLa4viIiBEGYNq+49oLzbCpq+hF1 LLpBSx7AKlpABFX0Lk1xrcYMPyLi9ig1rly/4xUjlcDK2fzUvHP54AoovVk0ae3QIigR ThN3ltOTMpBYSrAY5F/S4G8B1k7pVw99U8AyJYJOZhWleMbkg7zG6mKwcg7k5BruJjLb +XKohuk1IvKOFpx87CN8gno3NG2Q37/d5jo/9dZ18FSru2OfPimh6AqBxrUB67V6FPEo dMSxMkEQQl7FiU3NEQ5ycrzUiSZ3hwYfO4UNz0lj0+wCIDSoScRFqkh3QBX6w9wcnsIq hB3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=VuxFhG9V; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 12-v6si4749127wmr.108.2018.06.16.21.28.42; Sat, 16 Jun 2018 21:28:42 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=VuxFhG9V; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CD8BE689DD6; Sun, 17 Jun 2018 07:27:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f194.google.com (mail-qt0-f194.google.com [209.85.216.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A4641689DC0 for ; Sun, 17 Jun 2018 07:27:42 +0300 (EEST) Received: by mail-qt0-f194.google.com with SMTP id i18-v6so12566761qtp.12 for ; Sat, 16 Jun 2018 21:28:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vfy4q51xJDTr/AJ9n9sf2rL43U83bE0+ZPEK9Re4dhk=; b=VuxFhG9VZHIBb5n2xa1THxSamutDKWHQsDX/UkWdFiQwaSXQ6yTJAtshunnp/QG3LF 7T5bbrOSNjai7dGQvRnGHiPtmhcqXVsPJOFN4Pta8gV0mzWWM9LKjai7o4Innwuxf5MO /6+EiIVoGYNEkwh2loHwGSLNACJ/4/tbq6jFxp29HkaqPR6snTZm0ddgf5G7/jWU1fHt XBtCXRprporgyiRaJxYDbihZkeD9Y0EERp3EsYufRdiK5ocGAbRPWlx+yoFIb58ISVJR ZH5hMvaMvdjGdP840ug0un73Z64PpcrRjJiotqGOVcB2XT28gV8mzInLuR+1zfN6FQVE GALg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=vfy4q51xJDTr/AJ9n9sf2rL43U83bE0+ZPEK9Re4dhk=; b=lEi1q2Gn8WQMccGXa9M8Y7g2pn6oFGm5PnJBZymuhl7Gz/fRBuPHSMhmPbQpXt4yuq /C67b4hUBAsuVuwgIQgNJ9u8kKra9MmF6XFIj7+Aj1yp3VR2agdjmFiPmjPInEVROGhM 07D2Lg40ePqQ3n/xK6qZchGpQaeZulWrcpRmO5ClrwfMLaOf5OdL7S0VG7DmV9ZXZipe nO05Tx22gVFxfKJhrDLXzUbmKxQQERjdSxirjxzTMJO0RUWQhscqB66tJ7lNtETe3+sw Ohp3IeTWLLZu0EadfIU+YT/2dHwfHxX5pa16sDlsbZVYXL05YLculo4C3IMsPp+n89sq ERkg== X-Gm-Message-State: APt69E2oosVYE+0mTVOaCJctGtbdK6l+Ee63MljFIhseJKBRkXlmxqYU 8DdFc8QdzmlpA+N09BVmi73cCQ== X-Received: by 2002:a0c:9c88:: with SMTP id i8-v6mr6619335qvf.193.1529209298324; Sat, 16 Jun 2018 21:21:38 -0700 (PDT) Received: from baleia.local (modemcable172.247-201-24.mc.videotron.ca. [24.201.247.172]) by smtp.gmail.com with ESMTPSA id x14-v6sm9601421qtk.33.2018.06.16.21.21.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 16 Jun 2018 21:21:37 -0700 (PDT) From: Ramiro Polla To: ffmpeg-devel@ffmpeg.org Date: Sun, 17 Jun 2018 06:21:15 +0200 Message-Id: <20180617042117.3844-2-ramiro.polla@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180617042117.3844-1-ramiro.polla@gmail.com> References: <20180617042117.3844-1-ramiro.polla@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/4] mpegutils: split debug function that prints mb_type so it may be used by ffprobe X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Ramiro Polla MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavcodec/mpegutils.c | 115 +++++++++++++++++++++++++++++-------------------- libavcodec/mpegutils.h | 7 +++ 2 files changed, 76 insertions(+), 46 deletions(-) diff --git a/libavcodec/mpegutils.c b/libavcodec/mpegutils.c index 0fbe5f8c9d..12c2468797 100644 --- a/libavcodec/mpegutils.c +++ b/libavcodec/mpegutils.c @@ -100,6 +100,72 @@ void ff_draw_horiz_band(AVCodecContext *avctx, } } +int ff_mb_type_str(char *str, int size, int mb_type) +{ + char *ptr = str; + + if (size <= 0) + return 0; + + if (--size <= 0) + goto end; + + // Type & MV direction + if (IS_PCM(mb_type)) + *ptr++ = 'P'; + else if (IS_INTRA(mb_type) && IS_ACPRED(mb_type)) + *ptr++ = 'A'; + else if (IS_INTRA4x4(mb_type)) + *ptr++ = 'i'; + else if (IS_INTRA16x16(mb_type)) + *ptr++ = 'I'; + else if (IS_DIRECT(mb_type) && IS_SKIP(mb_type)) + *ptr++ = 'd'; + else if (IS_DIRECT(mb_type)) + *ptr++ = 'D'; + else if (IS_GMC(mb_type) && IS_SKIP(mb_type)) + *ptr++ = 'g'; + else if (IS_GMC(mb_type)) + *ptr++ = 'G'; + else if (IS_SKIP(mb_type)) + *ptr++ = 'S'; + else if (!USES_LIST(mb_type, 1)) + *ptr++ = '>'; + else if (!USES_LIST(mb_type, 0)) + *ptr++ = '<'; + else { + av_assert2(USES_LIST(mb_type, 0) && USES_LIST(mb_type, 1)); + *ptr++ = 'X'; + } + + if (--size <= 0) + goto end; + + // segmentation + if (IS_8X8(mb_type)) + *ptr++ = '+'; + else if (IS_16X8(mb_type)) + *ptr++ = '-'; + else if (IS_8X16(mb_type)) + *ptr++ = '|'; + else if (IS_INTRA(mb_type) || IS_16X16(mb_type)) + *ptr++ = ' '; + else + *ptr++ = '?'; + + if (--size <= 0) + goto end; + + if (IS_INTERLACED(mb_type)) + *ptr++ = '='; + else + *ptr++ = ' '; + +end: + *ptr = '\0'; + return ptr - str; +} + void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, uint8_t *mbskip_table, uint32_t *mbtype_table, int8_t *qscale_table, int16_t (*motion_val[2])[2], int *low_delay, @@ -231,52 +297,9 @@ void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, uint8_t *mbskip_ qscale_table[x + y * mb_stride]); } if (avctx->debug & FF_DEBUG_MB_TYPE) { - int mb_type = mbtype_table[x + y * mb_stride]; - // Type & MV direction - if (IS_PCM(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "P"); - else if (IS_INTRA(mb_type) && IS_ACPRED(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "A"); - else if (IS_INTRA4x4(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "i"); - else if (IS_INTRA16x16(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "I"); - else if (IS_DIRECT(mb_type) && IS_SKIP(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "d"); - else if (IS_DIRECT(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "D"); - else if (IS_GMC(mb_type) && IS_SKIP(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "g"); - else if (IS_GMC(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "G"); - else if (IS_SKIP(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "S"); - else if (!USES_LIST(mb_type, 1)) - av_log(avctx, AV_LOG_DEBUG, ">"); - else if (!USES_LIST(mb_type, 0)) - av_log(avctx, AV_LOG_DEBUG, "<"); - else { - av_assert2(USES_LIST(mb_type, 0) && USES_LIST(mb_type, 1)); - av_log(avctx, AV_LOG_DEBUG, "X"); - } - - // segmentation - if (IS_8X8(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "+"); - else if (IS_16X8(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "-"); - else if (IS_8X16(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "|"); - else if (IS_INTRA(mb_type) || IS_16X16(mb_type)) - av_log(avctx, AV_LOG_DEBUG, " "); - else - av_log(avctx, AV_LOG_DEBUG, "?"); - - - if (IS_INTERLACED(mb_type)) - av_log(avctx, AV_LOG_DEBUG, "="); - else - av_log(avctx, AV_LOG_DEBUG, " "); + char str[4]; + ff_mb_type_str(str, sizeof(str), mbtype_table[x + y * mb_stride]); + av_log(avctx, AV_LOG_DEBUG, str); } } av_log(avctx, AV_LOG_DEBUG, "\n"); diff --git a/libavcodec/mpegutils.h b/libavcodec/mpegutils.h index 1ed21c19be..11856f9edb 100644 --- a/libavcodec/mpegutils.h +++ b/libavcodec/mpegutils.h @@ -138,6 +138,13 @@ void ff_draw_horiz_band(AVCodecContext *avctx, AVFrame *cur, AVFrame *last, int low_delay); /** + * Fill buffer with a string representing the macroblock type. + * + * @return number of characters written to str + */ +int ff_mb_type_str(char *str, int size, int mb_type); + +/** * Print debugging info for the given picture. */ void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, uint8_t *mbskip_table,