From patchwork Mon Jul 30 23:35:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 9844 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:104:0:0:0:0:0 with SMTP id c4-v6csp4422073jad; Mon, 30 Jul 2018 16:38:06 -0700 (PDT) X-Google-Smtp-Source: AAOMgpejwzrES5dGjJiD1veeTDjdjqu3IzLw4++BJCtTZO11LqW39VLUT3OOo3z5zUnpwlsRJUxA X-Received: by 2002:adf:d142:: with SMTP id b2-v6mr19028358wri.17.1532993886833; Mon, 30 Jul 2018 16:38:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532993886; cv=none; d=google.com; s=arc-20160816; b=g+y1X5wIXvHmElOkSXlKDky2cUuUjPYYq1UyZ1On8IxQrsZiPZMVxNlm0ug+WmP+Nw MMeu0VmmIMf0lpEVYwp+Yfx1y9mUUV1Q8GnrCOBIFQzkbKp3YZwhc4UtbLIy+F84ti4o rfEmBLgW018KwlVUei6e+5GB16+m7NS1f3F89SiR28E//4HPvDltM4xp6qk8eOfcVbp6 w34Z1FTTGoLVRqz5tq2zq5I1Fvho282dsSfCzdQ6dvU4Wuq9OqrnG7irZWYqGxfOwK7S N9JS3N9WPqM8m3KCwUdPSrsaJmA9M0I+SHYNUSqzZTlVV/p0StqzA/AJwXJafMLj6ReZ NdKg== 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: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=7BE1FEntCn2tK3uvTbDs9c15EHSqUm8539EF4T18NbU=; b=Tfn30DfPdazhzLdTPsAsmmHq0jjuCOvjvQ2X9iL/FoJn1OJV+eBGmCRkoAaGroO5eR izaJjUFZ+9ceDZedAkUpmL35N0IurjHRhHwR+JumGgW65VmzgMeyMjky47mWLiOooxEE XVoWfRGuk8Xc+PvF5lVcbcOtTaT6JLOSSuCSigCHDTnjuDGIBy24wCcJthDLevTIfVp9 6YeNQ3HoL3At4GbibZzz75DHoB+UyhdYtzZWGeOSBSKPNE9THCIQ2qLyXl85gbWC68ag BpOoSe7XYnO8AW7Oj8Q99kbyRRZt6lUcZKy3coBMsaN7ImwVydgmNDFUhQ2KGe5ZVNYU Nvug== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b="YlKF/TY6"; 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 m10-v6si13312486wri.382.2018.07.30.16.38.06; Mon, 30 Jul 2018 16:38:06 -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="YlKF/TY6"; 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 BE76268A2DB; Tue, 31 Jul 2018 02:37:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f196.google.com (mail-qt0-f196.google.com [209.85.216.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 42B96689B55 for ; Tue, 31 Jul 2018 02:37:34 +0300 (EEST) Received: by mail-qt0-f196.google.com with SMTP id z8-v6so14055809qto.9 for ; Mon, 30 Jul 2018 16:37:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=oOxSEbsiCukY3jYcAAcNE/lHsotkTId9MVA865l+3rQ=; b=YlKF/TY6XZqCjWAp71rn9/PHWSG+MeN1EjifJgCcG3/bZGIz7aB3RfNqmKP3eEnQEf 6KSHynQCypkaDdGj4bPtdXFOtN9ql6/tYGLkyi8DXEYsDCB6b7N0+4XwkOQtGxCKKIXz 23J7yWJMO1BlNZ1VWBrV7UaA2IH9ziCN1AK1J/q9Qp3A2jLc7Q943wax3GFmWDKrS/Hz YmbQ9hexdnE7vx9J2wL9lV/g0sY9Qe38zFZlOQ3XGIS6FMK+3QY86t1UnNab7petIQAq uNS51Spv1vspFFUrDw+l+HJe2AM2y0r5Vyk8D8H/GQAUb2nz1h/OkE06LSUpexpVVACG vy3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=oOxSEbsiCukY3jYcAAcNE/lHsotkTId9MVA865l+3rQ=; b=Pto53vEa7Jw/lvloEdDyUbOQAh7LDq7J/YL/f/j4iloEnONPZ2ps465b7erEPZ3F7Q BqqTcER79zOZLVjJItBzrck+MUBeyRGVMpE+QRuxkOY3ZB/MrzOgfMzcd0LK66CedtAc VzLt9pSXlRyjXTcbMuEDRYA+eeEpCqKOyUMsdfVFgYH2eioDDHCJrfU+FnFzjchG3fdp EoAML6CCcLX1E9SPVFGvLvnOSNpFjtvSvaly1SDbrvc6LAX3kyrLJIc6iFHGdglg61y9 s7xjsI48O6wkOnDvaPqq7DLu4YgwSaQyVgBbdrrkWMd3xaHH2lGpIL5SOIxpBhRY9Rkr TFVA== X-Gm-Message-State: AOUpUlE+vMMDxEjj5mQrka6k2rypGuvrvUenXGjEBMLYVBB06F87+Ro3 fjmS3qlRLnkGQS5cyWC/IUrFzK0e X-Received: by 2002:a0c:881c:: with SMTP id 28-v6mr17257280qvl.109.1532993870017; Mon, 30 Jul 2018 16:37:50 -0700 (PDT) Received: from localhost.localdomain ([190.188.171.140]) by smtp.gmail.com with ESMTPSA id k190-v6sm7436435qkd.27.2018.07.30.16.37.49 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 30 Jul 2018 16:37:49 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 30 Jul 2018 20:35:40 -0300 Message-Id: <20180730233540.11100-2-jamrial@gmail.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180730233540.11100-1-jamrial@gmail.com> References: <542145de-a22d-2eb7-2148-3f8a16c358a3@ycbcr.xyz> <20180730233540.11100-1-jamrial@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/2] avformat/av1: reorder av1C OBUs before writting them 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Make sure Sequence Header is first, and only allow one of its kind. Signed-off-by: James Almer --- Both these patches should be applied before "[PATCH 5/5] avformat/matroskaenc: update AV1 support" Was not planning on sending them until https://github.com/AOMediaCodec/av1-isobmff/issues/50 and all the quoted issues were dealt with, but might as well just get this up to date to the current revision in the meantime. libavformat/av1.c | 61 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/libavformat/av1.c b/libavformat/av1.c index 7c55a100bf..14e2abd3ff 100644 --- a/libavformat/av1.c +++ b/libavformat/av1.c @@ -79,33 +79,72 @@ int ff_av1_filter_obus_buf(const uint8_t *buf, uint8_t **out, int *size) int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size) { + AVIOContext *seq_pb = NULL, *meta_pb = NULL; + uint8_t *seq = NULL, *meta = NULL; int64_t obu_size; int start_pos, type, temporal_id, spatial_id; + int ret, nb_seq = 0, seq_size, meta_size; if (size <= 0) return AVERROR_INVALIDDATA; + ret = avio_open_dyn_buf(&seq_pb); + if (ret < 0) + return ret; + ret = avio_open_dyn_buf(&meta_pb); + if (ret < 0) + goto fail; + while (size > 0) { - int ret = parse_obu_header(buf, size, &obu_size, &start_pos, + int len = parse_obu_header(buf, size, &obu_size, &start_pos, &type, &temporal_id, &spatial_id); - if (ret < 0) - return ret; - - obu_size += start_pos; - if (obu_size > INT_MAX) - return AVERROR_INVALIDDATA; + if (len < 0) { + ret = AVERROR_INVALIDDATA; + goto fail; + } switch (type) { case AV1_OBU_SEQUENCE_HEADER: + nb_seq++; + + if (!obu_size || nb_seq > 1) { + ret = AVERROR_INVALIDDATA; + goto fail; + } + avio_write(seq_pb, buf, len); + break; case AV1_OBU_METADATA: - avio_write(pb, buf, obu_size); + if (!obu_size) { + ret = AVERROR_INVALIDDATA; + goto fail; + } + avio_write(meta_pb, buf, len); break; default: break; } - size -= obu_size; - buf += obu_size; + size -= len; + buf += len; } - return 0; + seq_size = avio_close_dyn_buf(seq_pb, &seq); + if (!seq_size) { + ret = AVERROR_INVALIDDATA; + goto fail; + } + avio_write(pb, seq, seq_size); + + meta_size = avio_close_dyn_buf(meta_pb, &meta); + if (meta_size) + avio_write(pb, meta, meta_size); + +fail: + if (!seq) + avio_close_dyn_buf(seq_pb, &seq); + if (!meta) + avio_close_dyn_buf(meta_pb, &meta); + av_free(seq); + av_free(meta); + + return ret; }