From patchwork Wed Apr 4 23:43:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 8335 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp5440140jad; Wed, 4 Apr 2018 16:44:08 -0700 (PDT) X-Google-Smtp-Source: AIpwx490o4znfI9jt+OoVzDcRyZXAf6FIRaHa8ICXyiPKQJZwNfZ3zRQa1O8Bm8ke/AoGAJvgRiy X-Received: by 10.223.195.58 with SMTP id n55mr13365873wrf.132.1522885447942; Wed, 04 Apr 2018 16:44:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522885447; cv=none; d=google.com; s=arc-20160816; b=gNpGNE3CUbEvtT9Vflb5wi1iaRuE2xBeY16oPvSkMhMvcmD1bNjPG9SdAGZW8XOir8 PFOgsZt7dL4JFSR4ZAshQQhz5JANAYe/uUwUK7hvOhiAmWAjCkLRco6ZktKkLBcf0Ogv cPXoe5SiypB8V6IR6+7JY48uyRRO/Hf/c9IIaC0GvUh9th46YZQaPvi6HN/rEBDfi27W oCNBJ8EOYEZUlROc1jQfsnd5ibtlaJV6pIwGkkDXsIGGfqOe9+BI280TeFL4epALGsBl osfKgivPmj4iifhsc71iqrMHNuOtpC5+iO415vo8DWpLFCf8ltZtaI1Kq+SPYlwUXNpV jjbA== 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=r7quACzI6sJGIHw9kwglco12ljT4fqZkmOAamBk+LPc=; b=swHs4HBLSFC8zAeKQMkUoPR2mBjJuxo1dPEMeHxAf7ZIb9Jn9yilAmFLMVN7TuVxsJ vPEJ3PXCRh+rpA6vFiOsURJNaXiraaPBztBtrr8Bbgjwi1M8LT3pAT9SSrfcgOT+m0a/ I5NWV6h0ioVFoWr2cbzTBdLdko1DPVr+hZOV26aDpg+iEZBMtIOTkzQFXIQg4aWEVCFt 2zqqL1EGLeUgOdJ5lHh0rfvffoyRINIo4JSo6BEQzrE5jtyUL2oKCoQvn3n0/UG7I9jK VxFi47lJkpYPh1dbufSryyA98sivYlk8stHUFoI/v1DfkJoNtLqKFVv8fdk8xoiXKAg0 3Gyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Atg5zV8r; 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 i84si3215492wmc.198.2018.04.04.16.44.07; Wed, 04 Apr 2018 16:44:07 -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=Atg5zV8r; 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 A4556689E17; Thu, 5 Apr 2018 02:43:36 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f196.google.com (mail-qk0-f196.google.com [209.85.220.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3507B68972B for ; Thu, 5 Apr 2018 02:43:30 +0300 (EEST) Received: by mail-qk0-f196.google.com with SMTP id v2so24486929qkh.10 for ; Wed, 04 Apr 2018 16:43: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=UNTErw8SYDrkb+HngsQ39c0OswEV0ho7r1cGTfI5d8o=; b=Atg5zV8rYpK95lNpY9Xt3pX090mnM+6hIEXYFU/UTHgQQjS1NIFgTWippQqF+gJK9e XtdMtNpJYwGZalgW+qbJe2wAmAvaz6o2da1DKotFF9Pjqd2dLHXgPtttr29FiiS/l8Xc mFpWrEtSa7yGAdaINfMV3B5zMVgOfhKhUZxXYRvmeK9siODI7v5GpLHd0UqBJbNXQVUc gTnVuZXUgLgZh3DWBVCFyumFXEbC3HoHX0DBInxnTmyd2q5PmK5fzx5sxlMPKBx64BLO YasUICnlwAUyKdcVssNvo+ZNPz3VEongh+oQozoHM+XmD8KH00TqqclTvNHArykAztDS HtGA== 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=UNTErw8SYDrkb+HngsQ39c0OswEV0ho7r1cGTfI5d8o=; b=NeWh4GtDUHTgzDmrX3jGrky9GcWkTn1zI2LEDiIwZulRIAlyvnTrbM/quRtVswaeU8 IUI2oejyP01barME10qq0Qm2ERnUkPKblCa+QDRNz+ou8BknmQMil/O7znMOvqPG74PO 1KUjhELYXJFL1FoI2dPihDwDvp3q/u43Kj91Oie+SGtPOo+QLlYY53Vm3tB/YVNq84vN tNzQ4/kYqv7SyWm9x63pHPOJiY96ah2K0mBMbk1xulBrFWASImwO2hT6T8M28gxhy0yw uVU//fpUrQYE3BuFqey8jrhl0UwqGCXlHlnQv9WsHEy6aGoU2KTwofViW3r+h41ZxAJI V7Xg== X-Gm-Message-State: ALQs6tB0Et/6Sz4o3Lk6L4rO+ZY7Mfa5SidhnuvK6Gkb2ABscGXR4sPE RYTdMpgD/Jeaw9v5QGlpVkNvFQ== X-Received: by 10.55.16.130 with SMTP id 2mr27655880qkq.110.1522885430390; Wed, 04 Apr 2018 16:43:50 -0700 (PDT) Received: from localhost.localdomain ([190.188.171.140]) by smtp.gmail.com with ESMTPSA id a11sm1924200qtc.3.2018.04.04.16.43.49 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 04 Apr 2018 16:43:49 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 4 Apr 2018 20:43:33 -0300 Message-Id: <20180404234334.9052-2-jamrial@gmail.com> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180404234334.9052-1-jamrial@gmail.com> References: <20180404234334.9052-1-jamrial@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/3] avformat/matroskadec: factor the prores packet parsing code out 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" Simplifies code in matroska_parse_frame(). This is in preparation for the following patch. Signed-off-by: James Almer --- Prores specific stuff untested, as FATE doesn't cover it. libavformat/matroskadec.c | 50 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 029929a1cb..e74db4ff1b 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3035,6 +3035,29 @@ fail: return ret; } +static int matroska_parse_prores(MatroskaTrack *track, uint8_t *src, + uint8_t **pdst, int *size) +{ + uint8_t *dst = src; + int dstlen = *size; + + if (AV_RB32(&src[4]) != MKBETAG('i', 'c', 'p', 'f')) { + uint8_t *dst = av_malloc(dstlen + 8); + if (!dst) + return AVERROR(ENOMEM); + + AV_WB32(dst, dstlen); + AV_WB32(dst + 4, MKBETAG('i', 'c', 'p', 'f')); + memcpy(dst + 8, src, dstlen); + dstlen += 8; + } + + *pdst = dst; + *size = dstlen; + + return 0; +} + static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, MatroskaTrack *track, AVStream *st, @@ -3160,7 +3183,7 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, { MatroskaTrackEncoding *encodings = track->encodings.elem; uint8_t *pkt_data = data; - int offset = 0, res; + int res; AVPacket pktl, *pkt = &pktl; if (encodings && !encodings->type && encodings->scope & 1) { @@ -3182,23 +3205,26 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, pkt_data = wv_data; } - if (st->codecpar->codec_id == AV_CODEC_ID_PRORES && - AV_RB32(&data[4]) != MKBETAG('i', 'c', 'p', 'f')) - offset = 8; + if (st->codecpar->codec_id == AV_CODEC_ID_PRORES) { + uint8_t *pr_data; + res = matroska_parse_prores(track, pkt_data, &pr_data, &pkt_size); + if (res < 0) { + av_log(matroska->ctx, AV_LOG_ERROR, + "Error parsing a prores block.\n"); + goto fail; + } + if (pkt_data != data) + av_freep(&pkt_data); + pkt_data = pr_data; + } /* XXX: prevent data copy... */ - if (av_new_packet(pkt, pkt_size + offset) < 0) { + if (av_new_packet(pkt, pkt_size) < 0) { res = AVERROR(ENOMEM); goto fail; } - if (st->codecpar->codec_id == AV_CODEC_ID_PRORES && offset == 8) { - uint8_t *buf = pkt->data; - bytestream_put_be32(&buf, pkt_size); - bytestream_put_be32(&buf, MKBETAG('i', 'c', 'p', 'f')); - } - - memcpy(pkt->data + offset, pkt_data, pkt_size); + memcpy(pkt->data, pkt_data, pkt_size); if (pkt_data != data) av_freep(&pkt_data);