From patchwork Tue Jan 14 03:13:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 17335 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 2DBE944BB86 for ; Tue, 14 Jan 2020 05:14:07 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 13E9168B09B; Tue, 14 Jan 2020 05:14:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B9F2868B04D for ; Tue, 14 Jan 2020 05:13:58 +0200 (EET) Received: by mail-wm1-f67.google.com with SMTP id d73so12080928wmd.1 for ; Mon, 13 Jan 2020 19:13:58 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=JvQ17PJBHWnjMOyFAg629+209PjlHd9hESo093USu8g=; b=f6nVAMWHYPyQZBXwzJY5u7cmjKn2n0U0G9VHxYbAm+sX0HdLpVlcmHNGtykzpOsv4L 2WDVGG6Gk3og94No8LyzE+UQQH+534MR1pPGjRx8UEFNzp5VOqg9y39T9ATPM1z1ShiE 5YGbvwz6y7Jyb9rSCjI0VURknSs0/MqaS79Q+cAE4xMDDrhJtphxprLbk5N/CaoM8NyX rfgnMKie0/XPERVmg7C7F7+w+Gq6qxXSI/6wyIaiEFQAVwe1bX2hheU6s9FwbyT6qQeT eDbJRUjT+eySMOgD5AWVYtGC31nQIU8LyTHpZec/AG561hgxNr2/+QiJACsO9OWpb87/ 7vSA== 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:mime-version:content-transfer-encoding; bh=JvQ17PJBHWnjMOyFAg629+209PjlHd9hESo093USu8g=; b=duzzDkF06TtGGV7X1PGcsvJ5rbmDxGBPDxeKrfF/T2E248PQeMhproQqWp65/yzH9L plBbhZijV7ufH+Vj6Kc91dufkP0W1ctDtvuty6EshxLzea8OAgofMw9KZpvTKnkSWVeh WuOFYTrGu+gZCIlDKq8azZJiLa8NLmYe/PQK7zgZf7+1kmm2IqMXSSztkUZ0oPPqtQJl fQjYxpjxOq9B5ebywyUiPNXb4OaP889R9NvS64eslb2uvFQw+xIzhRje/xknuOJwGBrs y8KJQWfruaEvzezOHt0yK1+cqdpxXOOo7c+iIZoaRTaiI46hRa6LAAIf7MHAEkBv2nDE Jjsg== X-Gm-Message-State: APjAAAUCfrzBxAQhp1XpJxCwREQxsEjIOQHA+d6T93A7aN/IsbFQBX8w gYkZBTMGWq8AGwkqU39r6wwL9dGL X-Google-Smtp-Source: APXvYqxyNwDIRNkhRCN8Xvg3hfhdrLnXcmZAeknODLHeVRmw4tWuHf26JgeuDesmMbTiyEax7DxZEw== X-Received: by 2002:a1c:1b41:: with SMTP id b62mr23483293wmb.53.1578971638083; Mon, 13 Jan 2020 19:13:58 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc08bbf.dynamic.kabel-deutschland.de. [188.192.139.191]) by smtp.gmail.com with ESMTPSA id w20sm16588476wmk.34.2020.01.13.19.13.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jan 2020 19:13:57 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Jan 2020 04:13:32 +0100 Message-Id: <20200114031336.24096-3-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200114031336.24096-1-andreas.rheinhardt@gmail.com> References: <20200114031336.24096-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] avformat/segafilmenc: Check early whether video is allowed 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" The current code only checks when writing the trailer whether the video format and Codec ID are actually compatible with the container. At this point, a lot of data will already have been written (in vain, of course), so check during the init function instead. Signed-off-by: Andreas Rheinhardt --- libavformat/segafilmenc.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/libavformat/segafilmenc.c b/libavformat/segafilmenc.c index 56fc59a811..bd7c03faf5 100644 --- a/libavformat/segafilmenc.c +++ b/libavformat/segafilmenc.c @@ -181,6 +181,17 @@ static int film_init(AVFormatContext *format_context) av_log(format_context, AV_LOG_ERROR, "Sega FILM allows a maximum of one video stream.\n"); return AVERROR(EINVAL); } + if (st->codecpar->codec_id != AV_CODEC_ID_CINEPAK && + st->codecpar->codec_id != AV_CODEC_ID_RAWVIDEO) { + av_log(format_context, AV_LOG_ERROR, + "Incompatible video stream format.\n"); + return AVERROR(EINVAL); + } + if (st->codecpar->format != AV_PIX_FMT_RGB24) { + av_log(format_context, AV_LOG_ERROR, + "Pixel format must be rgb24.\n"); + return AVERROR(EINVAL); + } film->video_index = i; } } @@ -293,11 +304,6 @@ static int film_write_header(AVFormatContext *format_context) } } - if (video->codecpar->format != AV_PIX_FMT_RGB24) { - av_log(format_context, AV_LOG_ERROR, "Pixel format must be rgb24.\n"); - return AVERROR(EINVAL); - } - /* First, write the FILM header; this is very simple */ ffio_wfourcc(pb, "FILM"); @@ -320,9 +326,6 @@ static int film_write_header(AVFormatContext *format_context) case AV_CODEC_ID_RAWVIDEO: ffio_wfourcc(pb, "raw "); break; - default: - av_log(format_context, AV_LOG_ERROR, "Incompatible video stream format.\n"); - return AVERROR(EINVAL); } avio_wb32(pb, video->codecpar->height);