From patchwork Thu Apr 5 15:30:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 8339 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp6182626jad; Thu, 5 Apr 2018 08:32:08 -0700 (PDT) X-Google-Smtp-Source: AIpwx48k0v+AaHnc5FSFVM9IjdDYrJ045IXGjrj1UBrMJUcG1msyQ0LlV7McFm6HdDGjO4Lns3+L X-Received: by 10.223.150.161 with SMTP id u30mr16049786wrb.151.1522942328139; Thu, 05 Apr 2018 08:32:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522942328; cv=none; d=google.com; s=arc-20160816; b=yDyI/BozTPUetACBbDapgVfqyZLQKrOl70rPuAcYzUHqtEAcysN/YrtPJsNqNAU0lB 0MU+xE/haOAhmniQT8flfdIpIhXJ4+CMcqm4eRtzXaDnuf/dK3JVL86byRb2o2q9/rbe DXYQGXoyMltqIDU2xO5HT3COKLEuGFqu85pjvr+j2Xdn/1RG77cKNR71BPf8nKZbGMDK CfCeTw2UpWDT6GlubPlzoEfLrkoxeY+1Bw/1zLa3IlZzr0dEuP5iGUuoouHsORweEthW x8lv++y/MYtoD1d93qHu/51v9hAr5lVbSoc/HWmgcqrkaT/6J2Zq9ZO+/GBJGgfuRpYT t9tw== 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=+Z+98U+CDvy401bE7yP0CeMiKGTZ8YTF/d43mUnRB6I=; b=PV3srxYbHWxukSk7N8c6VpaUdNELk8aXO4GidKYj4wbfWZLhJ1ClEGCa/EMYVKhhYy SKFLPhtfT6JoS/nWjbLe6OBaZzG+8DTjp5T6L2LVhi0AXMWdKDatYud6e8MWkmkylMJI aBl6hVlsUlFWtTRQgSRdDM6Fp+wQGgSbijwiUluXPQU4FAK/y+jYlwzygXWpkL4rF/UP dbM8k5IG3S8Ki10UoWGjfJ+eIo4L/AE8QX2yWEFnwyy+nsB68r7ZZyKaEV9Dgtzr+W81 eoJbnKPDR74qZcnjMM5vSXZW42MGDE2aQggvxXLA318gLV1MAX8wmXKGJa0wMueB9fVr YnMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=gp5bO1Kw; 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 b45si6009618wrb.498.2018.04.05.08.32.07; Thu, 05 Apr 2018 08:32:08 -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=gp5bO1Kw; 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 D94EB689CDC; Thu, 5 Apr 2018 18:31:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f195.google.com (mail-qk0-f195.google.com [209.85.220.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4481F6898D4 for ; Thu, 5 Apr 2018 18:31:38 +0300 (EEST) Received: by mail-qk0-f195.google.com with SMTP id s78so26745672qkl.8 for ; Thu, 05 Apr 2018 08:31:59 -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=/c0vgdBYjymh1CusGD8YiUOZXH9Ziv+sKIObNlWhZZs=; b=gp5bO1KwWM+eDHxF/4iiGvO2jR2jcGNBBJVC5S575ZDqoZRkbHM1CDaw2c6Fk/qn0G nJuNMXLIo+gqt537RlpuCyc7pFi3Gzze6zKVGGeSPmmQxROoDPF3OgYkpZVe/I9ksYKj zpVpATAVzACkkxEV8lZT9iXEyvxcqh989G7sJjSulhGJE6RchYP/lQfQZ0AcEqaW/ivS v5PcSMUyXTbBKtufk6Poz778Zw2hFvMwBYf+pBSEd1F+Vp+BPdZnoxHDPCldQ04xcUR0 KKCs0BLKs7qNUlAJT268sS+gQ32lXcstAy5S5C2RQQxRhappXlHH1cb+3sBs+gkUJfDo mgVA== 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=/c0vgdBYjymh1CusGD8YiUOZXH9Ziv+sKIObNlWhZZs=; b=HO3IiFzEmpvdVuVyZY6y52RjThA0WAa6qG3lLmDM20GAlfLEOxlvtiGNpMZRgHh+2c gVXKZJOw8ZtqowMWer8O/2GpMZ+6XtQ8rbmeINUOPJ7L3hr1NIfDPl8p/p7o7kKTFNxm BX33s3N4v0g0MNCcyfnXPyDjHVhnRF4/IRxcdcgr2vMz5jitGXpyJzNDMD36zKXC2TY0 GGw4nNWkquyihdKjz67cwxy/SLd5jQPinSdUSgv5ockMtW2lr2tljNP7YuXnTHeBZNSQ UYDj5Uk/txVzxVcTTWODJtMWqQ3Su8s423jYXXGeSFWT0vs4xvsV4T8wCraFEXDm6X/P GHtA== X-Gm-Message-State: ALQs6tAJTcYatHqxCRQTjclLpg50YFiWzxMPvacQWwettkdCa+8QrXjL /L5qGtElbgxuThWYeZoDAkuWyQ== X-Received: by 10.55.31.204 with SMTP id n73mr30616967qkh.38.1522942318574; Thu, 05 Apr 2018 08:31:58 -0700 (PDT) Received: from localhost.localdomain ([190.188.171.140]) by smtp.gmail.com with ESMTPSA id y2sm5975763qkj.32.2018.04.05.08.31.57 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 05 Apr 2018 08:31:57 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 5 Apr 2018 12:30:59 -0300 Message-Id: <20180405153059.4204-1-jamrial@gmail.com> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180405144244.GA20131@michaelspb> References: <20180405144244.GA20131@michaelspb> Subject: [FFmpeg-devel] [PATCH 2/3 v2] 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 --- Not overloading dst this time... libavformat/matroskadec.c | 50 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 029929a1cb..30f0da5bee 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')) { + 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);