[FFmpeg-devel] [PATCH v3 2/2] avformat: deprecated av_get_frame_filename() and av_get_frame_filename2()
Filip Mašić
shoutplenty at gmail.com
Mon Sep 23 17:25:35 EEST 2024
I don't mind; whatever gets this merged the fastest is best for me. I
wasn't aware there was an internal header, and I don't know why any of the
av_get_frame_filename functions are exposed. I'll add some comments
regardless:
1. Even though the function was previously externally documented as taking
frame numbers, it has been used for timestamps internally for the past 7
years, so I think updating the external documentation to "any number" makes
more sense. My patch deprecated all of the old APIs in favour of what we
now think the new API should be.
2. Was there a reason you didn't update img2enc frame_pts to use the new
internal function?
3. You might consider the documentation clarifications I made for the
parameters:
> + * @param path path with substitution template
> + * @param number the number to substitute
Thanks for the help with this.
On Mon, 23 Sept 2024 at 13:18, Zhao Zhili <quinkblack at foxmail.com> wrote:
>
>
> On Sep 23, 2024, at 18:18, Filip Mašić <shoutplenty at gmail.com> wrote:
>
> ---
> doc/APIchanges | 3 ++-
> libavfilter/vf_signature.c | 4 ++--
> libavformat/avformat.h | 22 ++++++++++++++++++----
> libavformat/img2dec.c | 10 +++++-----
> libavformat/segment.c | 4 ++--
> libavformat/utils.c | 2 +-
> libavformat/version_major.h | 2 +-
> libavformat/webm_chunk.c | 4 ++--
> 8 files changed, 33 insertions(+), 18 deletions(-)
>
>
> The doc of av_get_frame_filename2 says explicitly `number` is `frame
> number`,
> I prefer fix img2enc.c over add another API:
>
> https://ffmpeg.org//pipermail/ffmpeg-devel/2024-September/333820.html
>
>
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 9f091f5ec5..cbab71a408 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -3,7 +3,8 @@ The last version increases of all libraries were on
> 2024-03-07
> API changes, most recent first:
>
> 2024-09-xx - xxxxxxxxxx - lavf 61.7.100 - avformat.h
> - Add av_get_frame_filename3()
> + Deprecate av_get_frame_filename(), av_get_frame_filename2(),
> + and replace them with av_get_frame_filename3().
>
> 2024-09-18 - xxxxxxxxxx - lavc 61.17.100 - packet.h
> Add AV_PKT_DATA_LCEVC.
> diff --git a/libavfilter/vf_signature.c b/libavfilter/vf_signature.c
> index f419522ac6..37f3ff227e 100644
> --- a/libavfilter/vf_signature.c
> +++ b/libavfilter/vf_signature.c
> @@ -562,7 +562,7 @@ static int export(AVFilterContext *ctx, StreamContext
> *sc, int input)
>
> if (sic->nb_inputs > 1) {
> /* error already handled */
> - av_assert0(av_get_frame_filename(filename, sizeof(filename),
> sic->filename, input) == 0);
> + av_assert0(av_get_frame_filename3(filename, sizeof(filename),
> sic->filename, input, 0) == 0);
> } else {
> if (av_strlcpy(filename, sic->filename, sizeof(filename)) >=
> sizeof(filename))
> return AVERROR(EINVAL);
> @@ -673,7 +673,7 @@ static av_cold int init(AVFilterContext *ctx)
> }
>
> /* check filename */
> - if (sic->nb_inputs > 1 && strlen(sic->filename) > 0 &&
> av_get_frame_filename(tmp, sizeof(tmp), sic->filename, 0) == -1) {
> + if (sic->nb_inputs > 1 && strlen(sic->filename) > 0 &&
> av_get_frame_filename3(tmp, sizeof(tmp), sic->filename, 0, 0) == -1) {
> av_log(ctx, AV_LOG_ERROR, "The filename must contain %%d or %%0nd,
> if you have more than one input.\n");
> return AVERROR(EINVAL);
> }
> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
> index 1bc0e716dc..a407faecec 100644
> --- a/libavformat/avformat.h
> +++ b/libavformat/avformat.h
> @@ -2940,11 +2940,25 @@ void av_dump_format(AVFormatContext *ic,
> int av_get_frame_filename3(char *buf, int buf_size,
> const char *path, int64_t number, int flags);
>
> -int av_get_frame_filename2(char *buf, int buf_size,
> - const char *path, int number, int flags);
> +#if FF_API_AV_GET_FRAME_FILENAME2
> + /**
> + * Like av_get_frame_filename3() but requires int-type number
> + *
> + * @deprecated use av_get_frame_filename3() with same arguments
> + */
> + attribute_deprecated
> + int av_get_frame_filename2(char *buf, int buf_size,
> + const char *path, int number, int flags);
>
> -int av_get_frame_filename(char *buf, int buf_size,
> - const char *path, int number);
> + /**
> + * Like av_get_frame_filename3() but requires int-type number and
> doesn't accept flags
> + *
> + * @deprecated use av_get_frame_filename3() with flags=0
> + */
> + attribute_deprecated
> + int av_get_frame_filename(char *buf, int buf_size,
> + const char *path, int number);
> +#endif
>
> /**
> * Check whether filename actually is a numbered sequence generator.
> diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c
> index 3389fa818e..df376ac612 100644
> --- a/libavformat/img2dec.c
> +++ b/libavformat/img2dec.c
> @@ -122,7 +122,7 @@ static int find_image_range(AVIOContext *pb, int
> *pfirst_index, int *plast_index
>
> /* find the first image */
> for (first_index = start_index; first_index < start_index +
> start_index_range; first_index++) {
> - if (av_get_frame_filename(buf, sizeof(buf), path, first_index) <
> 0) {
> + if (av_get_frame_filename3(buf, sizeof(buf), path, first_index,
> 0) < 0) {
> *pfirst_index =
> *plast_index = 1;
> if (pb || avio_check(buf, AVIO_FLAG_READ) > 0)
> @@ -144,8 +144,8 @@ static int find_image_range(AVIOContext *pb, int
> *pfirst_index, int *plast_index
> range1 = 1;
> else
> range1 = 2 * range;
> - if (av_get_frame_filename(buf, sizeof(buf), path,
> - last_index + range1) < 0)
> + if (av_get_frame_filename3(buf, sizeof(buf), path,
> + last_index + range1, 0) < 0)
> goto fail;
> if (avio_check(buf, AVIO_FLAG_READ) <= 0)
> break;
> @@ -434,9 +434,9 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket
> *pkt)
> filename = s->globstate.gl_pathv[s->img_number];
> #endif
> } else {
> - if (av_get_frame_filename(filename_bytes, sizeof(filename_bytes),
> + if (av_get_frame_filename3(filename_bytes, sizeof(filename_bytes),
> s->path,
> - s->img_number) < 0 && s->img_number > 1)
> + s->img_number, 0) < 0 && s->img_number
> > 1)
> return AVERROR(EIO);
> }
> for (i = 0; i < 3; i++) {
> diff --git a/libavformat/segment.c b/libavformat/segment.c
> index 65323ec678..b366f94c43 100644
> --- a/libavformat/segment.c
> +++ b/libavformat/segment.c
> @@ -205,8 +205,8 @@ static int set_segment_filename(AVFormatContext *s)
> av_log(oc, AV_LOG_ERROR, "Could not get segment filename with
> strftime\n");
> return AVERROR(EINVAL);
> }
> - } else if (av_get_frame_filename(buf, sizeof(buf),
> - s->url, seg->segment_idx) < 0) {
> + } else if (av_get_frame_filename3(buf, sizeof(buf),
> + s->url, seg->segment_idx, 0) < 0) {
> av_log(oc, AV_LOG_ERROR, "Invalid segment filename template
> '%s'\n", s->url);
> return AVERROR(EINVAL);
> }
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index 0a7ed1a013..39e8d53e8a 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -116,7 +116,7 @@ int av_filename_number_test(const char *filename)
> {
> char buf[1024];
> return filename &&
> - (av_get_frame_filename(buf, sizeof(buf), filename, 1) >= 0);
> + (av_get_frame_filename3(buf, sizeof(buf), filename, 1, 0) >=
> 0);
> }
>
> /**********************************************************/
> diff --git a/libavformat/version_major.h b/libavformat/version_major.h
> index 7a9b06703d..d2bd8b5162 100644
> --- a/libavformat/version_major.h
> +++ b/libavformat/version_major.h
> @@ -45,7 +45,7 @@
> #define FF_API_LAVF_SHORTEST (LIBAVFORMAT_VERSION_MAJOR < 62)
> #define FF_API_ALLOW_FLUSH (LIBAVFORMAT_VERSION_MAJOR < 62)
> #define FF_API_AVSTREAM_SIDE_DATA (LIBAVFORMAT_VERSION_MAJOR < 62)
> -
> +#define FF_API_AV_GET_FRAME_FILENAME2 (LIBAVFORMAT_VERSION_MAJOR < 62)
> #define FF_API_GET_DUR_ESTIMATE_METHOD (LIBAVFORMAT_VERSION_MAJOR < 62)
> #define FF_API_INTERNAL_TIMING (LIBAVFORMAT_VERSION_MAJOR < 62)
>
> diff --git a/libavformat/webm_chunk.c b/libavformat/webm_chunk.c
> index 255b8697c5..aa6572e69f 100644
> --- a/libavformat/webm_chunk.c
> +++ b/libavformat/webm_chunk.c
> @@ -139,8 +139,8 @@ static int get_chunk_filename(AVFormatContext *s, char
> filename[MAX_FILENAME_SIZ
> if (!filename) {
> return AVERROR(EINVAL);
> }
> - if (av_get_frame_filename(filename, MAX_FILENAME_SIZE,
> - s->url, wc->chunk_index - 1) < 0) {
> + if (av_get_frame_filename3(filename, MAX_FILENAME_SIZE,
> + s->url, wc->chunk_index - 1, 0) < 0) {
> av_log(s, AV_LOG_ERROR, "Invalid chunk filename template '%s'\n",
> s->url);
> return AVERROR(EINVAL);
> }
> --
> 2.46.0.windows.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>
>
>
More information about the ffmpeg-devel
mailing list