From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTPS id B34BF4D10D
	for <ffmpegdev@gitmailbox.com>; Wed, 16 Apr 2025 05:07:39 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D810B687CCC;
	Wed, 16 Apr 2025 08:07:34 +0300 (EEST)
Received: from EUR03-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur03olkn2044.outbound.protection.outlook.com [40.92.57.44])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2CEAA687BAE
 for <ffmpeg-devel@ffmpeg.org>; Wed, 16 Apr 2025 08:07:28 +0300 (EEST)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=jJQzEi0FPltXFkGXXKi0On+G7dl8Hq7NG3fHkySZM4sVCRmkwZRFTkkMWh74shE2cA9VMddJXmehBs/GBJQxbpiZUyICDmpXLOLbDYzUTwOQ0qG94ateIPUXwCB/Z9/TuestUDjI9k1bLgV2OE8W6BqyjpSNGs73dKfxNx4LemYQ3A+DIEvnD0wA9rhzBz3T2hB8Q8afjmTod0bkDT5dBOHe0BngxO/PMe1rVJvG9qkA4RcXI2WccUhXcfA5LNxXZu80fVuGdx3u3gZCjXl93WgCWlnAljVHtmX+EShBf4iPDC8VhCdpr0W6B6owBy6L/En1PP2fyLUqkwuWFcuW9g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 
 s=arcselector10001;
 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=opEblsSVJ3drwauCrC/m9xIExWwqQQoBNLHj8vIDSL8=;
 b=BW6vISiZ3v1f7orcXfeZux0eJoSpnGJA7UV8aHbhfBzRbeviu/oP5jDjzJHc7dcPvyUCXeopWqgR0zg1xbAeNY2JsMvlceeDGAsiJSuV0+DIMgUpiCX6p80DMLijxzqnXy2qqzfoBIzTlD9uarQOvkbxlmqJpKBU35NscEAcyhS8tyt90LMThwELcvhV/udrSpQ4vEOwcqKGqzo7FJZJj7mm7Kp3hlzj7L0KWT24IREAYsP0K3sr7bHr+Dun2TjLwVO4Ua7istmxtarc0+S1vEplvpVM1VNC2W4RBzSu0Z5KG7eGA0WqGYpXJrT7T5eo3z7rUzPQkgCb8XJrN/tGCw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none;
 dkim=none; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=opEblsSVJ3drwauCrC/m9xIExWwqQQoBNLHj8vIDSL8=;
 b=p583OD8ys9keVG2jxUl7d6vr3WYzvKqRlfIs5dUE39H7S0tLC8YWOqAbUt4NvJg6OvNAhn2SwV1iOSV0iuZvBcisTCNToJm0fWdEdC1Ivoj5Uji0J5zsYGwEWXcOqtNnkOUOs3Wu1uJVAr/UE2LgoouSB7MMEDY27pfUzwvGZIci4r7FBa4a0VnfHXyUEss0A6TwNjRPUMoS9ssq2Vclo7vQ9ZonnwVboOZDGVmOoIUcK+QAJW9bxS3S3CKpHHl8P4tnjsiPYv+0cjU4CukrAwzNSnAaTncLtVdUbt9IPmuj8bJwJsgsoQPNjBpblrTwphcM12qQCKAD+psGKQte2g==
Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17)
 by PR3P250MB0257.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:17c::20) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.19; Wed, 16 Apr
 2025 05:07:26 +0000
Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM
 ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM
 ([fe80::d6a1:e3af:a5f1:b614%5]) with mapi id 15.20.8655.012; Wed, 16 Apr 2025
 05:07:26 +0000
Message-ID: <GV1P250MB0737A24C4C3EDFE7588D73B48FBD2@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM>
Date: Wed, 16 Apr 2025 07:07:25 +0200
User-Agent: Mozilla Thunderbird
To: ffmpeg-devel@ffmpeg.org
References: <20250415104439.13431-1-ffmpeg@gyani.pro>
Content-Language: en-US
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
In-Reply-To: <20250415104439.13431-1-ffmpeg@gyani.pro>
X-ClientProxiedBy: FR2P281CA0162.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:99::12) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM
 (2603:10a6:150:8e::17)
X-Microsoft-Original-Message-ID: <2886b970-afde-42c5-8e52-9e53043ab566@outlook.com>
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|PR3P250MB0257:EE_
X-MS-Office365-Filtering-Correlation-Id: 75c7db48-3ab9-48e6-9b71-08dd7ca4945d
X-Microsoft-Antispam: BCL:0;
 ARA:14566002|7092599003|6090799003|15080799006|461199028|5072599009|19110799003|8060799006|56899033|440099028|3412199025|41001999003;
