From patchwork Mon Dec 7 10:32:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harry Mallon X-Patchwork-Id: 24404 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:c00a:0:0:0:0:0 with SMTP id c10csp2506243ybf; Mon, 7 Dec 2020 02:54:12 -0800 (PST) X-Google-Smtp-Source: ABdhPJwPs9PmU2OgVF5NdoJGpfXg2dQC7ThzFrVf7u5VfQVfkW+PATf0icB0yUMgygyvqujX8C6A X-Received: by 2002:adf:e704:: with SMTP id c4mr10165871wrm.355.1607338452793; Mon, 07 Dec 2020 02:54:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607338452; cv=none; d=google.com; s=arc-20160816; b=kYcXSn5ZlJ21UbWv7b+uvUPWy+LBRlLmMhpWymJjWdtK5QK1USn3SNYSl8JNCZ6fFC ieofE7hBA4nzMMb3DRDpFzsZrUJ+5knKrVpmAnael+T+8IPIePeFRmKQYh7XZFmVVhbB y8Nuc1noEI8E806NvDVCYjkUPrpFE3Yqf43bpNG4NstA9oTUuKCQTYsNACCvGknCiCTa ukiZtBEhqpcOj4IisF1DHr0+eRWxxa6zFXR/dxSh7QY4lqwIApg1ph3qjndFgUKI2zx+ DZ/2xI1verGruQ5ZMihpOEFKy7YRQxxqMaBdlqPUt9/MWGHC5X89u6Scm6ZiAQF1BM49 R9RA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=5AhBq39bzGlhUFLKLMXwRqkxkordpCuTEUrhFtk9bWU=; b=d6P+06VWamthAPuKuT2P4UEA6wY+rqFreq+CBPVuZlSp/SjUsUJ3KJ9lxpoc0DD8IX A6c0SHL8sKs2OCSiFd49OBJvJVI8hABpYU0KCCz1maO1cg4Cg4QnAmbw3bwif6HKLozW WiU64GUbOMMApoKLAbiC1BG36QiPdAAN/kUX7bkAAZzj11W2f0nh266dqz0rlsrTztiv +oYWezeV7kAdZTwttQl72qset6yMEdnQhx7h41hfpAJ0YJKQS72RjY4PbvlTvbIeIkN4 +003cUyJZuNlSUdsQp1Cp/n9mwKiyIOYoEmsQpdzTNsEgDFIUVihYcRmToccSwG9Q5sd O1Aw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@codex.online header.s=google header.b=MGt6X2OH; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r8si3835529wrt.170.2020.12.07.02.54.12; Mon, 07 Dec 2020 02:54:12 -0800 (PST) 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=@codex.online header.s=google header.b=MGt6X2OH; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4E015689B6C; Mon, 7 Dec 2020 12:54:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 12597688265 for ; Mon, 7 Dec 2020 12:54:00 +0200 (EET) Received: by mail-lf1-f46.google.com with SMTP id y19so5277987lfa.13 for ; Mon, 07 Dec 2020 02:54:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codex.online; s=google; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=DuoB9jz2v55P6T0z5MWyYNwemG9iI8QIo4yCg3i9imQ=; b=MGt6X2OHV02284ZkKFVSBGvwsCdiKnBEa/2y4v/uoh5BaUT5cQR9oJawJEy+Dp4sTo oyrxcj3aojM3IcieDXmsAnXpkSCHT9SjaCfSmYcoxli35SMi1RHD0iP7L4B4TL9zh4yH F4OvEhzw2PgaXwHUxrhGo51jRf2fbKcM6UdEA= 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:mime-version :content-transfer-encoding; bh=DuoB9jz2v55P6T0z5MWyYNwemG9iI8QIo4yCg3i9imQ=; b=mwxqTRIvaCCvq3ZR2Mvy7kqSEKTxapvjUqyBJiWuDwT3o1p0FZL1sdsVHAeDZrYFYl Jy7Rbv+GhwxUvaxjIYy6Y6lHlWFR2w2KR2Xz2ghRlkfT3AwSdbYawTwlqsmr3D5WJiWT MhbxL6GoFJPBLPKeoj7Cr/0erQ/oHvqDb5+PIB7S8HNCAP3wHbU+6ZLEvfn1eNlkDEJz LHJHeYIZr4FSvwKrj/8lRUQClQf7KE7KxoAPzf67N7U2Sb0/AyXcm3R1tJ+R26SEM8tM GT2LLTAOun1fCG0GjpOE2MxteGMloZISRWNhsTwX/fc40MNDwUPP69nUoYxx4o6LRA3h iKZQ== X-Gm-Message-State: AOAM531UGB1/ClEfzaVwHhAdR+heWtxd7SXn5tmjPlY303VIDCW74Wmi Rl5QIqWJB2xSE2NkUx0XPpaWHB5MYSEWiAy6 X-Received: by 2002:a5d:4408:: with SMTP id z8mr19163200wrq.204.1607337146669; Mon, 07 Dec 2020 02:32:26 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id z8sm12964229wmg.17.2020.12.07.02.32.25 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 07 Dec 2020 02:32:25 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Mon, 7 Dec 2020 10:32:09 +0000 Message-Id: <20201207103214.75790-1-harry.mallon@codex.online> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 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" X-TUID: qhx8YSH7yzYg Content-Length: 4276 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..d18054d3d8 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)" + 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..a69c45ad29 --- /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=419072 +width=428 +height=240 +pix_fmt=gbrp10le +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=428 +height=240 +coded_width=428 +coded_height=240 +closed_captions=0 +has_b_frames=0 +sample_aspect_ratio=1:1 +display_aspect_ratio=107:60 +pix_fmt=gbrp10le +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 Mon Dec 7 10:32:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harry Mallon X-Patchwork-Id: 24419 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:c00a:0:0:0:0:0 with SMTP id c10csp2507278ybf; Mon, 7 Dec 2020 02:56:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJwJtpaXa4fX5ICslTw2miFJYq+tMQ0qWukv5EQlkqXeUBwsux1hzN1sjG3hF05jxq3E8BQ+ X-Received: by 2002:a1c:dc87:: with SMTP id t129mr12243201wmg.52.1607338604932; Mon, 07 Dec 2020 02:56:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607338604; cv=none; d=google.com; s=arc-20160816; b=fdVYFYTf51WQzHHF/D8vlfKQrQ6x6YZftHQIUf5r2J6TfQ1CN1OfZ3s3TLHa+aqMJU Z8Sy5wfWEuMQPpzSnBZ1kCPcLnnkvGkuMV6iT16k85WMKt7tmEsGMMsnZJeWw3jq+Rqg vnr1xYr5WJiy8cgsuKa+b/mSD1J8p271f6cwyFkkGvFHXiuh4lu8/W3eq0AjJMMN0NrB WsOl42UsoklRfC+fa08lDdMxU7agleFXz+flYbkFXeX0u/vcP6yUcsdv32NROoIy+xrX tPxXTCkC54hMlypr7RqCtHh1d0xI1Ym+xQb0uZuQSKvHw3UUlsQHqo8SPMMEumTJuU8V U15w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=ZQLT9UXhZn/atBU3uPJfZ1ah7+0wC0XA2d4de6gQBCI=; b=xo/ddP7f+pBrt6JeWgmYmKtPMo5qBHYWwdIUyr2xKjn8w4fZBCNuePiWVM+IzHvQmN wwlHdDjkZ5lBdBaTR+IwPDBvveioB3qknimVA6aEy3tOba2XQ/CcuYhVroYjfUfwmvDX NZrnTYNWOfQgtTReKLa2jOVwG2j9beD0HeoQa5m7oG5bYWL3NxVb4cABV6XN6ICtcLp6 JQTkblk5j5bNxgKL7FIPKYyKdcULR7TAbJQemPNUfK4eY1nOyaj9z1/HGQYJXwyXsEnX rm9WcqKiJKdnQsncWWJyGCw6aBnhAf3lIxhjy8zAYjhiSC0NVs5EfXHuJpuGpQVnzAP6 s4DA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@codex.online header.s=google header.b=QZ4ncVEx; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id z17si8873272wru.352.2020.12.07.02.56.44; Mon, 07 Dec 2020 02:56:44 -0800 (PST) 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=@codex.online header.s=google header.b=QZ4ncVEx; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 99560689C54; Mon, 7 Dec 2020 12:56:41 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 55592689C54 for ; Mon, 7 Dec 2020 12:56:33 +0200 (EET) Received: by mail-wr1-f67.google.com with SMTP id k14so12323742wrn.1 for ; Mon, 07 Dec 2020 02:56:33 -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=QZ4ncVExKLZ7g3jx9NVWpiM06QdwMkbTWnt05djfIYzDm3Xy9Q3f9bhVKlZ7I41Uwx cZkGVmsWFzSnNR1Jp0qkv+NG+P2dw1Mhf7tS2BOXIP6OdAistUqgWJB0KHmdfV0dmq8p qkYDv0zTdYsfWowuep/LeIZk9uQ48gEJZ5qVs= 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=Mtrvj8uPbBVYiJv5Dt59epotHibKNnecBnzS+b81eWQ5Ng4PrLEDjaTXgx1urun2E9 7yMK7rTEMuYfD1T7WhHe3nbF+7FV4EXNnYCdZx3vbGzGfeSZ2NjRNOzUos6EydGDtcNB GqsNZ4E5scDGYwjgcNzkyeJd+YdjscLBe0umODSzh+e0dVpchCoPTE9p3axU8+zGaPVA mq3A3qM5MVaNyMxeFCK8QbCii6jtBvkm9P3oZcUpOaqIzvObSkkyh5+2inh957Xuv6GG FR6p5MQwrt6HcwYLH4oVWQhTt5YViaEKwp6XA5Tr5agKHW0ZQ2iASaVaVcDHnzCJQPDr 8Asw== X-Gm-Message-State: AOAM533mrsGZu1BWAA1lwwfGD45j+96XvE/A7BSKVYqjCGjLuXoxkvFy UhIeuqRMESgQZdEaQMqsIViitykhLO7fCP35 X-Received: by 2002:a5d:514a:: with SMTP id u10mr18685408wrt.312.1607337147902; Mon, 07 Dec 2020 02:32:27 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id f7sm12497673wmc.1.2020.12.07.02.32.27 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 07 Dec 2020 02:32:27 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Mon, 7 Dec 2020 10:32:10 +0000 Message-Id: <20201207103214.75790-2-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 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" X-TUID: e0IYfXs82YbY Content-Length: 1966 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 Mon Dec 7 10:32:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harry Mallon X-Patchwork-Id: 24424 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:c00a:0:0:0:0:0 with SMTP id c10csp2500184ybf; Mon, 7 Dec 2020 02:40:22 -0800 (PST) X-Google-Smtp-Source: ABdhPJy4dYFPeYM4xXjp9AMlpc+KZFaLa5y2maAVLKwA5YOLIghETbTS17Ho/lTmCBlMo6bSIixA X-Received: by 2002:a1c:7201:: with SMTP id n1mr17355056wmc.139.1607337622533; Mon, 07 Dec 2020 02:40:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607337622; cv=none; d=google.com; s=arc-20160816; b=mARXUR8AlC3e8lri/eviASG1JH6gzqtzkhZ3+7wbmq5N6vNn14Pm2l90T9MM9Dfr0a iu1pTHrsV/6vf78GkZgeAI4D6zx7Jb5SYK2GfWDvJANOH/ZlT0z9rmA4oGCDpnI/Grd5 E/Mlbo4+8KdASf80H5lO+j21zNEAutFBaIX5A+enVEll3+diet01dbhygG3EBDVpYZvK LQHzopk5uVgqNw7KTO3IiN354TTCaQ4EF87j3pPIccaDkQ27s/9SiRKwZM7jLNHFUjFs teiyVGVdyGJZcIb7iWY7F81TadA66R6Spw92ShoGyQBXvoYfJtKff26S4gj3q8rfefyF cNoQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=JrQGoJ+9BwRPThZaeGnjTnD/pzViSZuQAU3NlBxfRcE=; b=iA5sjqPYV1Nu0YAmjPliS2exuxGhKLykgFfrDEYNDS/TANgvffpy4c5n2dNVDuNBST RVZR+UNt8URsu9UltPZH1X9VcLKU84t5XCFh+Jhja9C78ZF7oNCI/odQ41Cu+h+qqTT8 ORWA0SXjeZjj4Xu3zKiHfbm9X+4P+aSaF5htpblHvPZ22cmpvxmuz+VLj/cbHAKQEvso +OFfmNHqiTjLH6FmLabroC9GNDbdv8nRaReJ+GKBwqRqT3E3AFeaRgLmr1+q32xfP517 QDcGZ+Ln7e0VEaKiphitKDVpleIbA4eLQBvwXRc4+4jKYBoVKeNeM9xz2cR/ZEXQixrM 9MGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@codex.online header.s=google header.b=Cp1t0Tj9; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i13si10800254wru.171.2020.12.07.02.40.21; Mon, 07 Dec 2020 02:40:22 -0800 (PST) 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=@codex.online header.s=google header.b=Cp1t0Tj9; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5AD5F689D06; Mon, 7 Dec 2020 12:40:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 75E476897E4 for ; Mon, 7 Dec 2020 12:40:13 +0200 (EET) Received: by mail-wm1-f53.google.com with SMTP id 3so13131139wmg.4 for ; Mon, 07 Dec 2020 02:40:13 -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=M8RQAzOsy8pGPaduvnI550F47eQbXSyQz/KBDnJrI2c=; b=Cp1t0Tj9Bs5/xRPl18v/MSAPEdvJSFn42dBdnb59HX1Od1Wotaxy3BV9PEsFLBFcYH rm0ql17vHLbmn+nd7H9WwEf8lmWwLtyGEd4tPFzE55dDcheHrMAEhirri/Wy2G+JulF5 PWD+HIK+V5m7COIYXgTpkQ56JN0LSk60clocY= 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=M8RQAzOsy8pGPaduvnI550F47eQbXSyQz/KBDnJrI2c=; b=W9LFxV99pZ71CN+YaQC38+rQsMtTLanvBrpZsE0X558bxJuiDFRK6kk2yc7NbZAn6X dfA8gSUE3uH+kapqS+ArOvRrgTtxYniFM47OszHdOBTmsLP+F9bxwAH8yUsoEs6tEw+z eehx7G6g5cBb64C9YNKNsdOecyuxEJwb+MNXSKWHmedYSTliYWeavyf3x0Mk8d1Yigd/ IqlbFlGETHyzroPzHHI1QLslbR9e8rxpi1BOq8wBA7mUlKHUKFMCMbuESYQlOuAt5Gkd yT4G1vf6nwoyWqZ5dGENu0iTtkP1D7OSPvhrrcylXGYhOd3aL7RIusRBmZ9h0+KdaFd0 /ksw== X-Gm-Message-State: AOAM533pH74fVUZ8Zhd+EmcCg+0om2ho8kvw4xmkZ1OZkePGaGS09ipx sA3pWikPNXyd2xERPkoK1qRUbydGT5LIz3d0 X-Received: by 2002:a05:600c:2255:: with SMTP id a21mr10042868wmm.122.1607337149260; Mon, 07 Dec 2020 02:32:29 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id l24sm14997747wrb.28.2020.12.07.02.32.28 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 07 Dec 2020 02:32:28 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Mon, 7 Dec 2020 10:32:11 +0000 Message-Id: <20201207103214.75790-3-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 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" X-TUID: nh2F5xkxq1An Content-Length: 3316 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 a69c45ad29..9365bce644 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 Mon Dec 7 10:32:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harry Mallon X-Patchwork-Id: 24422 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:c00a:0:0:0:0:0 with SMTP id c10csp2499199ybf; Mon, 7 Dec 2020 02:38:11 -0800 (PST) X-Google-Smtp-Source: ABdhPJz8Ne4v0KfA0MRw9J6um0IU+p4NUhKthZNCQXy2mDBEfh/zBMnqIYmi9VTdHLJqFnlxWlQr X-Received: by 2002:adf:e44d:: with SMTP id t13mr18917149wrm.144.1607337490900; Mon, 07 Dec 2020 02:38:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607337490; cv=none; d=google.com; s=arc-20160816; b=T3XnKpvfxFAMfRCMC+5Jik3xN47ZqqWjbJ1qvrbJBvbTZChUNx4IVIVYf5WG0ElFnV cCsaO2/iciTTkehR1zi9WnabildE1b3bwL2ZLFSM6IJ3Rc0I4YDGEPGTZTQqUT9QkU+X jVCkkmlU9c0Ss8qEKc9Aq7XaraoBxf0p5JG6p5PstwF4gthfPmqLnb0vB7mMRZj2YTco B98HbwOBRlChpynzf7TsugLJCHauL4oSki5oJkbXL++/hqu0V/Qln2PKyNN0b1i3KE9H a+0xUHZlqMpdgpFyR9oxQGS1CpMYSgro/8zTaYWnDfGK3VcpZWgYl/h1yW/bSsaTLN5g KnIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=fr/+M061r6eJzNrC4xzWDHXX73NHYb3Xthx6erDIFhk=; b=fjIYzYiyUJKfP6b+Q9PHobaQfQcoMLwrMMLV9lQz1yHbTzF/NHyvFApOC44BAnBWpi 5ycl2nGFo44JTPJ6LvD67fqh1aqVn4cwktTpw2OoKx4Lu7zY+qJ4GqyZzlScs/7k7D27 rYB7ucocniQoHSLd7mGx3YDEkpXofC2pmL2Io5M4j8d8RIlcT7yL0EkG6IVMWamJh65R 9JVc54v4AbAXocNtB7jOYuGkF3W3IX5+cKZiQZZpmp+gkTKeXIIZkZYGLbcdl6FHguRA 9H+dVRLQjcL4jevTJ3DgdPYh+sBbfXu2llpkrvVwP1JtOhUwxJ0R6AI7Zv0OKHGwQYIe 1oGg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@codex.online header.s=google header.b=YDx9Tttr; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id x11si10882138wmb.103.2020.12.07.02.38.10; Mon, 07 Dec 2020 02:38:10 -0800 (PST) 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=@codex.online header.s=google header.b=YDx9Tttr; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EF8D4688057; Mon, 7 Dec 2020 12:38:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 41720688057 for ; Mon, 7 Dec 2020 12:37:58 +0200 (EET) Received: by mail-wm1-f46.google.com with SMTP id y23so1582893wmi.1 for ; Mon, 07 Dec 2020 02:37:58 -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=gBE0m2Mt+bsWmvvKW7mUTR449boYmmINTIkQNCrYzu0=; b=YDx9Tttr6A6mUArdTtoeZcCQBRqKIMXwPw50frNuSkgib0lBfEDDtKRIHzg4gXTFYR fp/3Jz67nqM6k4eRlU1yvwr/fSqBTFJEPYFtQYxS0P6NCkHr//lwto1SbExA5S9Me1mT fzJXwLQjNf0STAXJ0ADe1tNvVeYms8mL9g7Ro= 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=gBE0m2Mt+bsWmvvKW7mUTR449boYmmINTIkQNCrYzu0=; b=bKxFn/8LbVRxLzomiHyNUPJDueWrvbaBOIgjsbLI7zywijJ9HgsqjAsRoOJibvzUX2 hwVjC5KS+sef5eSPDG7/p1w3L11BxaFdDbL7nboqtS+kxMZIC6k17yMgYQdD/g65RGRZ S529semgRwHz6vRUsiMiL1NxbZ1aA2Vetb5OWKUDbcoPtLvPEBc1OD038EZelVCJXv17 K1VgSsKT3MjmPLWgXLNGYEZDVxXuGWX6qYtNHk9lKC+wzYWMZO5eYoMHKmWvufNb5GvG L71Y5lF7jbZX/KuPO72ltX+oEM64nJXcSyQhY3RdPujK7s9sedWg0X7Mq4Qrqkmc5w3K iK3g== X-Gm-Message-State: AOAM530LS7tIkXom34X/cwKptSZzV5PeNA+4sY+heU/qos8SHs/7JmpL 1trT6iiXcfVjvzCkCzkIcAEfxYkcMHckMBey X-Received: by 2002:a1c:9916:: with SMTP id b22mr17054056wme.182.1607337150862; Mon, 07 Dec 2020 02:32:30 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id r13sm14168565wrs.6.2020.12.07.02.32.29 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 07 Dec 2020 02:32:30 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Mon, 7 Dec 2020 10:32:12 +0000 Message-Id: <20201207103214.75790-4-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 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" X-TUID: JEDo9VRkfJy9 Content-Length: 3287 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 9365bce644..a45990e333 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=107:60 pix_fmt=gbrp10le level=-99 -color_range=unknown +color_range=pc color_space=unknown color_transfer=unknown color_primaries=unknown From patchwork Mon Dec 7 10:32: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: 24415 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:c00a:0:0:0:0:0 with SMTP id c10csp2500498ybf; Mon, 7 Dec 2020 02:41:01 -0800 (PST) X-Google-Smtp-Source: ABdhPJxfzQisf8Fg/BUWND3nNyjEoQAslYdB2z1c6Vg33qKDG02dyqSrJXpaLX94CaHYNEqc/jC3 X-Received: by 2002:a1c:f406:: with SMTP id z6mr17794264wma.123.1607337661772; Mon, 07 Dec 2020 02:41:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607337661; cv=none; d=google.com; s=arc-20160816; b=DMFxGK3mAL8MgPUTl1/BdXOpMROWRVZukCxeY9lPr9VfhPoPuUNTu+kbI8wGesjWo6 L/EQk0M3X3c+YgwzK9FnhEo0y6Al9RUcFG4Y4asNxkwWiR3NglIHT++0KxB1TvsaVawW az/7TRnwdNx15M6l1I9Dr/oL7bdzhcZ/8+8dPD5I2qBKl1LERxWI7iQFhasOPGsSVJoL m0Upwbf4b9W/q1+DrLvo79XmIHF8T4z5/wcs4AROH8cECkc7Ae9rZV+5PA4Y/JY1vG2r TqEnJKC5M0Bw5OZx3JF0j3DKsArHShZuBhtAkP9pJvHctFFwmahWIJ8XzJuoaAX6N8Av L5sQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=Zxn5O8Ogh5q5AdEcQnQFN2HjGkqragZE64XUblkFnVw=; b=a25ORA/JMDrGCR42BLCWusQyGjvw4kgpF7bOlbCtvwhXtDLN7y0Vi4anyxYeJWDWii ziEvKFyxuBdvVg4iweIIXge/SFkwz/vbn7QoeTEBU/s2mCHhHqYP9yiFdg3wdX85yVwn BfkfEHkB29FcGmlVpMspyX5CsHFwqKCyVzDX5XBWYAkkqKkNwtKpuRwuFENPmkdl+gUU 8dRe0GsdWf4RaC+0CTNwBRdEHNiTSSY8MiGmewqqGvQSqB8tUxTMJS5TNNzP0tsxOIk9 s+bOCcYUjKJI6zRLnPN1IcV7u28ZLEjpk3A6u+pYNb/S7uruy7MJfq1rm01kxuIo2eIS syXQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@codex.online header.s=google header.b=YzTeJChk; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y63si10978876wmb.23.2020.12.07.02.41.01; Mon, 07 Dec 2020 02:41:01 -0800 (PST) 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=@codex.online header.s=google header.b=YzTeJChk; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8D65168990E; Mon, 7 Dec 2020 12:41:00 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EB8EF688136 for ; Mon, 7 Dec 2020 12:40:53 +0200 (EET) Received: by mail-wm1-f66.google.com with SMTP id k10so11039374wmi.3 for ; Mon, 07 Dec 2020 02:40:53 -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=btGoSaK7dLLSRWgklO8zXY9/b2KF31Jz1GhuZFYzYWA=; b=YzTeJChkE7Vey+Fo/AycpA+yyMb9hoPCOd3bgkeTksdiCqRaTYCxBbzfTXS2xUr+et LtxHId2Hm0vorS6vSu8X/YxogV8tsp/6Dr+tlYVgm9ifPKUyYy9Ko0YyB2NT8rG025f7 btl5TmRq8qqIL5l4rEpbW2RAqhdylrf/neEtw= 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=btGoSaK7dLLSRWgklO8zXY9/b2KF31Jz1GhuZFYzYWA=; b=aeF9NfDuvZH91KXMRGYsoRashMSA9c5hRVTk+2ygHGnms17OCns43JYrAHGtrHHb2c 6/TDnvMYh8gEFIYiFMHxRm03H8Uk+KdbyzaBJolyeFhNAeIVcfQ0Qv2ZIeBIwjcFu3mH Jgdpoj0RFdjGF+W5VVkE1OZEAIUZ3fcSG8bDQxtOBcKTfK1Rf2lvZ18U8e7GwjZ+uVAG cLo4ohLGUj3Q5Qocs7FChOMKf4GqPG8G1FHtvLCyPe1cjEo/YJYrJDbQEe7ghoyl985f 9BO8XbnViohTzlwczknYMwJy/diCZSiRypMVsrID9mdRuKuAJ7YIv56nCxWs0I0SM2Sl WebA== X-Gm-Message-State: AOAM533VQK7zCmhQnyIM7erS4aVrQyvdyM5eUIdySk+R4Unj2mKWJkzb +fGi3kHA7/ZE2QIYbpqlvZpOEAuJTo4y9pLy X-Received: by 2002:a1c:2cc2:: with SMTP id s185mr17179855wms.111.1607337151927; Mon, 07 Dec 2020 02:32:31 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id b4sm14284927wrr.30.2020.12.07.02.32.31 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 07 Dec 2020 02:32:31 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Mon, 7 Dec 2020 10:32:13 +0000 Message-Id: <20201207103214.75790-5-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 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" X-TUID: 8kpui5usj6cR Content-Length: 8815 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 a45990e333..4b47410f88 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=107:60 pix_fmt=gbrp10le 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 Mon Dec 7 10:32: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: 24431 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:c00a:0:0:0:0:0 with SMTP id c10csp2499267ybf; Mon, 7 Dec 2020 02:38:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJyH5AUFeWm60S2o99ThEUiSWH40fhx+FgKqNO0Y+KWR1FR9ccWvkrYDyqOZmouXfmf7p36s X-Received: by 2002:adf:c449:: with SMTP id a9mr10299365wrg.281.1607337499248; Mon, 07 Dec 2020 02:38:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607337499; cv=none; d=google.com; s=arc-20160816; b=SajKqAJ/ZN7HJH0Q26dyPwvU5O0z6vyezQwY/8ffgIlIwjXnseyqeCnlc+jpnIDfB2 bJFRKOWjiapd6tDYcrATGvaSti6EhksGZbhgOWfM7z+lw+NRz77aFfWuLTp6JOev5GYe xCKs8dVE7ZD0kPEMfq4z8pkyhnC+agJXhsXzI3VlMFx/+9qMlfU924XYOEaFFFqYzf8e cyN46/Rfa0yhkfCWbTMpb+mcHJmseoGcT3iJ3P+gpBKZ1V8l+gSKExdmiuR6IFRLrflt o7fjW8Z3hyQNGeHG+JoTDQI+YbfbnO+P37Wj/9itxLISwOQ+lMBiTrUCJdJAYpxWAzvj OJ9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=Fq0gp5FOTacYMm0dEhfhE+H7ZTdNlAWMUoSqbJ5EMqk=; b=Wzgu87Kuv5DjULJNAGiD5UA0b8SWpxlYN9AMmKstFS5EC/+ZqZ+0YnTihFxOfKstl+ TDYdeKjC4NR5oOBy7uoWB/HWlOeJv9vCzGoZRrvchddh7v0cnfOPX0BaqgyRAVC3+jwa uCkcBLqdVmiLkvF7SKyW8I/Ir2vyst4RSJm+Vte4oFgo/Wbqo9jbHw5Sd51LedxT8FbX caTG2fh04G0MaFXDV3qPUf5GSE6RPXtgVZUsO9aSUcIk0u8CR7znhVVtNBe0lH++knf2 gowo/4pOz29Jhcd34TlmFiX1asaudRjBQKNy4TkIQTx7wgU3/s7XCD3mlbLzfkCRrw2E PABg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@codex.online header.s=google header.b=YaX6QtUH; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s1si10446917wmj.75.2020.12.07.02.38.18; Mon, 07 Dec 2020 02:38:19 -0800 (PST) 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=@codex.online header.s=google header.b=YaX6QtUH; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 788A9689B6C; Mon, 7 Dec 2020 12:38:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A59AC689B33 for ; Mon, 7 Dec 2020 12:38:00 +0200 (EET) Received: by mail-wm1-f68.google.com with SMTP id c198so11076497wmd.0 for ; Mon, 07 Dec 2020 02:38:00 -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=YaX6QtUHbiqx2o+QGJdDhdHSCFpqtrqW10LWnKHEVOVSg91AOUYJwkaNeZMfRlyro/ 3SyqaHRTQvJRtdmkMMeSCeDxqO1Eh3mGDS/SvGMnIX1TYexL1/Cq6yB+iFmt7YoVDCdF UTXkK0Zj1MeuT+8KwziSCWGkcmy3ez/OnNSb0= 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=ZEQolYux0rsl646xg0k/QQZVvp/FZ0QhQfw63GZhebr5a1+YqsUKusuQA8OqK3SnMt F8odFwVDqVy1iTRYNg0tP1qksu95OAbgkefTpls1Zd4oar5SLwce+Br8nUgXFxFl9Y/t jK7ww9Sg3NpZ0rK6PgG/aqwGM/mbqs1bIXgaC2ydyJ5lbU3Qd+WNOxHyxlwDkZiZ3gVb 5+uOCHlt8hvWTmSf3yvFu+OuX7nksTq8Db3EzN50wkCOIFYL0H5AMf599B0iAYAHNkJP fkNUlAn2dmdj4opIbbpjsCdgv9z9zAwjAxjgG5xHBppf4XORcrKnms6AZOH6KL8kKBW6 qc5w== X-Gm-Message-State: AOAM530BX01UZ9BEOSOmmvY9qLOdKAJpktXgARfbtLGiJMwgYCHdJ4uS uy11S/i4MThLFRZpfFLwf9WIIsRzM/+l590r X-Received: by 2002:a1c:4e0a:: with SMTP id g10mr17741927wmh.51.1607337153152; Mon, 07 Dec 2020 02:32:33 -0800 (PST) Received: from localhost ([66.159.216.147]) by smtp.gmail.com with ESMTPSA id r13sm14168702wrs.6.2020.12.07.02.32.32 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 07 Dec 2020 02:32:32 -0800 (PST) From: Harry Mallon To: ffmpeg-devel@ffmpeg.org Date: Mon, 7 Dec 2020 10:32:14 +0000 Message-Id: <20201207103214.75790-6-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 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" X-TUID: V+kohXmzTFvS Content-Length: 2359 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];