From patchwork Thu Dec 10 12:27:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harry Mallon X-Patchwork-Id: 24512 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 5F61544BD60 for ; Thu, 10 Dec 2020 14:27:30 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3BF86689CC9; Thu, 10 Dec 2020 14:27:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C9CD5688093 for ; Thu, 10 Dec 2020 14:27:23 +0200 (EET) Received: by mail-wm1-f45.google.com with SMTP id e25so5119647wme.0 for ; Thu, 10 Dec 2020 04:27:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codex.online; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=HiGyMUll8UYNCw3Rp5JCjnpK5LvXr/rWaZxKotr0jEw=; b=juivgLmRdP4KF0gpyiTudLGQLbLN0UulqzJoUSHBFjUCm5iaGv5Waxl9JSfPxSFTqC J8CScGa5Z2inPSzBafDuK6LTth4rTw/dStYqhWN9+ZgmHZv9a3n9Y/nQroiFqSgAf96q vMnzef4eTEmwu1iPfM/BF/XewrFGEhrfvwHNU= 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:mime-version:content-transfer-encoding; bh=HiGyMUll8UYNCw3Rp5JCjnpK5LvXr/rWaZxKotr0jEw=; b=bpfn+q1yegLbt3VL1luJMlsjnzdqvLpVUDSUSb4uo/9bKjGyE1bjbONvPs+/ie2smI tEu8v/xe3q4evnt5F962MKd9KQcgQFtllYSQd5nydGJxdCgGie/ZHdgGi2JJW/3OJnXJ tcyOIflk6yTW0JqL7Zlu/kgesT2t6i5elHPp8TS00depIpR+0dne92Hvt6wU9fye5zKH g2TfdqBzaG9/UqEjMClVttR6wZLLqhVovlcvSo6ab7G19c9Np5e1SQQDJUHhLB4FEPQu Yv3oKL0/dPluctkGBx+ebAPsQxPSYvUsQ3rZjMywHHZgHJ/ydvGN3k7HHlFFgR9xARsB nbUw== X-Gm-Message-State: AOAM531uIr6t6POxy3aCse9ZqWKgoIpCMmcHXGv+e1QaEiNSc9Rvwo9f WLW9MjhFflVX1V3pd9lmaa7thF8JDqg52Jer X-Google-Smtp-Source: ABdhPJyN6gXP7XGH17buQzn+hAAGmC9G+SCKk0CgokEYySltJzNSCKZ9+8pW34cfHYuABkLwvFBgNQ== X-Received: by 2002:a7b:cc16:: with SMTP id f22mr8050991wmh.154.1607603242857; Thu, 10 Dec 2020 04:27:22 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id 90sm9365034wrl.60.2020.12.10.04.27.22 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 10 Dec 2020 04:27:22 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Dec 2020 12:27:13 +0000 Message-Id: <20201210122718.74374-1-harry.mallon@codex.online> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201207103214.75790-1-harry.mallon@codex.online> References: <20201207103214.75790-1-harry.mallon@codex.online> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/6] fate: Add dpx-probe test 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Harry Mallon --- tests/fate/image.mak | 4 ++ tests/ref/fate/dpx-probe | 85 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 tests/ref/fate/dpx-probe diff --git a/tests/fate/image.mak b/tests/fate/image.mak index 22072a62f1..a24c054c25 100644 --- a/tests/fate/image.mak +++ b/tests/fate/image.mak @@ -97,6 +97,10 @@ fate-dpx: CMD = framecrc -i $(TARGET_SAMPLES)/dpx/lighthouse_rgb48.dpx FATE_SAMPLES_AVCONV-$(call PARSERDEMDEC, DPX, IMAGE2PIPE, DPX) += fate-dpxparser fate-dpxparser: CMD = framecrc -f image2pipe -i $(TARGET_SAMPLES)/dpx/lena_4x_concat.dpx -sws_flags +accurate_rnd+bitexact +FATE_IMAGE-$(call DEMDEC, IMAGE2, DPX) += fate-dpx-probe +fate-dpx-probe: SRC = $(TARGET_SAMPLES)/dpx/cyan.dpx +fate-dpx-probe: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_streams -show_frames -print_format default -bitexact -v 0 -i "$(SRC)" | sed -e "s/gbrp10le/gbrp10/" + FATE_EXR += fate-exr-slice-raw fate-exr-slice-raw: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgba_slice_raw.exr -pix_fmt gbrapf32le diff --git a/tests/ref/fate/dpx-probe b/tests/ref/fate/dpx-probe new file mode 100644 index 0000000000..0f9ac9e633 --- /dev/null +++ b/tests/ref/fate/dpx-probe @@ -0,0 +1,85 @@ +[FRAME] +media_type=video +stream_index=0 +key_frame=1 +pkt_pts=0 +pkt_pts_time=0.000000 +pkt_dts=0 +pkt_dts_time=0.000000 +best_effort_timestamp=0 +best_effort_timestamp_time=0.000000 +pkt_duration=1 +pkt_duration_time=0.040000 +pkt_pos=0 +pkt_size=8768 +width=16 +height=9 +pix_fmt=gbrp10 +sample_aspect_ratio=1:1 +pict_type=? +coded_picture_number=0 +display_picture_number=0 +interlaced_frame=0 +top_field_first=0 +repeat_pict=0 +color_range=unknown +color_space=unknown +color_primaries=unknown +color_transfer=unknown +chroma_location=unspecified +TAG:Creator=Apple Compressor +TAG:Input Device= +[/FRAME] +[STREAM] +index=0 +codec_name=dpx +profile=unknown +codec_type=video +codec_time_base=1/24 +codec_tag_string=[0][0][0][0] +codec_tag=0x0000 +width=16 +height=9 +coded_width=16 +coded_height=9 +closed_captions=0 +has_b_frames=0 +sample_aspect_ratio=1:1 +display_aspect_ratio=16:9 +pix_fmt=gbrp10 +level=-99 +color_range=unknown +color_space=unknown +color_transfer=unknown +color_primaries=unknown +chroma_location=unspecified +field_order=unknown +timecode=N/A +refs=1 +id=N/A +r_frame_rate=24/1 +avg_frame_rate=0/0 +time_base=1/25 +start_pts=N/A +start_time=N/A +duration_ts=N/A +duration=N/A +bit_rate=N/A +max_bit_rate=N/A +bits_per_raw_sample=10 +nb_frames=N/A +nb_read_frames=1 +nb_read_packets=N/A +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +[/STREAM] From patchwork Thu Dec 10 12:27:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harry Mallon X-Patchwork-Id: 24513 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 5657044BD60 for ; Thu, 10 Dec 2020 14:27:32 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 386E0689FB2; Thu, 10 Dec 2020 14:27:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 18EF9688392 for ; Thu, 10 Dec 2020 14:27:25 +0200 (EET) Received: by mail-wr1-f65.google.com with SMTP id l9so5257473wrt.13 for ; Thu, 10 Dec 2020 04:27:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codex.online; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=8xuj+E2Q1IXOKhHjid9Ll1yWhYU15W16GWXRJRmdR5A=; b=XfQJwtks875Yi3MrRPGkl6ej8D7EtVqR3rMeYGhSDNIGxIEVTZI55KkpWQhltSAzdu hfBoKyFnlLCie/NMJpuyx1Q5cjuDtYxGX7w9XLQYwEaMa5uER5XcDTlHCjsf1OTb1Nac MI1DGu+JLdLR75X5GapwNumRG8op13Ucsha+s= 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:mime-version:content-transfer-encoding; bh=8xuj+E2Q1IXOKhHjid9Ll1yWhYU15W16GWXRJRmdR5A=; b=Ru1MT/BUz//pJeIGPPJ62qJnftlTl1lDpLsRAcMWtKXbA4U3dU397ZytwjfuK9zMj4 AUoIfl9gcTUb7Nn52nU6Q2ryAtZvBB6RBLZF4ViHrmDDSoPSmkoNW7/2Gxu4B0qjiNkJ QZ4d6OT0WxZa1HaJYZ96KlBx4W58a0F/wObVpi3UmvBLPuZw27NhdmSc/n+BjdJf0G0o UOVZoN6wE+vfQGHAexCNDL6g805ZwjNaeNiREPGki/fFA+oRQCK+QnUJ1MwyurOl2ncd +aAd5yu492Cedx57es5LKw1eSoAGrw1AL9IMvmCkESJHeOEPADSZrtBZGPm0PMbgZuEa HD6Q== X-Gm-Message-State: AOAM530Bh4R9GGzCZVrFmvVXrNepXqruOXZXH2l3RQoM9LK1TTYsN2C4 Z+W99pC9g+7kowdd2ROuwlqhmlDb+0DflWpA X-Google-Smtp-Source: ABdhPJxDc3kFtVh/Fguh3esP8wB3Bm0+WABJm4XLNO3MaXnM5AdvtrRJ88Ki4zEV1dn5y/cGNYL+EA== X-Received: by 2002:adf:f08a:: with SMTP id n10mr7917213wro.142.1607603244281; Thu, 10 Dec 2020 04:27:24 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id h184sm9870628wmh.23.2020.12.10.04.27.23 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 10 Dec 2020 04:27:23 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Dec 2020 12:27:14 +0000 Message-Id: <20201210122718.74374-2-harry.mallon@codex.online> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201210122718.74374-1-harry.mallon@codex.online> References: <20201207103214.75790-1-harry.mallon@codex.online> <20201210122718.74374-1-harry.mallon@codex.online> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/6] avcodec/dpx: Read alternative frame rate from television 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Harry Mallon --- libavcodec/dpx.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c index b1833ed9ef..7e3ac0af2e 100644 --- a/libavcodec/dpx.c +++ b/libavcodec/dpx.c @@ -216,10 +216,23 @@ static int decode_frame(AVCodecContext *avctx, else avctx->sample_aspect_ratio = (AVRational){ 0, 1 }; + /* preferred frame rate from Motion-picture film header */ if (offset >= 1724 + 4) { buf = avpkt->data + 1724; i = read32(&buf, endian); - if(i) { + if(i && i != 0xFFFFFFFF) { + AVRational q = av_d2q(av_int2float(i), 4096); + if (q.num > 0 && q.den > 0) + avctx->framerate = q; + } + } + + /* alternative frame rate from television header */ + if (offset >= 1940 + 4 && + !(avctx->framerate.num && avctx->framerate.den)) { + buf = avpkt->data + 1940; + i = read32(&buf, endian); + if(i && i != 0xFFFFFFFF) { AVRational q = av_d2q(av_int2float(i), 4096); if (q.num > 0 && q.den > 0) avctx->framerate = q; From patchwork Thu Dec 10 12:27:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harry Mallon X-Patchwork-Id: 24517 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 6C74D44B21B for ; Thu, 10 Dec 2020 14:35:33 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 514A26899A9; Thu, 10 Dec 2020 14:35:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 057F5688392 for ; Thu, 10 Dec 2020 14:35:27 +0200 (EET) Received: by mail-wr1-f49.google.com with SMTP id t4so5284026wrr.12 for ; Thu, 10 Dec 2020 04:35:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codex.online; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=df4S3pYa4zXRnHXYkCDe13CPFylVSbDzkWvOIZmzMQE=; b=ocBngpJgI2TS4RI6Y7cgW8zgZCnxJBYnBiX/rKU2QhR6U+T4RWnBY/T5CJwr2S9blB UOQGwB8zKci8lEpSX3aLGDRFbfBdWKDLYZiJr+1WJ+ZtcCP2fREBIMjFIL+LO56MtbBP k2EyCk9v0S7adq+bfsaGeYm8DXZKulE+SvsS0= 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:mime-version:content-transfer-encoding; bh=df4S3pYa4zXRnHXYkCDe13CPFylVSbDzkWvOIZmzMQE=; b=f2dwkTj+Nfawt/OUmyEXOEW10Xmze1FtWpAWBkmH15rPlha2glgvCkEKzFLmtBALNb NeHxhonFZ31x6MIlTykTPaZArDGxMJsa62NFnIH4VxLFw6UiEbge/uCOyy74GOc3pRX6 xpw5LHBDAHTcabrgLp3exTrIA01H4+Hhp6LA+Gl8FHJfvSYEFz/zToVYWH3ziuZr/9uT KNXF1BW0XeYhSZx8Fvnym6MUf8R4uFuamyls7agPwfemX38StniWf2USP61RFMr3mMZl heizpZkZb+V0e8dvPqciPIUAeIgvPTqSKD75touMbJ3t85pJc0cpjs4hRsvVvIgrBeRR Q9xA== X-Gm-Message-State: AOAM533mxbUjogOn40eLDSKWWhLt9bJgSlcS6oHAehMGeJppZOLSB4Kd /4WLhGyXSxWI4/rvVcoPUoKl8sZHJc8qY4BH X-Google-Smtp-Source: ABdhPJxS2SdGBmJ3IrxQ5gqiaCaTvQBAd3m60l/83TO43ih7OqcnwH8aloS8GwLa6WfcxfxxEa3gKw== X-Received: by 2002:a5d:6ccc:: with SMTP id c12mr8093758wrc.4.1607603245660; Thu, 10 Dec 2020 04:27:25 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id x66sm8280893wmg.26.2020.12.10.04.27.24 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 10 Dec 2020 04:27:25 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Dec 2020 12:27:15 +0000 Message-Id: <20201210122718.74374-3-harry.mallon@codex.online> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201210122718.74374-1-harry.mallon@codex.online> References: <20201207103214.75790-1-harry.mallon@codex.online> <20201210122718.74374-1-harry.mallon@codex.online> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/6] avcodec/dpx: Read SMPTE timecode from DPX 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Harry Mallon --- libavcodec/dpx.c | 29 +++++++++++++++++++++++++++++ tests/ref/fate/dpx-probe | 7 +++++++ 2 files changed, 36 insertions(+) diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c index 7e3ac0af2e..51428459ef 100644 --- a/libavcodec/dpx.c +++ b/libavcodec/dpx.c @@ -23,6 +23,7 @@ #include "libavutil/intreadwrite.h" #include "libavutil/intfloat.h" #include "libavutil/imgutils.h" +#include "libavutil/timecode.h" #include "bytestream.h" #include "avcodec.h" #include "internal.h" @@ -239,6 +240,34 @@ static int decode_frame(AVCodecContext *avctx, } } + /* SMPTE TC from television header */ + if (offset >= 1920 + 4) { + uint32_t tc; + uint32_t *tc_sd; + char tcbuf[AV_TIMECODE_STR_SIZE]; + + buf = avpkt->data + 1920; + // read32 to native endian, av_bswap32 to opposite of native for + // compatibility with av_timecode_make_smpte_tc_string2 etc + tc = av_bswap32(read32(&buf, endian)); + + if (i != 0xFFFFFFFF) { + AVFrameSideData *tcside = + av_frame_new_side_data(p, AV_FRAME_DATA_S12M_TIMECODE, + sizeof(uint32_t) * 4); + if (!tcside) + return AVERROR(ENOMEM); + + tc_sd = (uint32_t*)tcside->data; + tc_sd[0] = 1; + tc_sd[1] = tc; + + av_timecode_make_smpte_tc_string2(tcbuf, avctx->framerate, + tc_sd[1], 0, 0); + av_dict_set(&p->metadata, "timecode", tcbuf, 0); + } + } + switch (descriptor) { case 6: // Y elements = 1; diff --git a/tests/ref/fate/dpx-probe b/tests/ref/fate/dpx-probe index 0f9ac9e633..81718326d6 100644 --- a/tests/ref/fate/dpx-probe +++ b/tests/ref/fate/dpx-probe @@ -27,8 +27,15 @@ color_space=unknown color_primaries=unknown color_transfer=unknown chroma_location=unspecified +TAG:timecode=00:00:01:18 TAG:Creator=Apple Compressor TAG:Input Device= +[SIDE_DATA] +side_data_type=SMPTE 12-1 timecode +[TIMECODE] +value=00:00:01:18 +[/TIMECODE] +[/SIDE_DATA] [/FRAME] [STREAM] index=0 From patchwork Thu Dec 10 12:27:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harry Mallon X-Patchwork-Id: 24514 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 55F8944BD60 for ; Thu, 10 Dec 2020 14:27:34 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3969F689F63; Thu, 10 Dec 2020 14:27:34 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C9BD768A03E for ; Thu, 10 Dec 2020 14:27:27 +0200 (EET) Received: by mail-wr1-f52.google.com with SMTP id r14so5282042wrn.0 for ; Thu, 10 Dec 2020 04:27:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codex.online; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=I29OC4PI2pTwaaVYCAKDjPTHcp6gB/NArZzBzOv+sdI=; b=ZrbjD84NIR+tUlAbiJPcIyIs3zssAJ/4SjnsqInvtjYRhVXslvTTLH4gTdI2plZFBG YWx1+3NywYafR0wrimbtGAuR+wwxrDQRJ8wq+XI+uVCuFWqFUfJ9+3/kr8Zlypie5/Np jplVguwJeONp/+sX5P+wNk2udWceN6ehrmQ5U= 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:mime-version:content-transfer-encoding; bh=I29OC4PI2pTwaaVYCAKDjPTHcp6gB/NArZzBzOv+sdI=; b=Uh3RrtEXyCnmk3QGncgXfWjwBn3X1vbi7chqb658qs35P3N42eZcTJTULAPVqFJgNn urLsotfI3dLdxkaCs4naAfmGZdDV3NE2bNHrjVkKShCk1On8FVEelz+SWtAZCXd7FPLA PBUIdh59DSNjR2m0jcL0XjA8VDRYFzUqT2BF/lG30/tONuWToZBEmDbW/WXT5Gzd3AJg KwpeswC7mMioFgOzMXOWHoc5JtO+szhtVykFVe0Q3SbDDM0Rau5+9jKJiPIdnHZBcNG8 DjGz1+PiEcp5h23X6XtADuLgs3ZLckwdyhZWWVKwRREEpLByCpHZsmVlfAHzuqFMK4Z9 XkXg== X-Gm-Message-State: AOAM533sOumCSLL1SBPQ5avfI0YdSE6JzlgV+YrjLbI3mJmlSXrElieu rRXKpvTxTODK/dpbbTLwDJAZ263CgqdKsYie X-Google-Smtp-Source: ABdhPJwG0vai41m8ZnGZu7X0JsunqmUe1VNW2HgJH8Q7xms2tkrkLTERZAFTlKEa70heGW5YHHMG4A== X-Received: by 2002:a05:6000:124e:: with SMTP id j14mr1583228wrx.310.1607603247001; Thu, 10 Dec 2020 04:27:27 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id r13sm8756708wrs.6.2020.12.10.04.27.26 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 10 Dec 2020 04:27:26 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Dec 2020 12:27:16 +0000 Message-Id: <20201210122718.74374-4-harry.mallon@codex.online> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201210122718.74374-1-harry.mallon@codex.online> References: <20201207103214.75790-1-harry.mallon@codex.online> <20201210122718.74374-1-harry.mallon@codex.online> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 4/6] avcodec/dpx: Report color_range from DPX 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Harry Mallon --- libavcodec/dpx.c | 25 ++++++++++++++++++++++++- tests/ref/fate/dpx-probe | 4 ++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c index 51428459ef..577171258a 100644 --- a/libavcodec/dpx.c +++ b/libavcodec/dpx.c @@ -132,7 +132,7 @@ static int decode_frame(AVCodecContext *avctx, unsigned int offset; int magic_num, endian; - int x, y, stride, i, ret; + int x, y, stride, i, j, ret; int w, h, bits_per_color, descriptor, elements, packing; int encoding, need_align = 0; @@ -268,6 +268,29 @@ static int decode_frame(AVCodecContext *avctx, } } + /* color range from television header */ + if (offset >= 1964 + 4) { + buf = avpkt->data + 1952; + i = read32(&buf, endian); + + buf = avpkt->data + 1964; + j = read32(&buf, endian); + + if (i != 0xFFFFFFFF && j != 0xFFFFFFFF) { + float minCV, maxCV; + minCV = av_int2float(i); + maxCV = av_int2float(j); + if (bits_per_color >= 1 && + minCV == 0.0f && maxCV == ((1<color_range = AVCOL_RANGE_JPEG; + } else if (bits_per_color >= 8 && + minCV == (1 <<(bits_per_color - 4)) && + maxCV == (235<<(bits_per_color - 8))) { + avctx->color_range = AVCOL_RANGE_MPEG; + } + } + } + switch (descriptor) { case 6: // Y elements = 1; diff --git a/tests/ref/fate/dpx-probe b/tests/ref/fate/dpx-probe index 81718326d6..79fa16bd20 100644 --- a/tests/ref/fate/dpx-probe +++ b/tests/ref/fate/dpx-probe @@ -22,7 +22,7 @@ display_picture_number=0 interlaced_frame=0 top_field_first=0 repeat_pict=0 -color_range=unknown +color_range=pc color_space=unknown color_primaries=unknown color_transfer=unknown @@ -55,7 +55,7 @@ sample_aspect_ratio=1:1 display_aspect_ratio=16:9 pix_fmt=gbrp10 level=-99 -color_range=unknown +color_range=pc color_space=unknown color_transfer=unknown color_primaries=unknown From patchwork Thu Dec 10 12:27:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harry Mallon X-Patchwork-Id: 24515 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 7110B44BD60 for ; Thu, 10 Dec 2020 14:27:36 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5726968A0CD; Thu, 10 Dec 2020 14:27:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 24E3B688093 for ; Thu, 10 Dec 2020 14:27:29 +0200 (EET) Received: by mail-wr1-f65.google.com with SMTP id c5so1655514wrp.6 for ; Thu, 10 Dec 2020 04:27:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codex.online; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=n4h2Sd4gwW4LtBRRMNUAasSZi1fTqAcksQKDPLN7yZI=; b=ecG28OnoRORNlF9sk6wj/FXQQRdF9mKHKORIbwU2mcyHApBzrC43Poy01bOdrhN8Yw i9CNDMI4AWmBGeR5iuDT+tByBAI1KY1zsTdxcv0A+8F6RBhzoGhG28rVmzmyD0iMpika FcYjvN+xjl5ywfp9frsL8Vrkas3d/H/3/vBjc= 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:mime-version:content-transfer-encoding; bh=n4h2Sd4gwW4LtBRRMNUAasSZi1fTqAcksQKDPLN7yZI=; b=PYXugG/AslB1yWJyUMDXYwqVxU3L/uaqTmQnzWDQK8iu35ZY06azze5QHC+6t6smYK hiFMwGOW93cIuOTje5160PVNwzTM1mYyW0j/WcOdc2XQM7A30tmuX0Oq0JvED21FN5TK Z0aGJLfTULsyrR81a8u8vXPp2+n2X13vuFclSW9esOkmAgQwyT6KRKU6bKqhR4NK8ok9 TOYoUDMya4z0M2K0wUwKp1m+6NdjKvJMZA5aIL3JXyfq42zxPEjzvwHKiXgkIxtQfVTg VCuWQihGNYoUI94+QKh8p7iUc8P/VFOzCyhR0F1EOM29vUebckxCNIP0TnucaxYjoZBZ z2ZA== X-Gm-Message-State: AOAM533v1pGX23juy7rgZdPs3I6rebe8PZgztDKbm4OPwAR3RQAv2I+c 5bvDggauRhgWTQ5ta/hPo/Az4pififnZQvl4 X-Google-Smtp-Source: ABdhPJwQWfTxFvcm9JoUaz5xpF2tutwx49BxFyNp8K0dNUgWB/eFxtGpmumRQmGcFtpXpuzPtDGeZw== X-Received: by 2002:adf:bb0e:: with SMTP id r14mr8169271wrg.159.1607603248260; Thu, 10 Dec 2020 04:27:28 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id l11sm8822267wmh.46.2020.12.10.04.27.27 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 10 Dec 2020 04:27:27 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Dec 2020 12:27:17 +0000 Message-Id: <20201210122718.74374-5-harry.mallon@codex.online> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201210122718.74374-1-harry.mallon@codex.online> References: <20201207103214.75790-1-harry.mallon@codex.online> <20201210122718.74374-1-harry.mallon@codex.online> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 5/6] avcodec/dpx: Read color information from DPX 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Harry Mallon --- libavcodec/dpx.c | 127 +++++++++++++++++++++++++++++++++++++-- tests/ref/fate/dpx-probe | 8 +-- 2 files changed, 127 insertions(+), 8 deletions(-) diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c index 577171258a..7b18141f97 100644 --- a/libavcodec/dpx.c +++ b/libavcodec/dpx.c @@ -28,6 +28,38 @@ #include "avcodec.h" #include "internal.h" +enum DPX_TRC { + DPX_TRC_USER_DEFINED = 0, + DPX_TRC_PRINTING_DENSITY = 1, + DPX_TRC_LINEAR = 2, + DPX_TRC_LOGARITHMIC = 3, + DPX_TRC_UNSPECIFIED_VIDEO = 4, + DPX_TRC_SMPTE_274 = 5, + DPX_TRC_ITU_R_709_4 = 6, + DPX_TRC_ITU_R_601_625 = 7, + DPX_TRC_ITU_R_601_525 = 8, + DPX_TRC_SMPTE_170 = 9, + DPX_TRC_ITU_R_624_4_PAL = 10, + DPX_TRC_Z_LINEAR = 11, + DPX_TRC_Z_HOMOGENEOUS = 12, +}; + +enum DPX_COL_SPEC { + DPX_COL_SPEC_USER_DEFINED = 0, + DPX_COL_SPEC_PRINTING_DENSITY = 1, + /* 2 = N/A */ + /* 3 = N/A */ + DPX_COL_SPEC_UNSPECIFIED_VIDEO = 4, + DPX_COL_SPEC_SMPTE_274 = 5, + DPX_COL_SPEC_ITU_R_709_4 = 6, + DPX_COL_SPEC_ITU_R_601_625 = 7, + DPX_COL_SPEC_ITU_R_601_525 = 8, + DPX_COL_SPEC_SMPTE_170 = 9, + DPX_COL_SPEC_ITU_R_624_4_PAL = 10, + /* 11 = N/A */ + /* 12 = N/A */ +}; + static unsigned int read16(const uint8_t **ptr, int is_big) { unsigned int temp; @@ -134,6 +166,7 @@ static int decode_frame(AVCodecContext *avctx, int magic_num, endian; int x, y, stride, i, j, ret; int w, h, bits_per_color, descriptor, elements, packing; + int yuv, color_trc, color_spec; int encoding, need_align = 0; unsigned int rgbBuffer = 0; @@ -193,6 +226,8 @@ static int decode_frame(AVCodecContext *avctx, // Need to end in 0x320 to read the descriptor buf += 20; descriptor = buf[0]; + color_trc = buf[1]; + color_spec = buf[2]; // Need to end in 0x323 to read the bits per color buf += 3; @@ -294,18 +329,26 @@ static int decode_frame(AVCodecContext *avctx, switch (descriptor) { case 6: // Y elements = 1; + yuv = 1; + break; + case 50: // RGB + elements = 3; break; case 52: // ABGR case 51: // RGBA - case 103: // UYVA4444 elements = 4; break; - case 50: // RGB + case 100: // UYVY422 + elements = 2; + yuv = 1; + break; case 102: // UYV444 elements = 3; + yuv = 1; break; - case 100: // UYVY422 - elements = 2; + case 103: // UYVA4444 + elements = 4; + yuv = 1; break; default: avpriv_report_missing_feature(avctx, "Descriptor %d", descriptor); @@ -349,6 +392,82 @@ static int decode_frame(AVCodecContext *avctx, return AVERROR_INVALIDDATA; } + switch (color_trc) { + case DPX_TRC_LINEAR: + avctx->color_trc = AVCOL_TRC_LINEAR; + break; + case DPX_TRC_SMPTE_274: + case DPX_TRC_ITU_R_709_4: + avctx->color_trc = AVCOL_TRC_BT709; + break; + case DPX_TRC_ITU_R_601_625: + case DPX_TRC_ITU_R_601_525: + case DPX_TRC_SMPTE_170: + avctx->color_trc = AVCOL_TRC_SMPTE170M; + break; + case DPX_TRC_ITU_R_624_4_PAL: + avctx->color_trc = AVCOL_TRC_GAMMA28; + break; + case DPX_TRC_USER_DEFINED: + case DPX_TRC_UNSPECIFIED_VIDEO: + /* Nothing to do */ + break; + default: + av_log(avctx, AV_LOG_VERBOSE, "Cannot map DPX transfer characteristic " + "%d to color_trc.\n", color_trc); + break; + } + + switch (color_spec) { + case DPX_COL_SPEC_SMPTE_274: + case DPX_COL_SPEC_ITU_R_709_4: + avctx->color_primaries = AVCOL_PRI_BT709; + break; + case DPX_COL_SPEC_ITU_R_601_625: + case DPX_COL_SPEC_ITU_R_624_4_PAL: + avctx->color_primaries = AVCOL_PRI_BT470BG; + break; + case DPX_COL_SPEC_ITU_R_601_525: + case DPX_COL_SPEC_SMPTE_170: + avctx->color_primaries = AVCOL_PRI_SMPTE170M; + break; + case DPX_COL_SPEC_USER_DEFINED: + case DPX_COL_SPEC_UNSPECIFIED_VIDEO: + /* Nothing to do */ + break; + default: + av_log(avctx, AV_LOG_VERBOSE, "Cannot map DPX color specification " + "%d to color_primaries.\n", color_spec); + break; + } + + if (yuv) { + switch (color_spec) { + case DPX_COL_SPEC_SMPTE_274: + case DPX_COL_SPEC_ITU_R_709_4: + avctx->colorspace = AVCOL_SPC_BT709; + break; + case DPX_COL_SPEC_ITU_R_601_625: + case DPX_COL_SPEC_ITU_R_624_4_PAL: + avctx->colorspace = AVCOL_SPC_BT470BG; + break; + case DPX_COL_SPEC_ITU_R_601_525: + case DPX_COL_SPEC_SMPTE_170: + avctx->colorspace = AVCOL_SPC_SMPTE170M; + break; + case DPX_COL_SPEC_USER_DEFINED: + case DPX_COL_SPEC_UNSPECIFIED_VIDEO: + /* Nothing to do */ + break; + default: + av_log(avctx, AV_LOG_INFO, "Cannot map DPX color specification " + "%d to colorspace.\n", color_spec); + break; + } + } else { + avctx->colorspace = AVCOL_SPC_RGB; + } + // Table 3c: Runs will always break at scan line boundaries. Packing // will always break to the next 32-bit word at scan-line boundaries. // Unfortunately, the encoder produced invalid files, so attempt diff --git a/tests/ref/fate/dpx-probe b/tests/ref/fate/dpx-probe index 79fa16bd20..c4e04b2382 100644 --- a/tests/ref/fate/dpx-probe +++ b/tests/ref/fate/dpx-probe @@ -23,8 +23,8 @@ interlaced_frame=0 top_field_first=0 repeat_pict=0 color_range=pc -color_space=unknown -color_primaries=unknown +color_space=bt709 +color_primaries=bt709 color_transfer=unknown chroma_location=unspecified TAG:timecode=00:00:01:18 @@ -56,9 +56,9 @@ display_aspect_ratio=16:9 pix_fmt=gbrp10 level=-99 color_range=pc -color_space=unknown +color_space=bt709 color_transfer=unknown -color_primaries=unknown +color_primaries=bt709 chroma_location=unspecified field_order=unknown timecode=N/A From patchwork Thu Dec 10 12:27:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harry Mallon X-Patchwork-Id: 24516 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 2E21A44A7BE for ; Thu, 10 Dec 2020 14:34:23 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 057E9689C68; Thu, 10 Dec 2020 14:34:23 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 92F0A688134 for ; Thu, 10 Dec 2020 14:34:16 +0200 (EET) Received: by mail-ej1-f54.google.com with SMTP id b9so7114878ejy.0 for ; Thu, 10 Dec 2020 04:34:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codex.online; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Aj9QAoWdNn2lziUwAh0/DKAV17sH36yKjhM9QpGL8lU=; b=VpMoy6cChnDusGmIKCP2VC4Ra6r1pAx/jCUGpWhffLGpfbIBoyffXA72wrrsOC59id OzquWzTXu9f4KfoIVGzefqajraagriYegvPEVbrs1A637NrRSuGC92W0wwx50+o4eemy +Byclqc9BHbTmTWENV62KXQ9MRPNRoYxJAcX4= 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:mime-version:content-transfer-encoding; bh=Aj9QAoWdNn2lziUwAh0/DKAV17sH36yKjhM9QpGL8lU=; b=WXbuSDsNYBbd9Pd9q/vFmPe186E3X3eMkYT+lo/gefKNpLEAGcMYzqizrwF8tYd+wj VOqhSnXHKrjIihLfcKWu0LTxBxZfuIDE8eqXF14M6fLMNQyjMV+PHdv2IGjB8ug9ijp7 rvqC3AK8YVWFgTMeo5KoC4/5fXlS9bX9hyFdTEsKmgYej0vdrDTb0OaLb2+cYolNj9p7 ImhqDYZszc4lDzoSWGCcMT+x/o3gB/5wOMehLQaVgANhdQLFj6ktzAiuF+ucY+VaeXAg R97aiiXFmxhsd6axXGIoasDy2C4Bl4Yoe+mEqJrelTrM9sFrkcXBpZFz53Nf1lS/hHhj eiKQ== X-Gm-Message-State: AOAM532Df1h3+mWOAHuACI/eUsbG5eM3cltZOYTG3P0qOq4KkO4EflR+ 2wUYv3t7pDx/2BZzd7KqyHYCLeJgdPCDCoqG X-Google-Smtp-Source: ABdhPJzmLQ2SCBQ7JP4WnOePY7bqX/TAvDeA/pQQsygETNxJo97CkG/TQoArxuW08ZGUTCDpu2VyUw== X-Received: by 2002:adf:c702:: with SMTP id k2mr8169872wrg.156.1607603249452; Thu, 10 Dec 2020 04:27:29 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id p9sm3803190wmm.17.2020.12.10.04.27.28 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 10 Dec 2020 04:27:28 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Dec 2020 12:27:18 +0000 Message-Id: <20201210122718.74374-6-harry.mallon@codex.online> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201210122718.74374-1-harry.mallon@codex.online> References: <20201207103214.75790-1-harry.mallon@codex.online> <20201210122718.74374-1-harry.mallon@codex.online> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 6/6] avcodec/dpx: Fix B&W film scans from Lasergraphics Inc 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Harry Mallon --- libavcodec/dpx.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c index 7b18141f97..bd431ccbcb 100644 --- a/libavcodec/dpx.c +++ b/libavcodec/dpx.c @@ -167,7 +167,7 @@ static int decode_frame(AVCodecContext *avctx, int x, y, stride, i, j, ret; int w, h, bits_per_color, descriptor, elements, packing; int yuv, color_trc, color_spec; - int encoding, need_align = 0; + int encoding, need_align = 0, unpadded_10bit = 0; unsigned int rgbBuffer = 0; int n_datum = 0; @@ -574,6 +574,12 @@ static int decode_frame(AVCodecContext *avctx, input_device[32] = '\0'; av_dict_set(&p->metadata, "Input Device", input_device, 0); + // Some devices do not pad 10bit samples to whole 32bit words per row + if (!memcmp(input_device, "Scanity", 7) || + !memcmp(creator, "Lasergraphics Inc.", 18)) { + unpadded_10bit = 1; + } + // Move pointer to offset from start of file buf = avpkt->data + offset; @@ -606,7 +612,7 @@ static int decode_frame(AVCodecContext *avctx, read10in32(&buf, &rgbBuffer, &n_datum, endian, shift); } - if (memcmp(input_device, "Scanity", 7)) + if (!unpadded_10bit) n_datum = 0; for (i = 0; i < elements; i++) ptr[i] += p->linesize[i];