From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id E2D5146B27 for ; Thu, 2 Nov 2023 13:01:31 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BA4FD68CC71; Thu, 2 Nov 2023 15:01:28 +0200 (EET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2045.outbound.protection.outlook.com [40.107.21.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A2D2568C93C for ; Thu, 2 Nov 2023 15:01:21 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TGgGLW0Y0ICNv3dcv22PGo1+MPslUAdAGrnseIkw269r0RcnBSGXRR00yxghLtvx9tvyENWDivpTrJg/glpYWhw3FyMzY+TDZfsTbIJU5ZJDTL8QjMwkZ9wBO6h2KytbO1/x71CEP2pG1AsMqxYqQKISb7r98J7O470J9bAG7fCDUK7VAbNhxYitfVLhR3E9EEICjsCuJVnpFt6TJvD8VHqSypjenvosh884CBya7w0AS8d4YHBxqmMUzv7UN1oyVb5yI1lkK/E/pwBJbVyuRCAmmjDB75NMRoybMAF6jVKqnhZlKQpOpTHEWUnldV9lyq/b2/Y1tJaMLTXc10k/2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bkW48pZUBrD0USzaJeAMsD7KySWfnZXgPiD4DI8pfBM=; b=Q9JO9jcPuV86HjJqZYCOeQ2KQK9NnMgFiLhdvmosc8IlyLaxDhxOiDYhKjUmifZ37PNDmww+XG4w4DsjLwKNLqzF7Gz7m7nFRThwfAuD4DSBzTUwWGOb6QViNqhutM7atsvu0Y/ogHJT/Muuf+nKuBq/tLLyQ6xqCa0LaS1Ri6cN4kNA9B/71nD85hNQ+Lc6Iurv/Lnrg9+AQYa5XmsIcHCCkAOM+hAqEaeh7VoZwOYDmtuiK4NTLBvE1jz1KeA2cGfBYqWeDJ7On2Q+8qeFbZ2ktiDQfemjwBuKoc1OZNkY0LUrdXttHWu7yOqHHBjHSC0+V2rr16iccI7HCJgMWg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nativewaves.com; dmarc=pass action=none header.from=nativewaves.com; dkim=pass header.d=nativewaves.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nativewaves.onmicrosoft.com; s=selector2-nativewaves-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bkW48pZUBrD0USzaJeAMsD7KySWfnZXgPiD4DI8pfBM=; b=bjcYlYh+puZddo4dmy5ypZ4c8In/3S9OHNedTT3rQtl6MysEF+2sQo800/E3pcWvrdlqRfohuNu7IptzmCMxxQrL6G0CDHduwx/HIFb/CE1nsNPuEBskjq4oq/OaVhsTpnzjhTeTnw6FGb1CNFEkjz89rxbWGNKG9yWiifoLU2s= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nativewaves.com; Received: from PA4PR03MB7167.eurprd03.prod.outlook.com (2603:10a6:102:10a::8) by PAWPR03MB9761.eurprd03.prod.outlook.com (2603:10a6:102:2e4::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.21; Thu, 2 Nov 2023 13:01:18 +0000 Received: from PA4PR03MB7167.eurprd03.prod.outlook.com ([fe80::57d3:bdcc:82c5:f0a]) by PA4PR03MB7167.eurprd03.prod.outlook.com ([fe80::57d3:bdcc:82c5:f0a%7]) with mapi id 15.20.6907.032; Thu, 2 Nov 2023 13:01:18 +0000 Message-ID: Date: Thu, 2 Nov 2023 14:01:16 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <2685f0cc-78f7-4ef7-833a-a56223fa6236@nativewaves.com> From: Michael Riedl In-Reply-To: <2685f0cc-78f7-4ef7-833a-a56223fa6236@nativewaves.com> X-ClientProxiedBy: VI1P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:802:2b::28) To PA4PR03MB7167.eurprd03.prod.outlook.com (2603:10a6:102:10a::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PA4PR03MB7167:EE_|PAWPR03MB9761:EE_ X-MS-Office365-Filtering-Correlation-Id: e4c0a4bd-3433-4994-b0c8-08dbdba3cdb4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: E3xOkH7qP/UKOFIkh1CZ8yqkmTlnOSow7Xk8u7jbVybW7vBsW2eK2AopwHJ2zNJgiy+eUdYT6/xZrzuM0d4kZgbxvlPhWR13exBacewHVOGHZzJDtp2LTQYLgyMb8n7OeYVod2ZQYOJzKFyM9D4SDLrYh4mff49LElUjTKY5pOKq+RLKXUvwfw3mYVyz+rK78hBo3UKqIT/j6C5aGjInLcVdexNCkPMqFJZiFB35leFnp2XD//DIU/s9qWZbteqPaW6/7pao61mBA/oJqaS+s1RusNTUcXMtBNUSolI3lztSO5MJQSydsthXhJLfPxZgCGaIsWW+p63sv3dMr+tImWrXE69QU2yvmUdfAcL4xju2ZXhI7Y4fCX5xyfeqeiJnfHjGfs5pQTElLF4w/5Hz+1UOGCTMG4orpZBK+pElqiQe0bAETMN49vLYz+ZWn29ccyehCRgAa3wWu/pYlnn0YLxSE6LXtUZ8XhBSBwWiVN6V61/JDbjpbrYxkSr2x3jayvZVNro1SSLitebdHYQKC+bibx6WYZncFwsxKgURo5w3P9WWVBeCXCnl+h28DXd65WixhXiHHNwhWZvtQGAGZd2vmDU+sZKudec4ntPsmsBdTRZWjEkRCfTw4Ix4pfIddkNJSySAZlwueGJ74gRmVroAh9oUNCZ9gjH0a51s7JfbpMVmtawAC0TNHEeUx0BJZeLJstZ2oHLV5v4x3zopg10RmXQwBxcMsg+4JKU+Nhg= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PA4PR03MB7167.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(136003)(366004)(376002)(346002)(39830400003)(396003)(230173577357003)(230922051799003)(230273577357003)(186009)(1800799009)(451199024)(64100799003)(26005)(41300700001)(6506007)(6512007)(53546011)(2616005)(38100700002)(86362001)(31696002)(36756003)(83380400001)(8936002)(6916009)(316002)(8676002)(66946007)(66556008)(66476007)(5660300002)(2906002)(6486002)(31686004)(44832011)(478600001)(131093003)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SjNxOXJyRjM4TEgxZjNVQjdMNW1VQmRzNWpnNDFOYWJHZlBYbVMycVJ1dGJL?= =?utf-8?B?TEVtVUp5empld0pmbzZpS3k5Q2FvanBhSTNFRWdOaXFlWnIyUzIvTzVEaHla?= =?utf-8?B?T3AyUjE4RERvWHNrdWlaZVlNQktkZHExOXFFY1FUYmo5dmNnRzV1Q1h0VFJ4?= =?utf-8?B?Q2F2ZnNGTlJGMEE5ZHhDUEFPbVh3Zm52bFdnc2J2ZGlDS0xrWGpDaFNiU2FS?= =?utf-8?B?Qk4yTlh2QWt5QThoVnpWbVZnTGtzMHhuSEp3V0RNejVORnd5cUNIWEkwY3kv?= =?utf-8?B?dndyYmc3SEFFdVgxVG5ObXRnZ3RoeHd1OGgrOENOWXRPMEVWZ1pSSjZLZ2lU?= =?utf-8?B?SFdHUHFTaS84cjNXdzJUNmNMU3JjVUZVcE9zd2duWFBYdG53RzFpSHEwaTZt?= =?utf-8?B?dkJENzNMSjBpZnNSdWRCYkdYUEszemFBeS91ZnVreWRucFd3VGoydHhObCtt?= =?utf-8?B?RjZoWkdDK0t6ZW95M2hjYmhLN1BFK3lUMHpRa010L3Q0dEtUcjZmNkdBQ3gz?= =?utf-8?B?SkV6WVpoTGUxQmhIRDRHZ3VaMmZXT29BUTN1b2NuT29KMFIvbzZoZzNsdEFi?= =?utf-8?B?bWR6L1ZkWENYK0dhZ1VCVWtmZUM4MVprTVFWUEZVYysySnptZVNDajQ3QU1E?= =?utf-8?B?dzZ2YjV0VEI2dkhOc2xaOFpabWIxZVIvWllKc0x5WUhobnZLUURHZzRKMzNN?= =?utf-8?B?WXhTWGFBajJRVlVOTmpPUUc2eWhlRTlRS0JSMW5QWXNlbUtUb2I2dEJKUUFw?= =?utf-8?B?SnFoem5FOGUwR3k1SVovTk8wS0pBSktBeVJlY2hRMks3a21rc0lDSi80d1VL?= =?utf-8?B?VXUxV3FUU2IzNEFzTkZ4Zi9HeHJrcnlGRXZybTBKZElPVTA2T0tPQ3VVeitX?= =?utf-8?B?QmJRSnZDUnlHcm5UMHo3NFArcnJjMTlHUkh4U05OMW80TkZxdEVnbERRZGFN?= =?utf-8?B?VVFncWVlbHZva0hucldZYlMwaGQ5K2hZL29iVXdqTHVmRjBVRFUvUVAzVmFD?= =?utf-8?B?eHY5aFVFUzVkOGN2THhQcEV1eW44c3pUMENNM1VKZFBaSjZKZ3dJZ0lJVHQr?= =?utf-8?B?T1AwdStnc0NobU9YRHhoU1hRUTE2WnR2VmJnbmpqd3d2ZHh2Uk5XcXdYUGVj?= =?utf-8?B?cnY2eGFENDk3YTRsWE0wR3dGWEppalBRRUY5L0ZNazk0VDRULzJZZ1Q5b2Ri?= =?utf-8?B?R2grZnlGbGlGYzFFZVRIaFh3RTZFYTJPZHhqMXFLYUEvdW5UOGFJRGNvdWp4?= =?utf-8?B?VWpoRnhVaUFCb3pPSm1LSHhUei9NQ0tPRHl3b2NiL3FVWnZkSEpmS0s5WGxn?= =?utf-8?B?WW9IYUgyZlJ5OGxlUnpxeGlZSC94em5QRDNvR0Q3eUJ3V0JSNGlUYWcrL3Nw?= =?utf-8?B?QldaN3Q0T1VHbThFMjlCRGpZdVFPRCtZUGZCdHFSR0tsVCtCODFLUmhOMUY4?= =?utf-8?B?ZHJIeHVkUHhqVlZSV1JCWFR0VnFOa1ovUXVmekRkcHZ6ODBacVhLQVVRN21j?= =?utf-8?B?RXFyeUF1aGhVYnUxbUZMYys4bUdiTFAyKzg4eERZUitIZS9YZjRJa29Lc05a?= =?utf-8?B?amtMMlVaV29VVlByVm5keHMxV0hseUNxTU9VcmRZVURPMVh6OStXWERWeE9Q?= =?utf-8?B?VXRuNjJOSHVxKzBVOTc0dlZJY0J0MERrYmpYa3VYY1hLRlU5ZVFwVnlwSGwr?= =?utf-8?B?b3dPSisrODR0Q0VkckhCc2dGSldrTlVHQm94YzM5VkI4MHhFK24vRGpEZlQz?= =?utf-8?B?VG0rVS91VjRzREJzSGRvSDJEOE04anBwWjF3c015aGFuYUduVkRDbitYUHow?= =?utf-8?B?eXBMT2pUMGUwREJpcVkwOE5ia0VNVDJPNk1KaXp6YVBKMHlNV1BncStuS2hY?= =?utf-8?B?dEwwbWkrdStYTHVkMFhMd2UvNEdBQlE5bHBYQVhEK0JNaUJBc0NVQjVhYU9Y?= =?utf-8?B?U3ZSd0N5QjgrRUdPZmZpOUxyd25IVXFsY3duV2RoQlo0eTVZZmVXcmhJZWZn?= =?utf-8?B?a1B3djA3TWU1UHkyVGUvK2pOZXNWUWRTNE9lMEJrd2JPMUNPZWFFYXVlTFpn?= =?utf-8?B?emRQeFc5UFFYUTZmdExOakZqd1dWb01KYnIrbktUQkc4R0oyOC9pOWpDTE5u?= =?utf-8?B?bXQzY3RvTDNQSFU3YzFBNUIyRGI4cDE5S2U3SFk3ZjlyNnByc1FPNUJZbmRS?= =?utf-8?Q?Sx2skuIvaQrSWPFBC80HiVk=3D?= X-OriginatorOrg: nativewaves.com X-MS-Exchange-CrossTenant-Network-Message-Id: e4c0a4bd-3433-4994-b0c8-08dbdba3cdb4 X-MS-Exchange-CrossTenant-AuthSource: PA4PR03MB7167.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Nov 2023 13:01:18.1822 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4239718-b000-4513-8314-02ef46bd0276 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: X6oEQV+TG39yxHVGvEL4z3nZ8rbPcXhWHR/bh4qD4j/YVwYh+VQyRn/RcORijTEm8QGVX0VB4UlNUR449LFh5+O2M117wFRzwtvKaJcnNVY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR03MB9761 Subject: Re: [FFmpeg-devel] [PATCH] libavdevice/decklink: extend available actions on signal loss X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 9/25/23 13:58, Michael Riedl wrote: > Deprecate the option 'draw_bars' in favor of the new option 'signal_loss_action', > which controls the behavior when the input signal is not available > (including the behavior previously available through draw_bars). > The default behavior remains unchanged to be backwards compatible. > The new option is more flexible for extending now and in the future. > > The new value 'repeat' repeats the last video frame. > This is useful for very short dropouts and was not available before. > > Signed-off-by: Michael Riedl > --- > doc/indevs.texi | 16 ++++++++++++++++ > libavdevice/decklink_common.h | 1 + > libavdevice/decklink_common_c.h | 7 +++++++ > libavdevice/decklink_dec.cpp | 23 ++++++++++++++++++++++- > libavdevice/decklink_dec_c.c | 6 +++++- > 5 files changed, 51 insertions(+), 2 deletions(-) > > diff --git a/doc/indevs.texi b/doc/indevs.texi > index 863536a34d5..a985d58ce7f 100644 > --- a/doc/indevs.texi > +++ b/doc/indevs.texi > @@ -395,6 +395,22 @@ Defaults to @samp{audio}. > @item draw_bars > If set to @samp{true}, color bars are drawn in the event of a signal loss. > Defaults to @samp{true}. > +This option is deprecated, please use the @code{signal_loss_action} option. > + > +@item signal_loss_action > +Sets the action to take in the event of a signal loss. Accepts one of the > +following values: > + > +@table @option > +@item 1, none > +Do nothing on signal loss. This usually results in black frames. > +@item 2, bars > +Draw color bars on signal loss. Only supported for 8-bit input signals. > +@item 3, repeat > +Repeat the last video frame on signal loss. > +@end table > + > +Defaults to @samp{bars}. > > @item queue_size > Sets maximum input buffer size in bytes. If the buffering reaches this value, > diff --git a/libavdevice/decklink_common.h b/libavdevice/decklink_common.h > index 34ab1b96700..be666212e6c 100644 > --- a/libavdevice/decklink_common.h > +++ b/libavdevice/decklink_common.h > @@ -146,6 +146,7 @@ struct decklink_ctx { > DecklinkPtsSource video_pts_source; > int draw_bars; > BMDPixelFormat raw_format; > + DecklinkSignalLossAction signal_loss_action; > > int frames_preroll; > int frames_buffer; > diff --git a/libavdevice/decklink_common_c.h b/libavdevice/decklink_common_c.h > index 9c55d891494..53d2c583e7e 100644 > --- a/libavdevice/decklink_common_c.h > +++ b/libavdevice/decklink_common_c.h > @@ -37,6 +37,12 @@ typedef enum DecklinkPtsSource { > PTS_SRC_NB > } DecklinkPtsSource; > > +typedef enum DecklinkSignalLossAction { > + SIGNAL_LOSS_NONE = 1, > + SIGNAL_LOSS_REPEAT = 2, > + SIGNAL_LOSS_BARS = 3 > +} DecklinkSignalLossAction; > + > struct decklink_cctx { > const AVClass *cclass; > > @@ -68,6 +74,7 @@ struct decklink_cctx { > int64_t timestamp_align; > int timing_offset; > int wait_for_tc; > + DecklinkSignalLossAction signal_loss_action; > }; > > #endif /* AVDEVICE_DECKLINK_COMMON_C_H */ > diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp > index 11640f72caa..f6095c72359 100644 > --- a/libavdevice/decklink_dec.cpp > +++ b/libavdevice/decklink_dec.cpp > @@ -593,6 +593,7 @@ private: > int no_video; > int64_t initial_video_pts; > int64_t initial_audio_pts; > + IDeckLinkVideoInputFrame* last_video_frame; > }; > > decklink_input_callback::decklink_input_callback(AVFormatContext *_avctx) : _refs(1) > @@ -602,10 +603,13 @@ decklink_input_callback::decklink_input_callback(AVFormatContext *_avctx) : _ref > ctx = (struct decklink_ctx *)cctx->ctx; > no_video = 0; > initial_audio_pts = initial_video_pts = AV_NOPTS_VALUE; > + last_video_frame = nullptr; > } > > decklink_input_callback::~decklink_input_callback() > { > + if (last_video_frame) > + last_video_frame->Release(); > } > > ULONG decklink_input_callback::AddRef(void) > @@ -773,7 +777,7 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( > ctx->video_st->time_base.den); > > if (videoFrame->GetFlags() & bmdFrameHasNoInputSource) { > - if (ctx->draw_bars && videoFrame->GetPixelFormat() == bmdFormat8BitYUV) { > + if (ctx->signal_loss_action == SIGNAL_LOSS_BARS && videoFrame->GetPixelFormat() == bmdFormat8BitYUV) { > unsigned bars[8] = { > 0xEA80EA80, 0xD292D210, 0xA910A9A5, 0x90229035, > 0x6ADD6ACA, 0x51EF515A, 0x286D28EF, 0x10801080 }; > @@ -785,6 +789,8 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( > for (int x = 0; x < width; x += 2) > *p++ = bars[(x * 8) / width]; > } > + } else if (ctx->signal_loss_action == SIGNAL_LOSS_REPEAT) { > + last_video_frame->GetBytes(&frameBytes); > } > > if (!no_video) { > @@ -793,6 +799,12 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( > } > no_video = 1; > } else { > + if (ctx->signal_loss_action == SIGNAL_LOSS_REPEAT) { > + if (last_video_frame) > + last_video_frame->Release(); > + last_video_frame = videoFrame; > + last_video_frame->AddRef(); > + } > if (no_video) { > av_log(avctx, AV_LOG_WARNING, "Frame received (#%lu) - Input returned " > "- Frames dropped %u\n", ctx->frameCount, ++ctx->dropped); > @@ -1074,6 +1086,15 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx) > ctx->audio_pts_source = cctx->audio_pts_source; > ctx->video_pts_source = cctx->video_pts_source; > ctx->draw_bars = cctx->draw_bars; > + ctx->signal_loss_action = cctx->signal_loss_action; > + if (!ctx->draw_bars && ctx->signal_loss_action == SIGNAL_LOSS_BARS) { > + ctx->signal_loss_action = SIGNAL_LOSS_NONE; > + av_log(avctx, AV_LOG_WARNING, "Setting signal_loss_action to none because draw_bars is false\n"); > + } > + if (!ctx->draw_bars && ctx->signal_loss_action != SIGNAL_LOSS_NONE) { > + av_log(avctx, AV_LOG_ERROR, "options draw_bars and signal_loss_action are mutually exclusive\n"); > + return AVERROR(EINVAL); > + } > ctx->audio_depth = cctx->audio_depth; > if (cctx->raw_format > 0 && (unsigned int)cctx->raw_format < FF_ARRAY_ELEMS(decklink_raw_format_map)) > ctx->raw_format = decklink_raw_format_map[cctx->raw_format]; > diff --git a/libavdevice/decklink_dec_c.c b/libavdevice/decklink_dec_c.c > index 2159702c96b..7c0ef4f8c23 100644 > --- a/libavdevice/decklink_dec_c.c > +++ b/libavdevice/decklink_dec_c.c > @@ -94,12 +94,16 @@ static const AVOption options[] = { > { "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 }, > + { "draw_bars", "use option signal_loss_action instead" , OFFSET(draw_bars), AV_OPT_TYPE_BOOL, { .i64 = 1}, 0, 1, DEC | AV_OPT_FLAG_DEPRECATED }, > { "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 }, > { "decklink_copyts", "copy timestamps, do not remove the initial offset", OFFSET(copyts), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, DEC }, > { "timestamp_align", "capture start time alignment (in seconds)", OFFSET(timestamp_align), AV_OPT_TYPE_DURATION, { .i64 = 0 }, 0, INT_MAX, DEC }, > { "wait_for_tc", "drop frames till a frame with timecode is received. TC format must be set", OFFSET(wait_for_tc), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, DEC }, > + { "signal_loss_action", "action on signal loss", OFFSET(signal_loss_action), AV_OPT_TYPE_INT, { .i64 = SIGNAL_LOSS_BARS }, SIGNAL_LOSS_NONE, SIGNAL_LOSS_BARS, DEC, "signal_loss_action" }, > + { "none", "do not do anything (usually leads to black frames)", 0, AV_OPT_TYPE_CONST, { .i64 = SIGNAL_LOSS_NONE }, 0, 0, DEC, "signal_loss_action"}, > + { "bars", "draw color bars (only supported for 8-bit signals)", 0, AV_OPT_TYPE_CONST, { .i64 = SIGNAL_LOSS_BARS }, 0, 0, DEC, "signal_loss_action"}, > + { "repeat", "repeat the last video frame", 0, AV_OPT_TYPE_CONST, { .i64 = SIGNAL_LOSS_REPEAT }, 0, 0, DEC, "signal_loss_action"}, > { NULL }, > }; Ping _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".