From patchwork Mon Nov 14 23:19:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodger Combs X-Patchwork-Id: 1426 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.90.1 with SMTP id o1csp1305383vsb; Mon, 14 Nov 2016 15:31:52 -0800 (PST) X-Received: by 10.194.209.169 with SMTP id mn9mr20904534wjc.114.1479166312665; Mon, 14 Nov 2016 15:31:52 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id c137si627552wmd.151.2016.11.14.15.31.52; Mon, 14 Nov 2016 15:31:52 -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=@gmail.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 22910689E6A; Tue, 15 Nov 2016 01:31:50 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it0-f66.google.com (mail-it0-f66.google.com [209.85.214.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1E157689D61 for ; Tue, 15 Nov 2016 01:31:43 +0200 (EET) Received: by mail-it0-f66.google.com with SMTP id q124so17751730itd.1 for ; Mon, 14 Nov 2016 15:31:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id; bh=zCmEyFevt0ehpIbbdQ+FWx6TXIOZClR1snd9TQBdN7w=; b=LTthx3fjllUm6StTMYM+kur96mjJ+AJ4+2DtAmT3twlpyu1J5czUl1NquIAbpmFdhB xMh8fz4JCDa/UllDFgbovX9LNiH2oZhggzQYotdaST+BTAUIU7UYkGXWqWzJYMxPiklk haS54hZxVYWlp7E99hGxSDn4MX8Qn0Ai7D/3cayBZwlGNVkGDbzlxJ4NqZgYYQsfFbb1 qeVfUn/3QQoRycgTyM+oFTrYwGzzDuHswEqWE99ixQbXj9TDU5+TNgNJcTFp8z3pQa4E glD2ZrtxrDTh8blEMNSru5NydGANow7vQwzKsTnwwNrg60NOjjkn5uJTk48D+AxBe+aB 1oQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=zCmEyFevt0ehpIbbdQ+FWx6TXIOZClR1snd9TQBdN7w=; b=La+NTANr/br2/Nfvb+Z3tlLiNDvyBv9dH/6mPRnDn2Ft0xVaR+/yCx7B9wB04F5+9q 2ct/CEO4xegBY32pKNKIoH+sJrx0CuBDf8+ILxiIO2h9EqNC/svZu9c6iooWYsX6Yh6V VpQV/3x+t3/WYExsozF+EWPGNMpROPPEhgL7YPjY283oUWEeV9BuE//QPKDfyIrHyrCq BdeqK/YVVDl8+IihW/DBvUjshBghSTHgJQGA+Q5I8iVZuGP842GlYUhGRL0McMSn8jP8 TdCy/ttgG86vqtTX35NKz0QID0udyxnzqTf9kghq31Laf6giNgHWt5NDVA89t6EwS42g WHXw== X-Gm-Message-State: ABUngvf+waq+C/FGWheyg1Olytrv1dMesEd3ltun9NxR/VBLxgHEpRtHTVryotPeQd75xw== X-Received: by 10.36.127.84 with SMTP id r81mr657124itc.57.1479165568740; Mon, 14 Nov 2016 15:19:28 -0800 (PST) Received: from Rodgers-MacBook-Pro.local.net (c-73-209-137-129.hsd1.il.comcast.net. [73.209.137.129]) by smtp.gmail.com with ESMTPSA id p77sm10267050iod.35.2016.11.14.15.19.28 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 14 Nov 2016 15:19:28 -0800 (PST) From: Rodger Combs To: ffmpeg-devel@ffmpeg.org Date: Mon, 14 Nov 2016 17:19:25 -0600 Message-Id: <20161114231925.32943-1-rodger.combs@gmail.com> X-Mailer: git-send-email 2.10.2 Subject: [FFmpeg-devel] [PATCH] lavc: report frame field order in avctx 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" --- libavcodec/utils.c | 13 +++++++++++++ tests/api/api-codec-param-test.c | 3 +++ tests/fate/matroska.mak | 2 +- tests/ref/fate/api-mjpeg-codec-param | 2 +- tests/ref/fate/api-png-codec-param | 2 +- tests/ref/fate/mov-zombie | 2 +- 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/libavcodec/utils.c b/libavcodec/utils.c index d6dca18..b9af880 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -2296,6 +2296,12 @@ fail: guess_correct_pts(avctx, picture->pts, picture->pkt_dts)); + + if (avctx->field_order == AV_FIELD_UNKNOWN) { + avctx->field_order = picture->interlaced_frame + ? (picture->top_field_first ? AV_FIELD_TT : AV_FIELD_BB) + : AV_FIELD_PROGRESSIVE; + } } else av_frame_unref(picture); } else @@ -2895,6 +2901,13 @@ int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *fr av_frame_set_best_effort_timestamp(frame, guess_correct_pts(avctx, frame->pts, frame->pkt_dts)); } + + if (avctx->field_order == AV_FIELD_UNKNOWN && + avctx->codec_type == AVMEDIA_TYPE_VIDEO) { + avctx->field_order = frame->interlaced_frame + ? (frame->top_field_first ? AV_FIELD_TT : AV_FIELD_BB) + : AV_FIELD_PROGRESSIVE; + } } return ret; } diff --git a/tests/api/api-codec-param-test.c b/tests/api/api-codec-param-test.c index 377a5e9..16ba8c6 100644 --- a/tests/api/api-codec-param-test.c +++ b/tests/api/api-codec-param-test.c @@ -211,6 +211,9 @@ static int check_video_streams(const AVFormatContext *fmt_ctx1, const AVFormatCo if (!strcmp(opt->name, "frame_number")) continue; + if (!strcmp(opt->name, "field_order")) + continue; + av_assert0(av_opt_get(codec_ctx1, opt->name, 0, &str1) >= 0); av_assert0(av_opt_get(codec_ctx2, opt->name, 0, &str2) >= 0); if (strcmp(str1, str2)) { diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index 35ed41f..16397b5 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -4,6 +4,6 @@ FATE_MATROSKA-$(call DEMMUX, MATROSKA, MATROSKA) += fate-matroska-remux fate-matroska-remux: CMD = md5 -i $(TARGET_SAMPLES)/vp9-test-vectors/vp90-2-2pass-akiyo.webm -color_trc 4 -c:v copy -fflags +bitexact -strict -2 -f matroska fate-matroska-remux: CMP = oneline -fate-matroska-remux: REF = 9b8398b42804ba12c39d2f47299a0996 +fate-matroska-remux: REF = cb6cc1cb581e31c98dd77173c7b4d221 FATE_SAMPLES_AVCONV += $(FATE_MATROSKA-yes) diff --git a/tests/ref/fate/api-mjpeg-codec-param b/tests/ref/fate/api-mjpeg-codec-param index c67d1b1..c7e8da2 100644 --- a/tests/ref/fate/api-mjpeg-codec-param +++ b/tests/ref/fate/api-mjpeg-codec-param @@ -307,7 +307,7 @@ stream=0, decode=1 refcounted_frames=false side_data_only_packets=true skip_alpha=false - field_order=0 + field_order=1 dump_separator= codec_whitelist= pixel_format=yuvj422p diff --git a/tests/ref/fate/api-png-codec-param b/tests/ref/fate/api-png-codec-param index bd53441..cba634e 100644 --- a/tests/ref/fate/api-png-codec-param +++ b/tests/ref/fate/api-png-codec-param @@ -307,7 +307,7 @@ stream=0, decode=1 refcounted_frames=false side_data_only_packets=true skip_alpha=false - field_order=0 + field_order=1 dump_separator= codec_whitelist= pixel_format=rgba diff --git a/tests/ref/fate/mov-zombie b/tests/ref/fate/mov-zombie index 42e3a6f..c9cf7db 100644 --- a/tests/ref/fate/mov-zombie +++ b/tests/ref/fate/mov-zombie @@ -129,5 +129,5 @@ packet|codec_type=video|stream_index=0|pts=188623|pts_time=2.095811|dts=188622|d frame|media_type=video|stream_index=0|key_frame=0|pkt_pts=188623|pkt_pts_time=2.095811|pkt_dts=188622|pkt_dts_time=2.095800|best_effort_timestamp=188623|best_effort_timestamp_time=2.095811|pkt_duration=3003|pkt_duration_time=0.033367|pkt_pos=100846|pkt_size=974|width=160|height=240|pix_fmt=yuv420p|sample_aspect_ratio=2:1|pict_type=B|coded_picture_number=64|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0 packet|codec_type=video|stream_index=0|pts=197632|pts_time=2.195911|dts=191625|dts_time=2.129167|duration=3003|duration_time=0.033367|convergence_duration=N/A|convergence_duration_time=N/A|size=580|pos=101820|flags=__ frame|media_type=video|stream_index=0|key_frame=0|pkt_pts=191626|pkt_pts_time=2.129178|pkt_dts=N/A|pkt_dts_time=N/A|best_effort_timestamp=191626|best_effort_timestamp_time=2.129178|pkt_duration=3003|pkt_duration_time=0.033367|pkt_pos=99180|pkt_size=1666|width=160|height=240|pix_fmt=yuv420p|sample_aspect_ratio=2:1|pict_type=P|coded_picture_number=63|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0 -stream|index=0|codec_name=h264|profile=77|codec_type=video|codec_time_base=212521/12744000|codec_tag_string=avc1|codec_tag=0x31637661|width=160|height=240|coded_width=160|coded_height=240|has_b_frames=0|sample_aspect_ratio=2:1|display_aspect_ratio=4:3|pix_fmt=yuv420p|level=12|color_range=tv|color_space=smpte170m|color_transfer=bt709|color_primaries=smpte170m|chroma_location=topleft|field_order=unknown|timecode=N/A|refs=2|is_avc=true|nal_length_size=4|id=N/A|r_frame_rate=30000/1001|avg_frame_rate=6372000/212521|time_base=1/90000|start_pts=0|start_time=0.000000|duration_ts=2125200|duration=23.613333|bit_rate=333874|max_bit_rate=N/A|bits_per_raw_sample=8|nb_frames=708|nb_read_frames=65|nb_read_packets=66|disposition:default=1|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|tag:rotate=0|tag:creation_time=2008-05-12T20:59:27.000000Z|tag:language=eng|tag:handler_name=Apple Alias Data Handler|tag:encoder=H.264 +stream|index=0|codec_name=h264|profile=77|codec_type=video|codec_time_base=212521/12744000|codec_tag_string=avc1|codec_tag=0x31637661|width=160|height=240|coded_width=160|coded_height=240|has_b_frames=0|sample_aspect_ratio=2:1|display_aspect_ratio=4:3|pix_fmt=yuv420p|level=12|color_range=tv|color_space=smpte170m|color_transfer=bt709|color_primaries=smpte170m|chroma_location=topleft|field_order=progressive|timecode=N/A|refs=2|is_avc=true|nal_length_size=4|id=N/A|r_frame_rate=30000/1001|avg_frame_rate=6372000/212521|time_base=1/90000|start_pts=0|start_time=0.000000|duration_ts=2125200|duration=23.613333|bit_rate=333874|max_bit_rate=N/A|bits_per_raw_sample=8|nb_frames=708|nb_read_frames=65|nb_read_packets=66|disposition:default=1|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|tag:rotate=0|tag:creation_time=2008-05-12T20:59:27.000000Z|tag:language=eng|tag:handler_name=Apple Alias Data Handler|tag:encoder=H.264 side_data|side_data_type=Display Matrix|side_data_size=36|displaymatrix=\n00000000: 131072 0 0\n00000001: 0 65536 0\n00000002: 0 0 1073741824\n|rotation=0