[FFmpeg-devel] ping, ping, just 5 lines
The patch "avcodec/audiotoolboxdec: fix missing decoder out properties" hasn't been reviewed. Could anyone with some time, please, review this patch? Audiotoolbox decoder on macOS desperately needs this to be useful. ___ 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".
Re: [FFmpeg-devel] [PATCH v4] examples/decode_video: flush parser to fix missing frame
> On Apr 11, 2022, at 5:12 PM, zhilizhao(赵志立) wrote: > > Ping. The same kind of issue like `doc/examples/transcode_aac: Don't ignore > last encoded frame. > > https://patchwork.ffmpeg.org/project/ffmpeg/patch/8fd28808-07f8-9458-b032-8792c67a3...@gmail.com/ Will apply this weekend unless there are objections. > >> On Jul 14, 2021, at 11:02 AM, Zhao Zhili wrote: >> >> --- >> v4: break when error occured in fread, fix infinite loop introduced by v3 >> v3: check EOF by "eof = !data_size && feof(f);" >> >> doc/examples/decode_video.c | 12 >> 1 file changed, 8 insertions(+), 4 deletions(-) >> >> diff --git a/doc/examples/decode_video.c b/doc/examples/decode_video.c >> index 18ee90a6c0..7238e38103 100644 >> --- a/doc/examples/decode_video.c >> +++ b/doc/examples/decode_video.c >> @@ -92,6 +92,7 @@ int main(int argc, char **argv) >>uint8_t *data; >>size_t data_size; >>int ret; >> +int eof; >>AVPacket *pkt; >> >>if (argc <= 2) { >> @@ -150,15 +151,16 @@ int main(int argc, char **argv) >>exit(1); >>} >> >> -while (!feof(f)) { >> +do { >>/* read raw data from the input file */ >>data_size = fread(inbuf, 1, INBUF_SIZE, f); >> -if (!data_size) >> +if (ferror(f)) >>break; >> +eof = !data_size; >> >>/* use the parser to split the data into frames */ >>data = inbuf; >> -while (data_size > 0) { >> +while (data_size > 0 || eof) { >>ret = av_parser_parse2(parser, c, &pkt->data, &pkt->size, >> data, data_size, AV_NOPTS_VALUE, >> AV_NOPTS_VALUE, 0); >>if (ret < 0) { >> @@ -170,8 +172,10 @@ int main(int argc, char **argv) >> >>if (pkt->size) >>decode(c, frame, pkt, outfilename); >> +else if (eof) >> +break; >>} >> -} >> +} while (!eof); >> >>/* flush the decoder */ >>decode(c, frame, NULL, outfilename); >> -- >> 2.31.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".
[FFmpeg-devel] [PATCH] Add unmet target level warning to libaom encoding.
When target levels are set, this patch checks whether they are satisfied by libaom. If not, a warning is shown. Otherwise the output levels are also logged. This patch applies basically the same approach used for libvpx. Signed-off-by: Bohan Li --- libavcodec/libaomenc.c | 64 ++ 1 file changed, 64 insertions(+) diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c index 054903e6e2..402bcb5198 100644 --- a/libavcodec/libaomenc.c +++ b/libavcodec/libaomenc.c @@ -198,6 +198,12 @@ static const char *const ctlidstr[] = { [AV1E_SET_ENABLE_SMOOTH_INTERINTRA] = "AV1E_SET_ENABLE_SMOOTH_INTERINTRA", [AV1E_SET_ENABLE_REF_FRAME_MVS] = "AV1E_SET_ENABLE_REF_FRAME_MVS", #endif +#ifdef AOM_CTRL_AV1E_GET_SEQ_LEVEL_IDX +[AV1E_GET_SEQ_LEVEL_IDX]= "AV1E_GET_SEQ_LEVEL_IDX", +#endif +#ifdef AOM_CTRL_AV1E_GET_TARGET_SEQ_LEVEL_IDX +[AV1E_GET_TARGET_SEQ_LEVEL_IDX] = "AV1E_GET_TARGET_SEQ_LEVEL_IDX", +#endif }; static av_cold void log_encoder_error(AVCodecContext *avctx, const char *desc) @@ -323,10 +329,68 @@ static av_cold int codecctl_int(AVCodecContext *avctx, return 0; } +#if defined(AOM_CTRL_AV1E_GET_SEQ_LEVEL_IDX) && \ +defined(AOM_CTRL_AV1E_GET_TARGET_SEQ_LEVEL_IDX) +static av_cold int codecctl_intp(AVCodecContext *avctx, +#ifdef UENUM1BYTE + aome_enc_control_id id, +#else + enum aome_enc_control_id id, +#endif + int* ptr) +{ +AOMContext *ctx = avctx->priv_data; +char buf[80]; +int width = -30; +int res; + +snprintf(buf, sizeof(buf), "%s:", ctlidstr[id]); +av_log(avctx, AV_LOG_DEBUG, " %*s%d\n", width, buf, *ptr); + +res = aom_codec_control(&ctx->encoder, id, ptr); +if (res != AOM_CODEC_OK) { +snprintf(buf, sizeof(buf), "Failed to set %s codec control", + ctlidstr[id]); +log_encoder_error(avctx, buf); +return AVERROR(EINVAL); +} + +return 0; +} +#endif + static av_cold int aom_free(AVCodecContext *avctx) { AOMContext *ctx = avctx->priv_data; +#if defined(AOM_CTRL_AV1E_GET_SEQ_LEVEL_IDX) && \ +defined(AOM_CTRL_AV1E_GET_TARGET_SEQ_LEVEL_IDX) +if (!(avctx->flags & AV_CODEC_FLAG_PASS1)) { +int levels[32] = { 0 }; +int target_levels[32] = { 0 }; + +if (!codecctl_intp(avctx, AV1E_GET_SEQ_LEVEL_IDX, levels) && +!codecctl_intp(avctx, AV1E_GET_TARGET_SEQ_LEVEL_IDX, + target_levels)) { +for (int i = 0; i < 32; i++) { +if (levels[i] > target_levels[i]) { +// Warn when the target level was not met +av_log(avctx, AV_LOG_WARNING, + "Could not encode to target level %d.%d for " + "operating point %d. The output level is %d.%d.", + 2 + (target_levels[i] >> 2), target_levels[i] & 3, + i, 2 + (levels[i] >> 2), levels[i] & 3); +} else if (target_levels[i] < 31) { +// Log the encoded level if a target level was given +av_log(avctx, AV_LOG_INFO, + "Output level for operating point %d is %d.%d.", + i, 2 + (levels[i] >> 2), levels[i] & 3); +} +} +} +} +#endif + aom_codec_destroy(&ctx->encoder); av_freep(&ctx->twopass_stats.buf); av_freep(&avctx->stats_out); -- 2.36.0.rc0.470.gd361397f0d-goog ___ 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".
Re: [FFmpeg-devel] [PATCH] avformat/mov: Add support for still image AVIF parsing
On Mon, Mar 28, 2022 at 12:11 PM Vignesh Venkatasubramanian wrote: > > Add support for parsing AVIF still images. This patches supports > AVIF still images that have exactly 1 item (i.e.) no alpha channel. > Essentially, we will have to parse the "iloc" box and populate > the mov index. > > With this patch, we can decode still AVIF images like so: > ffmpeg -i image.avif image.png > > Partially fixes trac ticket #7621 > > Signed-off-by: Vignesh Venkatasubramanian > --- > libavformat/isom.h | 1 + > libavformat/mov.c | 148 + > 2 files changed, 149 insertions(+) > > diff --git a/libavformat/isom.h b/libavformat/isom.h > index 5caf42b15d..02d681e3ae 100644 > --- a/libavformat/isom.h > +++ b/libavformat/isom.h > @@ -315,6 +315,7 @@ typedef struct MOVContext { > int have_read_mfra_size; > uint32_t mfra_size; > uint32_t max_stts_delta; > +int is_still_picture_avif; > } MOVContext; > > int ff_mp4_read_descr_len(AVIOContext *pb); > diff --git a/libavformat/mov.c b/libavformat/mov.c > index 6c847de164..fb6d071b95 100644 > --- a/libavformat/mov.c > +++ b/libavformat/mov.c > @@ -1136,6 +1136,7 @@ static int mov_read_ftyp(MOVContext *c, AVIOContext > *pb, MOVAtom atom) > c->isom = 1; > av_log(c->fc, AV_LOG_DEBUG, "ISO: File Type Major Brand: %.4s\n",(char > *)&type); > av_dict_set(&c->fc->metadata, "major_brand", type, 0); > +c->is_still_picture_avif = !strncmp(type, "avif", 4); > minor_ver = avio_rb32(pb); /* minor version */ > av_dict_set_int(&c->fc->metadata, "minor_version", minor_ver, 0); > > @@ -7430,6 +7431,152 @@ static int mov_read_SAND(MOVContext *c, AVIOContext > *pb, MOVAtom atom) > return 0; > } > > +static int rb_size(AVIOContext *pb, uint64_t* value, int size) > +{ > +if (size == 0) { > +*value = 0; > +} else if (size == 1) { > +*value = avio_r8(pb); > +} else if (size == 2) { > +*value = avio_rb16(pb); > +} else if (size == 4) { > +*value = avio_rb32(pb); > +} else if (size == 8) { > +*value = avio_rb64(pb); > +} else { > +return -1; > +} > +return size; > +} > + > +static int mov_read_iloc(MOVContext *c, AVIOContext *pb, MOVAtom atom) > +{ > +int version, offset_size, length_size, base_offset_size, index_size; > +int item_count, extent_count; > +uint64_t base_offset, extent_offset, extent_length; > +uint8_t value; > +AVStream *st; > +MOVStreamContext *sc; > + > +if (!c->is_still_picture_avif) { > +// * For non-avif, we simply ignore the iloc box. > +// * For animated avif, we don't care about the iloc box as all the > +// necessary information can be found in the moov box. > +return 0; > +} > + > +if (c->fc->nb_streams) { > +av_log(c->fc, AV_LOG_INFO, "Duplicate iloc box found\n"); > +return 0; > +} > + > +st = avformat_new_stream(c->fc, NULL); > +if (!st) { > +return AVERROR(ENOMEM); > +} > +st->id = c->fc->nb_streams; > +sc = av_mallocz(sizeof(MOVStreamContext)); > +if (!sc) { > +return AVERROR(ENOMEM); > +} > + > +st->priv_data = sc; > +st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; > +st->codecpar->codec_id = AV_CODEC_ID_AV1; > +sc->ffindex = st->index; > +c->trak_index = st->index; > +st->avg_frame_rate.num = st->avg_frame_rate.den = 1; > +st->time_base.num = st->time_base.den = 1; > +st->nb_frames = 1; > +sc->time_scale = 1; > +sc = st->priv_data; > +sc->pb = c->fc->pb; > +sc->pb_is_copied = 1; > + > +version = avio_r8(pb); > +avio_rb24(pb); // flags. > + > +value = avio_r8(pb); > +offset_size = (value >> 4) & 0xF; > +length_size = value & 0xF; > +value = avio_r8(pb); > +base_offset_size = (value >> 4) & 0xF; > +index_size = !version ? 0 : (value & 0xF); > +if (index_size) { > +return AVERROR_PATCHWELCOME; > +} > +item_count = (version < 2) ? avio_rb16(pb) : avio_rb32(pb); > +if (item_count > 1) { > +// For still AVIF images, we only support one item. Second item will > +// generally be found for AVIF images with alpha channel. We don't > +// support them as of now. > +return AVERROR_PATCHWELCOME; > +} > + > +// Populate the necessary fields used by mov_build_index. > +sc->stsc_count = item_count; > +sc->stsc_data = av_malloc_array(item_count, sizeof(*sc->stsc_data)); > +if (!sc->stsc_data) { > +return AVERROR(ENOMEM); > +} > +sc->stsc_data[0].first = 1; > +sc->stsc_data[0].count = 1; > +sc->stsc_data[0].id = 1; > +sc->chunk_count = item_count; > +sc->chunk_offsets = > +av_malloc_array(item_count, sizeof(*sc->chunk_offsets)); > +if (!sc->chunk_offsets) { > +return AVERROR(ENOMEM); > +} > +sc->sample_count = item_count; > +sc->sample_sizes = > +av_mal
Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *
On Sat, 16 Apr 2022, Martin Storsjö wrote: On Fri, 15 Apr 2022, Tristan Matthews wrote: This avoids having to do one pass to calculate the full length to allocate followed by a second pass to actually append values. --- libavformat/librtmp.c | 124 +++--- 1 file changed, 33 insertions(+), 91 deletions(-) diff --git a/libavformat/librtmp.c b/libavformat/librtmp.c index 43013e46e0..b7e9fc81cf 100644 --- a/libavformat/librtmp.c +++ b/libavformat/librtmp.c @@ -25,6 +25,7 @@ */ #include "libavutil/avstring.h" +#include "libavutil/bprint.h" #include "libavutil/mathematics.h" #include "libavutil/opt.h" #include "avformat.h" @@ -38,6 +39,7 @@ typedef struct LibRTMPContext { const AVClass *class; +AVBPrint filename; RTMP rtmp; char *app; char *conn; @@ -50,7 +52,6 @@ typedef struct LibRTMPContext { char *pageurl; char *client_buffer_time; int live; -char *temp_filename; int buffer_size; } LibRTMPContext; This looks ok to me. (I guess it also could be considered viable to not store the AVBprint in the context but detach an allocated string instead; that would decrease the persistent allocation size a little, at the cost of some more copying, but the difference is probably negligible, so this probably is sensible as is.) Agreed. Let's still wait for Marton's review too. LGTM as well. Thanks. Marton ___ 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".
Re: [FFmpeg-devel] [PATCH v2] avformat/mpegts: set data broadcast streams as such
On Thu, 14 Apr 2022, Jan Ekström wrote: On Mon, Apr 11, 2022 at 1:50 PM Jan Ekström wrote: From: Jan Ekström Additionally, they should not be probed, as this is essentially various types of binary data. Signed-off-by: Jan Ekström --- Ping. Basically this checks if we have an unknown stream with a private stream type still at the end of the per-stream loop in PMT parsing, and then cancels the stop of parsing that usually occurs as a PMT is hit. Instead the logic will continue parsing further. When an SDT is then found and a PMT for that program has already been received, it will then stop header reading at that point. But why does it matter when the initial parsing is stopped? I mean it stops at the first PMT right now, nobody expects it to find all the programs and all the streams or all the stream codecs/parameters. I am saying, that ideally, the ts->stop_parse magic should not be needed to be changed to fix your issue and when an SDT is detected with the broadcast descriptor that should stop any existing data stream parsing. Do you know why it does not work like that? Thanks, Marton ___ 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] [PATCH] avfilter/vf_subtitles: add an option to choose sub stream by language
--- doc/filters.texi | 5 + libavfilter/vf_subtitles.c | 23 --- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index a161754233..cfbc807f16 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -21160,6 +21160,11 @@ Override default style or script info parameters of the subtitles. It accepts a string containing ASS style format @code{KEY=VALUE} couples separated by ",". @end table +@item language +Use first stream with the given language, ISO language code. @code{subtitles} +filter only. Requires the language metadata to be read from the file. +@end table + If the first key is not specified, it is assumed that the first value specifies the @option{filename}. diff --git a/libavfilter/vf_subtitles.c b/libavfilter/vf_subtitles.c index 82e140e986..95f0a940d9 100644 --- a/libavfilter/vf_subtitles.c +++ b/libavfilter/vf_subtitles.c @@ -54,6 +54,7 @@ typedef struct AssContext { char *fontsdir; char *charenc; char *force_style; +char *language; int stream_index; int alpha; uint8_t rgba_map[4]; @@ -271,6 +272,7 @@ static const AVOption subtitles_options[] = { {"stream_index", "set stream index", OFFSET(stream_index), AV_OPT_TYPE_INT,{ .i64 = -1 }, -1, INT_MAX, FLAGS}, {"si", "set stream index", OFFSET(stream_index), AV_OPT_TYPE_INT,{ .i64 = -1 }, -1, INT_MAX, FLAGS}, {"force_style", "force subtitle style", OFFSET(force_style), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS}, +{"language", "use first stream of this language", OFFSET(language), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS}, {NULL}, }; @@ -340,9 +342,8 @@ static av_cold int init_subtitles(AVFilterContext *ctx) goto end; /* Locate subtitles stream */ -if (ass->stream_index < 0) -ret = av_find_best_stream(fmt, AVMEDIA_TYPE_SUBTITLE, -1, -1, NULL, 0); -else { +/* If the user has specified a particular stream use that. */ +if (ass->stream_index >= 0) { ret = -1; if (ass->stream_index < fmt->nb_streams) { for (j = 0; j < fmt->nb_streams; j++) { @@ -357,6 +358,22 @@ static av_cold int init_subtitles(AVFilterContext *ctx) } } +/* Otherwise find the first stream with the given language code. */ +else if (ass->language) { +ret = -1; +for (j = 0; j < fmt->nb_streams; j++) { +const AVDictionaryEntry *lang = av_dict_get(fmt->streams[j]->metadata, "language", NULL, 0); +if (lang && !strcmp(lang->value, ass->language)) { +ret = j; +break; +} +} +} + +/* Finally fall back to the "best" stream. */ +else +ret = av_find_best_stream(fmt, AVMEDIA_TYPE_SUBTITLE, -1, -1, NULL, 0); + if (ret < 0) { av_log(ctx, AV_LOG_ERROR, "Unable to locate subtitle stream in %s\n", ass->filename); -- 2.35.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] [PATCH] avformat/mov: skip call ff_codec_get_id if possible
ff_codec_get_id loops over ff_codec_movvideo_tags (which is a large array) two times. The result is unused most of the cases. --- libavformat/mov.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 6c847de164..bdc8c84bae 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -2487,8 +2487,6 @@ static int mov_skip_multiple_stsd(MOVContext *c, AVIOContext *pb, int codec_tag, int format, int64_t size) { -int video_codec_id = ff_codec_get_id(ff_codec_movvideo_tags, format); - if (codec_tag && (codec_tag != format && // AVID 1:1 samples with differing data format and codec tag exist @@ -2497,7 +2495,7 @@ static int mov_skip_multiple_stsd(MOVContext *c, AVIOContext *pb, codec_tag != AV_RL32("apcn") && codec_tag != AV_RL32("apch") && // so is dv (sigh) codec_tag != AV_RL32("dvpp") && codec_tag != AV_RL32("dvcp") && - (c->fc->video_codec_id ? video_codec_id != c->fc->video_codec_id + (c->fc->video_codec_id ? ff_codec_get_id(ff_codec_movvideo_tags, format) != c->fc->video_codec_id : codec_tag != MKTAG('j','p','e','g' { /* Multiple fourcc, we skip JPEG. This is not correct, we should * export it as a separate AVStream but this needs a few changes -- 2.35.3 ___ 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".
Re: [FFmpeg-devel] [PATCH 2/2] avdevice/dshow: silence warnings about unused variable
On Wed, Apr 13, 2022 at 10:15 AM James Almer wrote: > > Use av_unused instead of wrapping the declaration under the DSHOWDEBUG check > in case future changes make use of it. > > Signed-off-by: James Almer > --- > libavdevice/dshow.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c > index ac8b64366f..6277a27453 100644 > --- a/libavdevice/dshow.c > +++ b/libavdevice/dshow.c > @@ -976,7 +976,7 @@ dshow_cycle_formats(AVFormatContext *avctx, enum > dshowDeviceType devtype, > } > } else { > WAVEFORMATEX *fx; > -AUDIO_STREAM_CONFIG_CAPS *acaps = caps; > +AUDIO_STREAM_CONFIG_CAPS av_unused *acaps = caps; > #if DSHOWDEBUG > ff_print_AUDIO_STREAM_CONFIG_CAPS(acaps); > #endif Or maybe put it within the #if ? Just an idea. ___ 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".
Re: [FFmpeg-devel] [PATCH 1/2] avdevice/dshow: remove unused variables
LGTM. On Wed, Apr 13, 2022 at 10:15 AM James Almer wrote: > > Remnant from f125c504d8fece6420bb97767f9e72414c26312a > > Signed-off-by: James Almer > --- > libavdevice/dshow.c | 8 > 1 file changed, 8 deletions(-) > > diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c > index 1e69620880..ac8b64366f 100644 > --- a/libavdevice/dshow.c > +++ b/libavdevice/dshow.c > @@ -814,10 +814,6 @@ dshow_cycle_formats(AVFormatContext *avctx, enum > dshowDeviceType devtype, > / > ctx->requested_framerate.num : 0; > int requested_width = ctx->requested_width; > int requested_height = ctx->requested_height; > -// audio > -int requested_sample_rate = ctx->sample_rate; > -int requested_sample_size = ctx->sample_size; > -int requested_channels= ctx->channels; > > if (IPin_QueryInterface(pin, &IID_IAMStreamConfig, (void **) &config) != > S_OK) > return; > @@ -854,10 +850,6 @@ dshow_cycle_formats(AVFormatContext *avctx, enum > dshowDeviceType devtype, > requested_framerate = fmt_info->framerate; > requested_width = fmt_info->width; > requested_height = fmt_info->height; > -} else { > -requested_sample_rate = fmt_info->sample_rate; > -requested_sample_size = fmt_info->sample_size; > -requested_channels= fmt_info->channels; > } > av_free(fmt_info); // free but don't set to NULL to enable > below check > } > -- > 2.35.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".