On 8/31/2019 7:10 AM, fumoboy...@me.com wrote: > From: fumoboy007 <fumoboy...@me.com> > > If the user omits `AVSEEK_FLAG_ANY`, then the result of the seek should be a > keyframe. `ff_gen_search` did not respect that contract because it had no > good way to determine whether a timestamp returned by `read_timestamp` was > for a keyframe packet. > > Therefore, we introduce `read_timestamp2`, which adds a new parameter named > `prefer_keyframe`. This new parameter tells the input format whether to skip > non-keyframe packets. The parameter is named `prefer_keyframe` instead of > something like `keyframe_only` because some formats do not distinguish > between keyframe and non-keyframe packets. > > This commit adds the new function and deprecates the old function. Subsequent > commits will migrate input formats to the new function. > > Signed-off-by: fumoboy007 <fumoboy...@me.com> > --- > libavformat/avformat.h | 9 +++++++ > libavformat/internal.h | 6 +++-- > libavformat/nutdec.c | 6 ++--- > libavformat/utils.c | 56 +++++++++++++++++++++++++++++++++--------- > 4 files changed, 60 insertions(+), 17 deletions(-) > > diff --git a/libavformat/avformat.h b/libavformat/avformat.h > index 6eb329f13f..1db548663c 100644 > --- a/libavformat/avformat.h > +++ b/libavformat/avformat.h > @@ -741,6 +741,7 @@ typedef struct AVInputFormat { > * Get the next timestamp in stream[stream_index].time_base units. > * @return the timestamp or AV_NOPTS_VALUE if an error occurred > */ > + attribute_deprecated > int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, > int64_t *pos, int64_t pos_limit); > > @@ -781,6 +782,14 @@ typedef struct AVInputFormat { > * @see avdevice_capabilities_free() for more details. > */ > int (*free_device_capabilities)(struct AVFormatContext *s, struct > AVDeviceCapabilitiesQuery *caps); > + > + /** > + * Get the next timestamp in stream[stream_index].time_base units. > + * @param prefer_keyframe Whether to skip over non-keyframe packets (if > possible). > + * @return the timestamp or AV_NOPTS_VALUE if an error occurred > + */ > + int64_t (*read_timestamp2)(struct AVFormatContext *s, int stream_index, > + int64_t *pos, int64_t pos_limit, int > prefer_keyframe); > } AVInputFormat; > /** > * @} AVInputFormat.read_timestamp() is not a public field. There's no need to deprecate it and add a replacement. Just change it as you see fit, making sure to update all demuxers that may use it. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".