X-Microsoft-Antispam-Message-Info: =?utf-8?B?KzY4eG9VSEt2TTVkSGJBcHlSTUNGSEhjSWRiKzZQd3RSbWNMTml2NVRKWVhH?=
 =?utf-8?B?YjRiWmZRYTJqYVJrMmFCQ0p0Z3FBQlMwRjlFZ3pjeFE1RUdqQVIzZFBPUmhs?=
 =?utf-8?B?aE1CUUpuTEZJU0ZKQStLaWlENXBDV0FsUVlQeXRvMXJ3SFJEek1TcDFlSjYy?=
 =?utf-8?B?Qlg1NVRDMHgxakh2RjhQcks5V2Q0SVpoajJiY3hWbmoyNlE2Q3hIQzM1K1Fn?=
 =?utf-8?B?b1RHeVFLN0dncXQxUHFrM1NLQU5BTHlTWWdXeDdpU0lCVHJUOXQyOEdvUDcr?=
 =?utf-8?B?bjJQREJaMGlaSktKcUpLVFRSd0xrWjFBeUVlRkEwdkVPTUtsNUE4Y3FOOCt0?=
 =?utf-8?B?Nk1pWU9IanNEZGgxRjN4YnpvWUxuaFZBczRGM0xNczNQYk8vUjZhcEFJREdB?=
 =?utf-8?B?SlFHMzBvUm9kTm4vMXRQekV4YkdoTzE0YVI4aHpBcmRSMFNXaXlML09iNFFw?=
 =?utf-8?B?RjhGVG1NT2IzS0ZtczZOL1ZONGFYYVFkOG52OXA4Qzd1WjVNRTlrZldSRTBU?=
 =?utf-8?B?R21MNkMwSVlZc3h6emNkY3NPWXRvUkhXbVZLUkNCdjNVRE1xekJmZ2dmbnVs?=
 =?utf-8?B?aW5RNDgzalV4cnZodTdaTCs2d3JaaGV1bmJHZE1JcDZsUmVKRXhabTU4NkdT?=
 =?utf-8?B?b3Z5Y1JnU001TGpNbURXUXQ4NVJxdjN5OE1Hbyt6MU9HS3JSenVIUlRjT21L?=
 =?utf-8?B?MHJiSWlFY0cxNGI0VW9Rc29uUWFEQTZSaVZ2YjVEdmFvbEhNTVFqL1NwSHJo?=
 =?utf-8?B?YjVSSzhBNHhMb3prRHVsbi9BVzJEUEZqdlowcnpKZ2JTUTMrV3NRT281Tlg5?=
 =?utf-8?B?czhZaCtXSHg2cVFuQmxsbzU5MXNUNDI3dGY1TXR4WmpmN3FTSmlTK05UMk5H?=
 =?utf-8?B?UUR0T0xOZnJKTDE5cUdGQnc2d2hySTNOakV3Vnh0RVZSRU5odE9qUW03MCtu?=
 =?utf-8?B?QTlDWHBYSDg0elRjK3F0RDVEc3k4UTVyM3VTUkZucWNxSmJMdWFwZmJoSVA5?=
 =?utf-8?B?Q1lUa0JERXFyeDd6ZEtFZUZVelhoOXRFNHI1c24rY2dRa0ZpWU11QlJGSmdX?=
 =?utf-8?B?UmJJaWVXbWpBR1VtOFNUbUYwVEY2NTVsc29RbDhSN0JlT05vR2FsZzFleXJm?=
 =?utf-8?B?TVNoUDVvMk03dnNqOVQ2czJObnlYSU5OR1JjRzZaWFhjVkp2amJxTGRqY3Vm?=
 =?utf-8?B?eFNKc090QmlHMkRSci9HK3YyRE4vTXVMNzNwK25RVjhxRlNETWtnUlg2dFVR?=
 =?utf-8?B?RDNIMzl6enFPakR2TjN0ZDRvYkpObmVDeVZ2R0N6MVZSQTNaRUR3cWVQeDU4?=
 =?utf-8?B?clVHZFNjL3kwSzh4bENMalNVdk1SbFhaNmM5c3R5QnFzQU4zNzZ4K2g5bCt3?=
 =?utf-8?B?eHM1Sk5yQ01pUjhaeE0xS1dtelB0TDZ5SUsrOWhuWFlzWXRHTUN5cnFTRXgz?=
 =?utf-8?B?RjkxcXMvUUNubDZla294K1dWQ1c5U3RjZGE5UThMZFhJcmlPRDM1dlBZa2dZ?=
 =?utf-8?B?RkhqWVFPZUNGYnZvZXYxbTRaV21MYkl4bS9ObUxOdzA4d0dCcElYbEF0ZG0z?=
 =?utf-8?Q?tgmQWBlNILXFtcNmmOHl+iHA4=3D?=
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?enNTcTBBb29RTTV0OHNqcFora0I5K3VuejVwZVZ1R3ZCcUtaTlFBNC9hTk5r?=
 =?utf-8?B?N0tzQUNmNHNsSVpiaGZJY0d6dlV4Q0ZOb3Y1WlhiL2FVYWVLRlNPV3Y2RTNF?=
 =?utf-8?B?enA3SWY5TThsUVpnNDc5REx1b2hoTzI4ZXRsQ29VSkRiSllMR0tvYmt1dnI4?=
 =?utf-8?B?TG5vdHlnYkl2NzdnZ0dyVUp1UGp5bkZHNTJDbjJBdUVFQjUxVjNoTVZ6T0c4?=
 =?utf-8?B?MFp3NHlpSEpSZjljS25WT0pFNFBydDdHU0RUcXVZckEvN05CR1pWdHo4VlpC?=
 =?utf-8?B?Ynp2RnN0QTdNQnI5UkxSaTRXOU85M1BqYk82akZqaFVxbVg0d3BsMEV0cmxQ?=
 =?utf-8?B?OGcwRVZmKzc3RklRSFJTdXZ4aE8wL0I5ZkMrc3FrU0t5RzgzbzhnenFwaWhh?=
 =?utf-8?B?dk8yMEIxYXVHMC9LRVlOMXhCcjZqU3VwVTJBRE14aURQSkl1MmxIOW1ad0pG?=
 =?utf-8?B?cUh4cFRvSnVkS0o2L1lKQ2hNR0pWempraEQ5SVRrUUIvb1hMdi96NWxMMGJv?=
 =?utf-8?B?OS9EQm5MSDBtMzNpTEluVUlqbGZLUjFDaDBsTTNpYVZQVmlGcDdTck1xdU5W?=
 =?utf-8?B?OFJwZUkvZkQ0U2gwZzhpeFZ4Y040ZkJvczZsaXM5Q3BJVjM5Zzl2elZPay9R?=
 =?utf-8?B?ZWFRRWFOdUN0NjJXcW5pRmRBeWxZT1pveGFoek9ick45WGNrdkx4OXFESVhM?=
 =?utf-8?B?cFcyK3hWUUVVczBVSi9IbmtFSkVZcFJqMEplNEQ1RFFkOXk3d0YrL01CcGVl?=
 =?utf-8?B?N1VIeE41Q0hUczMzUkt3eDJhdnlkWWpJYXYwdXZ3cnhxTXgyU0xZcGdxZFZF?=
 =?utf-8?B?SFJ0Wi9BUVEvR2pDRkd6OGNOS0tzWVFMang3SlZYSjJWT0NhWEJFOGFDTDEx?=
 =?utf-8?B?d08zanhDcFkxaTZONWNNR3pFWnF1RXZjSE9ZeUpWY1BXSnAwYk1Gd0F1WVJD?=
 =?utf-8?B?N2pPaE9mUWdNUWxEOGU5SU85Z2l6KzZwemtNYnBjSnhqdm4yY2lmNE4vY3Zh?=
 =?utf-8?B?RlVaWlB0b2VocmhwU05OSUVNOFMxTXBXYk9GcWgxaFFxeXVsNkY2ZzkwWk5k?=
 =?utf-8?B?c2RvYWNBZ1lkemlVWUVqajB1WWY2SlJsT29oaDNrSGpIb0VjR2tUTEJVRUZ2?=
 =?utf-8?B?UkkrOHNaSnU1bEx0bVVQaW1QSXBQeDN6OUtCQ2RsdVRsZ1Vua0VtNmNrS1E0?=
 =?utf-8?B?S2JONGt2dFJlenhpdlVzNzFzN0lQSERDSGRJb0x2cW9BRGtKaW93Y3hwTklX?=
 =?utf-8?B?ZTUxYTRHY3JUMWxUSldrMXV2RmdudkUwTXVrbHNjMVQvdEh3NWhxaWlWSVcx?=
 =?utf-8?B?bWJ1TXpiWEtRdXVScmU1R1M0cXIwN2loYlkvMWk4MHVSRi9zMWZzTTRvSmkr?=
 =?utf-8?B?aTdLaU95NnlJVWFNYjFVNHlscHFRK2lWQlFYK01UZnJIUEczZ21OSlVhTWRy?=
 =?utf-8?B?SHRZUndVK2toeTdiWE8rZGVmY1B3M0RHenBsS1hQNXdXcm53UzB5bkU2LzJy?=
 =?utf-8?B?azdjaUFTaEtEbGYzNEU0Y1hUOENFTkF4K3Y1cVZNdzJ0Q3paUEgzZ3MxaEZ6?=
 =?utf-8?B?VEJTdS9nTmMrbXFXZ1hjZ09qRzkrd3MyWUc0ejFtdTg4OVhYNzhLSGJucmxW?=
 =?utf-8?B?STN4NE5WUTZhVEpDcm9XMzVEL3RVQUdaZ3VlYzJyNDQ0bE1SNkYyT0Fod0dm?=
 =?utf-8?B?M3J2bVk2Z2pBYlRYUHlXWWJHSmh4MFNoaDJ5U1dsRzNYMFpmeGwyWWR3eEZx?=
 =?utf-8?Q?w1dyxLh2zGD6+9wvxgCScQuzLfwr+kvY4M2Wx5+?=
