> On Sep 23, 2024, at 22:25, Filip Mašić <shoutple...@gmail.com> wrote: > > 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.
It’s a bug of img2enc no one noticed. We try to reduce API changes if possible. > > 2. Was there a reason you didn't update img2enc frame_pts to use the new > internal function? Well, git send-email broken suddenly to send patch 2/2. I’m trying to figure out why. > > 3. You might consider the documentation clarifications I made for the > parameters: >> + * @param path path with substitution template >> + * @param number the number to substitute I have added it to patch v2 1/2 and add co-authored-by you. By the way, please don’t top-post.
0001-avformat-internal-Add-ff_get_frame_filename.patch
Description: Binary data
0002-avformat-img2enc-Fix-integer-truncation-when-frame_p.patch
Description: Binary data
> > Thanks for the help with this. > > On Mon, 23 Sept 2024 at 13:18, Zhao Zhili <quinkbl...@foxmail.com> wrote: > >> >> >> On Sep 23, 2024, at 18:18, Filip Mašić <shoutple...@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@ffmpeg.org >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> To unsubscribe, visit link above, or email >> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". >> >> >> > _______________________________________________ > 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".
_______________________________________________ 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".