From patchwork Mon Jan 8 05:26:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Dixit, Vishwanath" X-Patchwork-Id: 7196 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.78.2 with SMTP id r2csp2248219jaa; Sun, 7 Jan 2018 21:27:13 -0800 (PST) X-Google-Smtp-Source: ACJfBot/RwRGPQ1SdR6aAXBKZsnI0T8TzR8kW5OZ02nnokjdN0ofQ8C9cvkIg6CmCjaZ3vlD3Ghp X-Received: by 10.28.17.76 with SMTP id 73mr8418124wmr.104.1515389232958; Sun, 07 Jan 2018 21:27:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1515389232; cv=none; d=google.com; s=arc-20160816; b=jdMD0QEBIZgv25pRTpqx4xU8ARFzPOFOwpRi+UGqjJp82ItQDwo4joNQOb/0JJuchY ru2RO39V+BMsmXklqZl4Zam9zNq/MwtCDAkPcHxLG+whtd4Pgk3Lxt+29XpSV6an+pn/ 4vVJTApS5zpFg9x2d92fW0ml++x9W6bjoBvgZCkBG/Ffy+2sjavmKSD0KrLEgix5GBoN IeQVL68Ky/ToyO43ZQCrvS97G0i8Q0ib/zbscC9PUcS/kb7Mo1gGQVQ9lgvU+K9bsOLH fqX1sSF1KAjZvfxhekJ0aprVYjT/e73qCy8D9vIuTVtsK5iTZ87plnK8l6AyD6Sz3x4E l3dA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:feedback-id:message-id:date:to:from :dkim-signature:delivered-to:arc-authentication-results; bh=JI60gTMxQ+kc8IINxc43jlbtLXRbOvB6tBL5vfTJV3w=; b=Co/BrkG5VclkcAirQ/6NsxwOH4Di5bm27/rk99X02a5p+AjCBEMQuiYeADAYgGf0uo bR2/4g0kWQC02rvOYgTjQgO1Yd/NNDtUEmxTykj992oZZAUnKYCJsc8+PcEHXt7RA+Qu TqKajZET6LA3OQkSjQKvDcyKrbIExwr1YncrSrzbRseMS1gCb8SY/1cMyAmdnUvcDetQ HIEKeO0gkPvB7xiZblpqNiUUQYpRBv0gqgQU+jpZEwekYHtxjhluELL04Cgw2SJiC/B3 46BHxAdqG75zo0bkOmczL5gXwq0ULRnL/VfumZ0YgvyOLNUaQHHXLVolrVy3isWKm0zo mAhQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@smtpservice.net header.s=m78bu0.a1-4.dyn header.b=nsA1sS1d; 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=QUARANTINE sp=NONE dis=NONE) header.from=akamai.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id n18si8172180wrh.394.2018.01.07.21.27.12; Sun, 07 Jan 2018 21:27: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=@smtpservice.net header.s=m78bu0.a1-4.dyn header.b=nsA1sS1d; 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=QUARANTINE sp=NONE dis=NONE) header.from=akamai.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6D563689FCD; Mon, 8 Jan 2018 07:27:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from a2i831.smtp2go.com (a2i831.smtp2go.com [103.47.207.63]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0A105689F73 for ; Mon, 8 Jan 2018 07:27:03 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpservice.net; s=m78bu0.a1-4.dyn; x=1515390129; h=Feedback-ID: X-Smtpcorp-Track:Message-Id:Date:Subject:To:From:Reply-To:Sender: List-Unsubscribe; bh=aGhiWpI/xsPoREsnQNCtMeNzVeQieLINv7kRMVwhHrw=; b=nsA1sS1d QGqfOJWuQz/ir9MdGOsO/IR9F7WwzHRGmQMODFz+bvMVsR/mmxTGnIKc39lVPsxTx34l1N1qMG0TN VAvNG9sd0EHreGClWdJ9ZTTfJ/Kw1TbZVs4TjrAvDgQJfoXgPgvj6KDlFfLdMhtbx/h2bt/Ygj7RF p5wwoTeiw1Tt5wxfNYGHeQKNME+IGxAmx6dmpPeggs9/E3KX91gdyXehxgZBvRdCWNZAGe+y0qjC5 k0rVrThs5XRYT3anViDAYQ5C3tKpJn4iqhYxY5aVlbBZT0LCeiwuFlXVUoZkDgxDOFfBr8ugkWOUf x4C4vFqxtxRkryn2hYTrATrFWg==; From: vdixit@akamai.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Jan 2018 10:56:56 +0530 Message-Id: <1515389216-31035-1-git-send-email-vdixit@akamai.com> X-Mailer: git-send-email 1.9.1 X-Smtpcorp-Track: 1-Yexd4ba6ak0b.l0Ekv7Lp4 Feedback-ID: 337386m:337386asVRLGB:337386ss_cENJwbF:SMTPCORP X-Report-Abuse: Please forward a copy of this message, including all headers, to Subject: [FFmpeg-devel] [PATCH 2/2] avdevice/decklink: addition of absolute wallclock option for pts source 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 Cc: Vishwanath Dixit MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Vishwanath Dixit --- doc/indevs.texi | 6 ++++-- libavdevice/decklink_common_c.h | 1 + libavdevice/decklink_dec.cpp | 3 +++ libavdevice/decklink_dec_c.c | 5 +++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/doc/indevs.texi b/doc/indevs.texi index 36aef49..0bc8e6a 100644 --- a/doc/indevs.texi +++ b/doc/indevs.texi @@ -298,11 +298,13 @@ Sets the audio input source. Must be @samp{unset}, @samp{embedded}, @item video_pts Sets the video packet timestamp source. Must be @samp{video}, @samp{audio}, -@samp{reference} or @samp{wallclock}. Defaults to @samp{video}. +@samp{reference}, @samp{wallclock} or @samp{abs_wallclock}. +Defaults to @samp{video}. @item audio_pts Sets the audio packet timestamp source. Must be @samp{video}, @samp{audio}, -@samp{reference} or @samp{wallclock}. Defaults to @samp{audio}. +@samp{reference}, @samp{wallclock} or @samp{abs_wallclock}. +Defaults to @samp{audio}. @item draw_bars If set to @samp{true}, color bars are drawn in the event of a signal loss. diff --git a/libavdevice/decklink_common_c.h b/libavdevice/decklink_common_c.h index ac6563a..d726190 100644 --- a/libavdevice/decklink_common_c.h +++ b/libavdevice/decklink_common_c.h @@ -28,6 +28,7 @@ typedef enum DecklinkPtsSource { PTS_SRC_VIDEO = 2, PTS_SRC_REFERENCE = 3, PTS_SRC_WALLCLOCK = 4, + PTS_SRC_ABS_WALLCLOCK = 5, } DecklinkPtsSource; struct decklink_cctx { diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp index 1fd40ca..6bbfe62 100644 --- a/libavdevice/decklink_dec.cpp +++ b/libavdevice/decklink_dec.cpp @@ -607,6 +607,7 @@ static int64_t get_pkt_pts(IDeckLinkVideoInputFrame *videoFrame, res = videoFrame->GetHardwareReferenceTimestamp(time_base.den, &bmd_pts, &bmd_duration); break; case PTS_SRC_WALLCLOCK: + case PTS_SRC_ABS_WALLCLOCK: { /* MSVC does not support compound literals like AV_TIME_BASE_Q * in C++ code (compiler error C4576) */ @@ -652,6 +653,8 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( ctx->frameCount++; if (ctx->audio_pts_source == PTS_SRC_WALLCLOCK || ctx->video_pts_source == PTS_SRC_WALLCLOCK) wallclock = av_gettime_relative(); + else if(ctx->audio_pts_source == PTS_SRC_ABS_WALLCLOCK || ctx->video_pts_source == PTS_SRC_ABS_WALLCLOCK) + wallclock = av_gettime(); // Handle Video Frame if (videoFrame) { diff --git a/libavdevice/decklink_dec_c.c b/libavdevice/decklink_dec_c.c index 6fb5ffe..c8f6f35 100644 --- a/libavdevice/decklink_dec_c.c +++ b/libavdevice/decklink_dec_c.c @@ -64,12 +64,13 @@ static const AVOption options[] = { { "analog_xlr", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 4}, 0, 0, DEC, "audio_input"}, { "analog_rca", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 5}, 0, 0, DEC, "audio_input"}, { "microphone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 6}, 0, 0, DEC, "audio_input"}, - { "audio_pts", "audio pts source", OFFSET(audio_pts_source), AV_OPT_TYPE_INT, { .i64 = PTS_SRC_AUDIO }, 1, 4, DEC, "pts_source"}, - { "video_pts", "video pts source", OFFSET(video_pts_source), AV_OPT_TYPE_INT, { .i64 = PTS_SRC_VIDEO }, 1, 4, DEC, "pts_source"}, + { "audio_pts", "audio pts source", OFFSET(audio_pts_source), AV_OPT_TYPE_INT, { .i64 = PTS_SRC_AUDIO }, 1, 5, DEC, "pts_source"}, + { "video_pts", "video pts source", OFFSET(video_pts_source), AV_OPT_TYPE_INT, { .i64 = PTS_SRC_VIDEO }, 1, 5, DEC, "pts_source"}, { "audio", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = PTS_SRC_AUDIO }, 0, 0, DEC, "pts_source"}, { "video", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = PTS_SRC_VIDEO }, 0, 0, DEC, "pts_source"}, { "reference", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = PTS_SRC_REFERENCE}, 0, 0, DEC, "pts_source"}, { "wallclock", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = PTS_SRC_WALLCLOCK}, 0, 0, DEC, "pts_source"}, + { "abs_wallclock", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = PTS_SRC_ABS_WALLCLOCK}, 0, 0, DEC, "pts_source"}, { "draw_bars", "draw bars on signal loss" , OFFSET(draw_bars), AV_OPT_TYPE_BOOL, { .i64 = 1}, 0, 1, DEC }, { "queue_size", "input queue buffer size", OFFSET(queue_size), AV_OPT_TYPE_INT64, { .i64 = (1024 * 1024 * 1024)}, 0, INT64_MAX, DEC }, { "audio_depth", "audio bitdepth (16 or 32)", OFFSET(audio_depth), AV_OPT_TYPE_INT, { .i64 = 16}, 16, 32, DEC },