X-OriginatorOrg: outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 75c7db48-3ab9-48e6-9b71-08dd7ca4945d
X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Apr 2025 05:07:26.5418 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa
X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3P250MB0257
Subject: Re: [FFmpeg-devel] [PATCH v2 1/2] avformat: add
 avformat_query_seekable
X-BeenThere: ffmpeg-devel@ffmpeg.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/GV1P250MB0737A24C4C3EDFE7588D73B48FBD2@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>

Gyan Doshi:
> Utility function to report seekability features for a given input.
> 
> Useful for ffprobe and to extend seek possibilities in fftools.
> ---
> v2:
>    made constants more descriptive
>    add exception for rtsp false negative seekability
> 
>  doc/APIchanges         |  3 +++
>  libavformat/avformat.h | 22 ++++++++++++++++++
>  libavformat/seek.c     | 53 ++++++++++++++++++++++++++++++++++++++++++
>  libavformat/version.h  |  2 +-
>  4 files changed, 79 insertions(+), 1 deletion(-)
> 
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 65bf5a9419..879f56b572 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2025-03-28
>  
>  API changes, most recent first:
>  
> +2025-04-xx - xxxxxxxxxx - lavf 62.1.100 - avformat.h
> +  Add avformat_query_seekable().
> +
>  2025-04-07 - 19e9a203b7 - lavu 60.01.100 - dict.h
>    Add AV_DICT_DEDUP.
>  
> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
> index 498c3020a5..f9da5e9e79 100644
> --- a/libavformat/avformat.h
> +++ b/libavformat/avformat.h
> @@ -2338,6 +2338,28 @@ int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp,
>   */
>  int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);
>  
> +#define AVSEEKABLE_IO_NORMAL       0x00000001 ///< I/O is seekable like a local file
> +#define AVSEEKABLE_IO_PROTOCOL     0x00000002 ///< I/O seek is through protocol request via avio_seek_time
> +#define AVSEEKABLE_VIA_DEMUXER     0x00000004 ///< demuxer has a seek function
> +#define AVSEEKABLE_VIA_PKTSCAN     0x00000008 ///< seek is performed by consuming and scanning packet timestamps
> +#define AVSEEKABLE_BY_TIME         0x00000100 ///< seek target can be a timestamp
> +#define AVSEEKABLE_BY_BYTE         0x00000200 ///< seek target can be in bytes
> +#define AVSEEKABLE_BY_FRAME        0x00000400 ///< seek target can be a frame index
> +#define AVSEEKABLE_PROP_PTS        0x00010000 ///< seek target timestamp is expected to be PTS
> +#define AVSEEKABLE_PROP_FAST       0x00020000 ///< demuxer allows fast but inaccurate seeking
> +#define AVSEEKABLE_PROP_FWDONLY    0x00040000 ///< set seek will be equal or forward of specified seek point
> +
> +/**
> + * Report if and how a seek can be performed in a given input.
> + *
> + * @param s            media file handle
> + *
> + * @return 0 if no seek can be performed on input,
> + *         -1 if the fmt ctx is NULL or is not an input
> + *         else return AVSEEKABLE_ bitflags indicating seekability features.
> + */
> +int avformat_query_seekable(AVFormatContext *s);
> +
>  /**
>   * Discard all internally buffered data. This can be useful when dealing with
>   * discontinuities in the byte stream. Generally works only with formats that
> diff --git a/libavformat/seek.c b/libavformat/seek.c
> index c0d94371e6..8be1bdec30 100644
> --- a/libavformat/seek.c
> +++ b/libavformat/seek.c
> @@ -712,6 +712,59 @@ int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts,
>      return ret;
>  }
>  
> +int avformat_query_seekable(AVFormatContext *s)
> +{
> +    int ret = 0;
> +
> +    if (!s || !s->iformat)
> +        return -1;
> +
> +    if ( strcmp(s->iformat->name, "rtsp") && (!(s->pb && s->pb->seekable) || s->ctx_flags & AVFMTCTX_UNSEEKABLE) )
> +        return 0;
> +
> +    if (s->pb->seekable & AVIO_SEEKABLE_NORMAL)
> +        ret |= AVSEEKABLE_IO_NORMAL;
> +
> +    if (s->pb->seekable & AVIO_SEEKABLE_TIME)
> +        ret |= AVSEEKABLE_IO_PROTOCOL;
> +
> +    if (ffifmt(s->iformat)->read_seek || ffifmt(s->iformat)->read_seek2)
> +        ret |= AVSEEKABLE_VIA_DEMUXER;

The existence of these functions does not imply that a given input is
seekable: E.g. some read_seek functions rely on an index being present
in the file and are useless/not better than reading linearly in case the
index is absent.

> +
> +    if (ffifmt(s->iformat)->read_timestamp && !(s->iformat->flags & AVFMT_NOBINSEARCH))
> +        ret |= AVSEEKABLE_VIA_PKTSCAN;
> +
> +    if (!(s->iformat->flags & AVFMT_NOTIMESTAMPS))
> +        ret |= AVSEEKABLE_BY_TIME;
> +
> +    // TODO: incomplete, a few demuxers don't set flag but error out on byte seek
> +    if (!(s->iformat->flags & AVFMT_NO_BYTE_SEEK))
> +        ret |= AVSEEKABLE_BY_BYTE;
> +
> +    // TODO: no flag for frame seeking. Add flag and enable this check
> +    if (s->iformat->flags & 0)
> +        ret |= AVSEEKABLE_BY_FRAME;
> +
> +    if (s->iformat->flags & AVFMT_SEEK_TO_PTS)
> +        ret |= AVSEEKABLE_PROP_PTS;
> +
> +    // TODO: flag exists but not added to the demuxers which support it
> +    if (s->iformat->flags & AVFMT_FLAG_FAST_SEEK)
> +        ret |= AVSEEKABLE_PROP_FAST;
> +
> +    if (!(ret & AVSEEKABLE_VIA_DEMUXER) && ret & AVSEEKABLE_VIA_PKTSCAN)
> +        ret |= AVSEEKABLE_PROP_FWDONLY;
> +
> +    if ( !(ret & AVSEEKABLE_VIA_DEMUXER) &&
> +         !(ret & AVSEEKABLE_VIA_PKTSCAN) &&
> +         !(ret & AVSEEKABLE_BY_BYTE) &&
> +         !(ret & AVSEEKABLE_IO_PROTOCOL) &&
> +         (s->iformat->flags & AVFMT_NOGENSEARCH) )
> +        ret = 0;
> +
> +    return ret;
> +}
> +
>  /** Flush the frame reader. */
>  void ff_read_frame_flush(AVFormatContext *s)
>  {
> diff --git a/libavformat/version.h b/libavformat/version.h
> index 752aac16f7..a7c80dc564 100644
> --- a/libavformat/version.h
> +++ b/libavformat/version.h
> @@ -31,7 +31,7 @@
>  
>  #include "version_major.h"
>  
> -#define LIBAVFORMAT_VERSION_MINOR   0
> +#define LIBAVFORMAT_VERSION_MINOR   1
>  #define LIBAVFORMAT_VERSION_MICRO 100
>  
>  #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \

_______________________________________________
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".