From patchwork Sat Feb 20 16:37:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 25842 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 EE7D144B169 for ; Sat, 20 Feb 2021 18:37:37 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C434468A46B; Sat, 20 Feb 2021 18:37:37 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DA070687F71 for ; Sat, 20 Feb 2021 18:37:30 +0200 (EET) Received: by mail-ej1-f49.google.com with SMTP id w1so21606958ejf.11 for ; Sat, 20 Feb 2021 08:37:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=GILu03tCfa0i9xGlqAz6EpOLQqbHnYgnQWgLRX9FAb4=; b=deJ9htlJJEvYOmNFchi8wca4DrAeLqRgevPzfITiePLNtOklZTf+IgiZCIaqqjKbCS AavUyQlaX2bW98efIVwoC1i+tgVxWKsR8ErseCrNX3YzyA2s3PF7imh2MQYwIcFprbtC nQOv5N3HblCcRb/aA6t23LiLQMeO4r1dCmBiR8dZdGizylt3nISUUL9pNLJXnXMYtSSX WCnxs0Zyb2s9b4TXLISWKwTOWxBRVzXhBgzs8OhRJ5utWEh8zJNJ6Vgz6qLL1jQDOlI0 eveFh90VFzHU6VtQzjnV6FijprcMDaO0tKDgvYPUTZTo7xpuHBx2Qbdpv3dBIz6LN1YY //Qw== 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; bh=GILu03tCfa0i9xGlqAz6EpOLQqbHnYgnQWgLRX9FAb4=; b=ZSx/+AXwmegv6uH+ohTslZtsY9KkfKfSOqCP2LPmNo0qCm44owaXJ3ChP+gFdm1iGx vGmcW+jyVOki+Erk5Mg7xUZFwjFpxLTiwGOAxldsemUWAu++VKuECUQZf6x0fnfZKDUA RlB8hvyqpdDck8NacD8o2jk4LNLEvxbq/vx8UV2PSPxUulnySzjjO0jNMGo+kbPzl7ME ZkPMfDMkYGYAOVcXA8dCz41mKf4znTpUxhoLx3+2ElT3fRXfPJ2N6/BUd8St5Svg/zaN xX4Vab51xfQ7qHgWMgfsqlwnBY6dW4kCbv11it4GQTkT54VUTHcsY/3Ei4CDp5I5KRU5 e8RA== X-Gm-Message-State: AOAM530LiZswdvxoPGs/r6b/TX6RxZp4S93sJrfnTfGlOKLuZNTDRhlm t2yD5gkAsbF+fSUWC5//KDQxnBQRofusbg== X-Google-Smtp-Source: ABdhPJwb0dZtA436kpH7oh7i9iDu0IwArtnDXQQNfNdLBA3KAXwR4a1+V5OlAoP7FZaoZSwAgJeV6Q== X-Received: by 2002:a17:906:2e91:: with SMTP id o17mr10737177eji.488.1613839050356; Sat, 20 Feb 2021 08:37:30 -0800 (PST) Received: from localhost.localdomain ([94.250.162.225]) by smtp.gmail.com with ESMTPSA id y8sm7325300edd.97.2021.02.20.08.37.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Feb 2021 08:37:29 -0800 (PST) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Sat, 20 Feb 2021 17:37:18 +0100 Message-Id: <20210220163719.20482-1-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/dpxenc: write framerate to header 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" Signed-off-by: Paul B Mahol --- libavcodec/dpxenc.c | 21 ++++++++++++++++++--- tests/ref/lavf/gbrp10le.dpx | 4 ++-- tests/ref/lavf/gbrp12le.dpx | 4 ++-- tests/ref/lavf/rgb48le.dpx | 4 ++-- tests/ref/lavf/rgb48le_10.dpx | 4 ++-- tests/ref/lavf/rgba64le.dpx | 4 ++-- 6 files changed, 28 insertions(+), 13 deletions(-) diff --git a/libavcodec/dpxenc.c b/libavcodec/dpxenc.c index a5960334d5..b296f9f22e 100644 --- a/libavcodec/dpxenc.c +++ b/libavcodec/dpxenc.c @@ -173,14 +173,25 @@ static void encode_gbrp12(AVCodecContext *avctx, const AVFrame *pic, uint16_t *d } } +#define FILE_HEADER_SIZE 768 +#define IMAGE_HEADER_SIZE 640 +#define ORIENTATION_HEADER_SIZE 256 +#define FILM_INFO_HEADER_SIZE 256 +#define TV_INFO_HEADER_SIZE 128 +#define HEADER_SIZE (FILE_HEADER_SIZE + \ + IMAGE_HEADER_SIZE + \ + ORIENTATION_HEADER_SIZE + \ + FILM_INFO_HEADER_SIZE + \ + TV_INFO_HEADER_SIZE) + static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet) { DPXContext *s = avctx->priv_data; - int size, ret, need_align, len; + int ret, need_align, len; + int64_t size; uint8_t *buf; -#define HEADER_SIZE 1664 /* DPX Generic header */ if (s->bits_per_component == 10) size = avctx->height * avctx->width * 4; else if (s->bits_per_component == 12) { @@ -196,7 +207,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, need_align = size - len; size *= avctx->height; } - if ((ret = ff_alloc_packet2(avctx, pkt, size + HEADER_SIZE, 0)) < 0) + if ((ret = ff_alloc_packet2(avctx, pkt, HEADER_SIZE + size, 0)) < 0) return ret; buf = pkt->data; @@ -229,6 +240,10 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, write32(buf + 1628, avctx->sample_aspect_ratio.num); write32(buf + 1632, avctx->sample_aspect_ratio.den); + /* Film information header */ + if (avctx->framerate.num && avctx->framerate.den) + write32(buf + 1724, av_float2int(av_q2d(avctx->framerate))); + switch(s->bits_per_component) { case 8: case 16: diff --git a/tests/ref/lavf/gbrp10le.dpx b/tests/ref/lavf/gbrp10le.dpx index b33da34e20..7c03dc0779 100644 --- a/tests/ref/lavf/gbrp10le.dpx +++ b/tests/ref/lavf/gbrp10le.dpx @@ -1,3 +1,3 @@ -7ca935d5d5e00c54acbc85565d3039b6 *tests/data/images/gbrp10le.dpx/02.gbrp10le.dpx +c7c8ecd9d8c8a2c4dce6d92bfb9877d7 *tests/data/images/gbrp10le.dpx/02.gbrp10le.dpx tests/data/images/gbrp10le.dpx/%02d.gbrp10le.dpx CRC=0xe6663fba -407168 tests/data/images/gbrp10le.dpx/02.gbrp10le.dpx +407552 tests/data/images/gbrp10le.dpx/02.gbrp10le.dpx diff --git a/tests/ref/lavf/gbrp12le.dpx b/tests/ref/lavf/gbrp12le.dpx index e2e794ecc6..5ca855b004 100644 --- a/tests/ref/lavf/gbrp12le.dpx +++ b/tests/ref/lavf/gbrp12le.dpx @@ -1,3 +1,3 @@ -a4cfea1797c928f2eff73573e559675d *tests/data/images/gbrp12le.dpx/02.gbrp12le.dpx +79dcf3b32ed8e627a68bba19bf625ca5 *tests/data/images/gbrp12le.dpx/02.gbrp12le.dpx tests/data/images/gbrp12le.dpx/%02d.gbrp12le.dpx CRC=0x1c755633 -609920 tests/data/images/gbrp12le.dpx/02.gbrp12le.dpx +610304 tests/data/images/gbrp12le.dpx/02.gbrp12le.dpx diff --git a/tests/ref/lavf/rgb48le.dpx b/tests/ref/lavf/rgb48le.dpx index 073153898a..33817d95a9 100644 --- a/tests/ref/lavf/rgb48le.dpx +++ b/tests/ref/lavf/rgb48le.dpx @@ -1,3 +1,3 @@ -075963c3c08978b6a20555ba09161434 *tests/data/images/rgb48le.dpx/02.rgb48le.dpx +51c703863c9df1db5ef78a77dd5fbd0f *tests/data/images/rgb48le.dpx/02.rgb48le.dpx tests/data/images/rgb48le.dpx/%02d.rgb48le.dpx CRC=0xe5b9c023 -609920 tests/data/images/rgb48le.dpx/02.rgb48le.dpx +610304 tests/data/images/rgb48le.dpx/02.rgb48le.dpx diff --git a/tests/ref/lavf/rgb48le_10.dpx b/tests/ref/lavf/rgb48le_10.dpx index ce36e5079f..3c934168b7 100644 --- a/tests/ref/lavf/rgb48le_10.dpx +++ b/tests/ref/lavf/rgb48le_10.dpx @@ -1,3 +1,3 @@ -b9f22728f8ff393bf30cf6cbd624fa95 *tests/data/images/rgb48le_10.dpx/02.rgb48le_10.dpx +a0ca7132c33a5c0eb25dd4a2b6117743 *tests/data/images/rgb48le_10.dpx/02.rgb48le_10.dpx tests/data/images/rgb48le_10.dpx/%02d.rgb48le_10.dpx CRC=0xf38d5830 -407168 tests/data/images/rgb48le_10.dpx/02.rgb48le_10.dpx +407552 tests/data/images/rgb48le_10.dpx/02.rgb48le_10.dpx diff --git a/tests/ref/lavf/rgba64le.dpx b/tests/ref/lavf/rgba64le.dpx index b4092c9fd8..85974bbc98 100644 --- a/tests/ref/lavf/rgba64le.dpx +++ b/tests/ref/lavf/rgba64le.dpx @@ -1,3 +1,3 @@ -545603630f30dec2768c8ae8d12eb8ea *tests/data/images/rgba64le.dpx/02.rgba64le.dpx +cb5fe2ad9c1119a33916a838cb586c45 *tests/data/images/rgba64le.dpx/02.rgba64le.dpx tests/data/images/rgba64le.dpx/%02d.rgba64le.dpx CRC=0xe72ce131 -812672 tests/data/images/rgba64le.dpx/02.rgba64le.dpx +813056 tests/data/images/rgba64le.dpx/02.rgba64le.dpx From patchwork Sat Feb 20 16:37:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 25843 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 269B444B169 for ; Sat, 20 Feb 2021 18:37:39 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0C1C568A1C5; Sat, 20 Feb 2021 18:37:39 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 99F06687F71 for ; Sat, 20 Feb 2021 18:37:31 +0200 (EET) Received: by mail-ej1-f42.google.com with SMTP id do6so21766958ejc.3 for ; Sat, 20 Feb 2021 08:37:31 -0800 (PST) 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=D+6G89Qu1QCP5YKVGMHSzSdXK3sfZ2jZFplBUndq+Uw=; b=lMGoBAf+ZYT973TGE8JNRzAfLTU1eM8lfOcdz+FozrI+1KlFSUJ2Qrdhcx79ix+6vH GegYYHc/mYgQD7UUlYB+BoxkrNk6KPA6dO8XKlkecIxuprAjnITKxqNtRL51Xe7h2mMP alEpdC1plqH93KpQijGeOYbOvVLpiVwWKM0K+MBytO0uo5hzYGV8lZ3+TOWjIc1EgGlT vwNHiSzNoLMT0x3jJZKT5914WTMPmThHvisiRbbO+p46ovyEYMB0Ni3c0erCbP98xFkc TaRjg6CzpMLy62rABSMMV22/Nt/4g94RR/q8kSOiwt8MZUpEOILdlCPUmoN//lvUbDlI y9vQ== 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=D+6G89Qu1QCP5YKVGMHSzSdXK3sfZ2jZFplBUndq+Uw=; b=er+lkApkOap4E3sjJhioLIYujfXEjL4Kl5L7Wq3vc4YAYQOU9JIamqVBWKxs0Ix3BH DWddjAk4WHWCzwdwYOpRVwmuSj+7MMFyeSymi+S/rsszySrjP7Bji7PpqYqApqc2yeuK quUxOEgxZFGe5eJmSy9rqHof+2iklR9AFzPfkMz/ve2rQKbly9rBjQNvOZyZYi8RxT3b 34ve8nNQqV30nNV21FYgk/aIR3OsPdnYrQIp2acWJzSa/fXZz2ZYDooEkfMTiASW46Me yVV7JAFniPPQ5msuvbwpr5dH4+iWhkcwKerdtKTfctElQwVrIS70AseAeLsn0U4fp2KF bApg== X-Gm-Message-State: AOAM533zdHopz941afUaaGIBKNNXlNwaLjIxaclTDohnX/RWPTRzxM2u c1iwp/KpPHFDamgcWgDLgH6JJmU36+Y07w== X-Google-Smtp-Source: ABdhPJztXDxWFbdZ8V4pTX5yy74k6IpQrWSKkV7YYmeg25D/49SyaQ9wgYKC7P2KPhw7Ar9arhu6Gw== X-Received: by 2002:a17:906:5fcc:: with SMTP id k12mr6388098ejv.113.1613839051130; Sat, 20 Feb 2021 08:37:31 -0800 (PST) Received: from localhost.localdomain ([94.250.162.225]) by smtp.gmail.com with ESMTPSA id y8sm7325300edd.97.2021.02.20.08.37.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Feb 2021 08:37:30 -0800 (PST) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Sat, 20 Feb 2021 17:37:19 +0100 Message-Id: <20210220163719.20482-2-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210220163719.20482-1-onemda@gmail.com> References: <20210220163719.20482-1-onemda@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/dpx_parser: export framerate and timebase of frames 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" Also always skip pixel bytes. Signed-off-by: Paul B Mahol --- libavcodec/dpx_parser.c | 68 ++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/libavcodec/dpx_parser.c b/libavcodec/dpx_parser.c index 8e4a01e09d..ed7b085040 100644 --- a/libavcodec/dpx_parser.c +++ b/libavcodec/dpx_parser.c @@ -32,6 +32,7 @@ typedef struct DPXParseContext { ParseContext pc; uint32_t index; + uint32_t hsize; uint32_t fsize; uint32_t remaining_size; int is_be; @@ -43,14 +44,18 @@ static int dpx_parse(AVCodecParserContext *s, AVCodecContext *avctx, { DPXParseContext *d = s->priv_data; uint32_t state = d->pc.state; - int next = END_NOT_FOUND; - int i = 0; + int next = END_NOT_FOUND, i = 0; s->pict_type = AV_PICTURE_TYPE_I; + s->key_frame = 1; *poutbuf_size = 0; - if (buf_size == 0) - next = 0; + *poutbuf = NULL; + + if (s->flags & PARSER_FLAG_COMPLETE_FRAMES) { + next = buf_size; + goto flush; + } if (!d->pc.frame_start_found) { for (; i < buf_size; i++) { @@ -64,36 +69,53 @@ static int dpx_parse(AVCodecParserContext *s, AVCodecContext *avctx, } } d->pc.state = state; - } else { - if (d->remaining_size) { - i = FFMIN(d->remaining_size, buf_size); - d->remaining_size -= i; - if (d->remaining_size) - goto flush; + } else if (d->remaining_size) { + i = FFMIN(d->remaining_size, buf_size); + d->remaining_size -= i; + if (!d->remaining_size) { + d->pc.frame_start_found = 0; } + goto flush; } - for (; d->pc.frame_start_found && i < buf_size; i++) { + for (; i < buf_size; i++) { d->pc.state = (d->pc.state << 8) | buf[i]; d->index++; - if (d->index == 17) { + if (d->index == 5) { + d->hsize = d->is_be ? d->pc.state : av_bswap32(d->pc.state); + } else if (d->index == 17) { d->fsize = d->is_be ? d->pc.state : av_bswap32(d->pc.state); - if (d->fsize <= 1664) { + + if (d->fsize <= 1664 || d->fsize <= d->hsize) { d->pc.frame_start_found = 0; goto flush; } - if (d->fsize > buf_size - i + 19) - d->remaining_size = d->fsize - buf_size + i - 19; - else - i += d->fsize - 19; - break; - } else if (d->index > 17) { - if (d->pc.state == MKBETAG('S','D','P','X') || - d->pc.state == MKTAG('S','D','P','X')) { - next = i - 3; + if (d->hsize < 1728) { + if (d->fsize > buf_size - i + 19) { + d->remaining_size = d->fsize - buf_size + i - 19; + } else { + i += d->fsize - 19; + } break; } + } else if (d->index == 1725) { + uint32_t fps = d->is_be ? d->pc.state : av_bswap32(d->pc.state); + + avctx->framerate = av_d2q(av_int2float(fps), 4096); + avctx->time_base = av_inv_q(avctx->framerate); + + d->fsize -= d->index + 2; + if (d->fsize > buf_size - i) { + d->remaining_size = d->fsize - buf_size + i; + } else { + i += d->fsize; + } + break; + } else if (state == MKBETAG('S','D','P','X') || + state == MKTAG('S','D','P','X')) { + next = i - 3; + break; } } @@ -101,8 +123,6 @@ flush: if (ff_combine_frame(&d->pc, next, &buf, &buf_size) < 0) return buf_size; - d->pc.frame_start_found = 0; - *poutbuf = buf; *poutbuf_size = buf_size; return next;