From patchwork Sat Mar 3 00:12:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthieu Bouron X-Patchwork-Id: 7799 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.181.170 with SMTP id m39csp103250jaj; Fri, 2 Mar 2018 16:18:35 -0800 (PST) X-Google-Smtp-Source: AG47ELvJs8630jENyFFj7Fg2fScPcnt7opoI5gL76Tgnv075Uc3LPCxN/WqVCjwpy8Sh5Lmc8Rmy X-Received: by 10.223.184.124 with SMTP id u57mr6371786wrf.100.1520036315632; Fri, 02 Mar 2018 16:18:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520036315; cv=none; d=google.com; s=arc-20160816; b=OzLbudx9cOI6tCN4vFVIF6oVSxqOf5C5zqph2fnlcmiLfc6cfbM687vNvuxIaJhQfM MoFb2UpfoRfvO+sDbBGX6zpmFfmAuFob1wuAreR2W911hzhWQGAQBFKlhwVl5LzoTtV9 AJOKOcp8SoWdXBRqm/esl39mXo6kVsGlrAls6Po4aXxDpuhGFlyyCfltLTrLoOwNpIIH lWBmJ5sIpg7oVJDhcqOPpDU3DS9upL8c+ErIxIhP8iHOKNqUNWdL5TCzp0CFBHzR7Wut xcuuHlH/v4g/wpakSepqk9AEoRgwKibXkjJorCjNfXmGeSRaAfmbJmlS/PvkR7zSJ9Wu J+eQ== 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:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=l3zLmz3ka+Ezbbk4/GnOdLIQpgks9WBL6P76vv7p3FM=; b=uRJjWfWwT/cakmilq0OdhEAuB9WCLWTsvC2FPM9UyV/pQwj8qos8PThNzW7Y6xsx/u FfvuBDvIkbAHDvOyHNQK7HH28f9jaKA7jQbvjq/ppcC3aeGVzUyLCw5ba8yb6GhyayLk 9OHKdUaQK98qJI/+GOUr7i0c+eKRvS2zC41VzoMzIxpR+JgzrZdp4+Mtt7/cEcST6/nO V102+IX6Y7/TxjntlLi2dil6dnwiNi6UZTtnGujlA7ytq7oA1FCY56s/zHKvZH+Tx0ln jyW7kqIgIu1fhQ8ir0CZhhWNuzq8QLPXjmjVUa7Wc8p36vNII8sEIcln8+QXUFIgp1ds aYTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=fba/dJv7; 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 p16si5106321wre.509.2018.03.02.16.18.34; Fri, 02 Mar 2018 16:18:35 -0800 (PST) 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=fba/dJv7; 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 BF04668A6FF; Sat, 3 Mar 2018 02:18:26 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9C17A68A6EB for ; Sat, 3 Mar 2018 02:18:19 +0200 (EET) Received: by mail-wm0-f50.google.com with SMTP id t74so6121670wme.3 for ; Fri, 02 Mar 2018 16:18:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=UpsaBgMrjeJjuUx3tZuWH3LAhEFkuR1Su7CWCrW659s=; b=fba/dJv7T0RJ6s8BzG65MrS1RlEjla+cl873e8zhcpx7B4BBRyiTk/KMN4pnAGulEG ptd95T8heDe5Wv9kWWhZutcvnfpoSGtVIfjnJ2EOae2XDp80bjVpMrMYvHRvJTRhXIOx Cn9oLG9E/u0Ws5U9IrZ7weNLbHJs3YUnO036byjkJycgipr8Jqe7VkAazKRR+RI9QDg3 U9darE2VbMHz4MDu0EB79yUaDNYE/EvFMec/mglaFHc+zare12KS6gJN2Fw2/dySG6ir FTBA50wpNHzYtnAR7FAJ8Zi76Ub6Q76ZZ9Sy6SiQaFDdE+NsNmBtGTGjdX26uS/p9XnH r2Nw== 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; bh=UpsaBgMrjeJjuUx3tZuWH3LAhEFkuR1Su7CWCrW659s=; b=iQLozjzppUdtDQa2yyKgWX27aFq4ZRLx1vyVUesV9vcMXqJf0t3rx5ttzDw9Tp2vpG jfbXxODj01tktKwHNXdt7QE4+KnN08BR6nQY07hHZ/Nus6Z+Xt/4nvkr8V/6vULHFn/Y z1aoF4+Nft50O/4ZYNyELHkVXXKjrubf2fC6tMqljbtySC4aCK1eABqQc5e+6lga0Mzo tEAOsUHOC6mAIotUXgGikxWBFhQVp55UFQsSbiVRSOA18+0d5jrkCZhh6jCFzNdJkdZX uz7KjTuU/IgeXXctGJe+iHEeTWTDr7hXy6bv4X84it6YubkP0bZUGSimjVuNCW1YpDRc ZY4g== X-Gm-Message-State: AElRT7HfK0s/kKIqUWspqu96nOyyltUVcUbq2XgK7Skghm0ftHpJE85M YEr45Gex8Cdhy2O5annv1mjZsQ== X-Received: by 10.28.249.21 with SMTP id x21mr2943169wmh.114.1520035990677; Fri, 02 Mar 2018 16:13:10 -0800 (PST) Received: from kusa.lan (AMontsouris-653-1-90-209.w86-212.abo.wanadoo.fr. [86.212.113.209]) by smtp.gmail.com with ESMTPSA id x78sm4091569wmd.2.2018.03.02.16.13.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 02 Mar 2018 16:13:09 -0800 (PST) From: Matthieu Bouron To: ffmpeg-devel@ffmpeg.org Date: Sat, 3 Mar 2018 01:12:54 +0100 Message-Id: <20180303001300.4291-1-matthieu.bouron@gmail.com> X-Mailer: git-send-email 2.16.2 Subject: [FFmpeg-devel] [PATCH 1/7] avcodec/mediacodecdec_common: refactor mediacodec_dec_parse_format() 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: Matthieu Bouron MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavcodec/mediacodecdec_common.c | 82 ++++++++++++++------------------------- 1 file changed, 30 insertions(+), 52 deletions(-) diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c index b44abaef7f..ab26df04bd 100644 --- a/libavcodec/mediacodecdec_common.c +++ b/libavcodec/mediacodecdec_common.c @@ -339,11 +339,22 @@ done: return ret; } +#define AMEDIAFORMAT_GET_INT32(name, key, mandatory) do { \ + int32_t value = 0; \ + if (ff_AMediaFormat_getInt32(s->format, key, &value)) { \ + (name) = value; \ + } else if (mandatory) { \ + av_log(avctx, AV_LOG_ERROR, "Could not get %s from format %s\n", key, format); \ + ret = AVERROR_EXTERNAL; \ + goto fail; \ + } \ +} while (0) \ + static int mediacodec_dec_parse_format(AVCodecContext *avctx, MediaCodecDecContext *s) { + int ret = 0; int width = 0; int height = 0; - int32_t value = 0; char *format = NULL; if (!s->format) { @@ -356,40 +367,16 @@ static int mediacodec_dec_parse_format(AVCodecContext *avctx, MediaCodecDecConte return AVERROR_EXTERNAL; } av_log(avctx, AV_LOG_DEBUG, "Parsing MediaFormat %s\n", format); - av_freep(&format); /* Mandatory fields */ - if (!ff_AMediaFormat_getInt32(s->format, "width", &value)) { - format = ff_AMediaFormat_toString(s->format); - av_log(avctx, AV_LOG_ERROR, "Could not get %s from format %s\n", "width", format); - av_freep(&format); - return AVERROR_EXTERNAL; - } - s->width = value; + AMEDIAFORMAT_GET_INT32(s->width, "width", 1); + AMEDIAFORMAT_GET_INT32(s->height, "height", 1); - if (!ff_AMediaFormat_getInt32(s->format, "height", &value)) { - format = ff_AMediaFormat_toString(s->format); - av_log(avctx, AV_LOG_ERROR, "Could not get %s from format %s\n", "height", format); - av_freep(&format); - return AVERROR_EXTERNAL; - } - s->height = value; + AMEDIAFORMAT_GET_INT32(s->stride, "stride", 1); + s->stride = s->stride > 0 ? s->stride : s->width; - if (!ff_AMediaFormat_getInt32(s->format, "stride", &value)) { - format = ff_AMediaFormat_toString(s->format); - av_log(avctx, AV_LOG_ERROR, "Could not get %s from format %s\n", "stride", format); - av_freep(&format); - return AVERROR_EXTERNAL; - } - s->stride = value > 0 ? value : s->width; - - if (!ff_AMediaFormat_getInt32(s->format, "slice-height", &value)) { - format = ff_AMediaFormat_toString(s->format); - av_log(avctx, AV_LOG_ERROR, "Could not get %s from format %s\n", "slice-height", format); - av_freep(&format); - return AVERROR_EXTERNAL; - } - s->slice_height = value > 0 ? value : s->height; + AMEDIAFORMAT_GET_INT32(s->slice_height, "slice-height", 1); + s->slice_height = s->slice_height > 0 ? s->slice_height : s->height; if (strstr(s->codec_name, "OMX.Nvidia.")) { s->slice_height = FFALIGN(s->height, 16); @@ -398,32 +385,19 @@ static int mediacodec_dec_parse_format(AVCodecContext *avctx, MediaCodecDecConte s->stride = avctx->width; } - if (!ff_AMediaFormat_getInt32(s->format, "color-format", &value)) { - format = ff_AMediaFormat_toString(s->format); - av_log(avctx, AV_LOG_ERROR, "Could not get %s from format %s\n", "color-format", format); - av_freep(&format); - return AVERROR_EXTERNAL; - } - s->color_format = value; - - s->pix_fmt = avctx->pix_fmt = mcdec_map_color_format(avctx, s, value); + AMEDIAFORMAT_GET_INT32(s->color_format, "color-format", 1); + s->pix_fmt = avctx->pix_fmt = mcdec_map_color_format(avctx, s, s->color_format); if (avctx->pix_fmt == AV_PIX_FMT_NONE) { av_log(avctx, AV_LOG_ERROR, "Output color format is not supported\n"); - return AVERROR(EINVAL); + ret = AVERROR(EINVAL); + goto fail; } /* Optional fields */ - if (ff_AMediaFormat_getInt32(s->format, "crop-top", &value)) - s->crop_top = value; - - if (ff_AMediaFormat_getInt32(s->format, "crop-bottom", &value)) - s->crop_bottom = value; - - if (ff_AMediaFormat_getInt32(s->format, "crop-left", &value)) - s->crop_left = value; - - if (ff_AMediaFormat_getInt32(s->format, "crop-right", &value)) - s->crop_right = value; + AMEDIAFORMAT_GET_INT32(s->crop_top, "crop-top", 0); + AMEDIAFORMAT_GET_INT32(s->crop_bottom, "crop-bottom", 0); + AMEDIAFORMAT_GET_INT32(s->crop_left, "crop-left", 0); + AMEDIAFORMAT_GET_INT32(s->crop_right, "crop-right", 0); width = s->crop_right + 1 - s->crop_left; height = s->crop_bottom + 1 - s->crop_top; @@ -434,7 +408,11 @@ static int mediacodec_dec_parse_format(AVCodecContext *avctx, MediaCodecDecConte s->crop_top, s->crop_bottom, s->crop_left, s->crop_right, width, height); + av_freep(&format); return ff_set_dimensions(avctx, width, height); +fail: + av_freep(&format); + return ret; }