> -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-boun...@ffmpeg.org> On Behalf Of Gyan > Doshi > Sent: Sonntag, 13. April 2025 13:16 > To: ffmpeg-devel@ffmpeg.org > Subject: [FFmpeg-devel] [PATCH 2/2] ffprobe: show seekability details in > format section > > --- > fftools/ffprobe.c | 49 +++++++++++++++++++++++++++- > tests/ref/fate/cavs-demux | 2 +- > tests/ref/fate/ffprobe_compact | 2 +- > tests/ref/fate/ffprobe_csv | 2 +- > tests/ref/fate/ffprobe_default | 1 + > tests/ref/fate/ffprobe_flat | 1 + > tests/ref/fate/ffprobe_ini | 1 + > tests/ref/fate/ffprobe_json | 1 + > tests/ref/fate/ffprobe_xml | 2 +- > tests/ref/fate/ffprobe_xsd | 2 +- > tests/ref/fate/flv-demux | 2 +- > tests/ref/fate/gapless-mp3-side-data | 2 +- > tests/ref/fate/oggopus-demux | 2 +- > tests/ref/fate/ts-demux | 2 +- > tests/ref/fate/ts-opus-demux | 2 +- > tests/ref/fate/ts-small-demux | 2 +- > tests/ref/fate/ts-timed-id3-demux | 2 +- > 17 files changed, 64 insertions(+), 13 deletions(-) > > diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c > index e0a7322523..8b09afb8c1 100644 > --- a/fftools/ffprobe.c > +++ b/fftools/ffprobe.c > @@ -2260,7 +2260,7 @@ static int show_format(AVTextFormatContext *tfc, > InputFile *ifile) > { > AVFormatContext *fmt_ctx = ifile->fmt_ctx; > int64_t size = fmt_ctx->pb ? avio_size(fmt_ctx->pb) : -1; > - int ret = 0; > + int seekable, ret = 0; > > avtext_print_section_header(tfc, NULL, SECTION_ID_FORMAT); > print_str_validate("filename", fmt_ctx->url); > @@ -2279,6 +2279,53 @@ static int show_format(AVTextFormatContext *tfc, > InputFile *ifile) > if (fmt_ctx->bit_rate > 0) print_val ("bit_rate", fmt_ctx- > >bit_rate, unit_bit_per_second_str); > else print_str_opt("bit_rate", "N/A"); > print_int("probe_score", fmt_ctx->probe_score); > + > + seekable = avformat_query_seekable(fmt_ctx); > + if (seekable > 0) { > + int gen = 1, ante = 0; > + AVBPrint seek_str; > + av_bprint_init(&seek_str, 0, AV_BPRINT_SIZE_AUTOMATIC); > + > + av_bprintf(&seek_str, "yes, by"); > + if (seekable & AVSEEKABLE_TIME) { > + av_bprintf(&seek_str, " time"); > + if (seekable & AVSEEKABLE_PTS) > + av_bprintf(&seek_str, "(pts)"); > + else > + av_bprintf(&seek_str, "(dts)"); > + ante = 1; > + } > + if (seekable & AVSEEKABLE_BYTE) { > + av_bprintf(&seek_str, "%cbyte-offset", ante ? ',':' '); > + ante = 1; > + } > + if (seekable & AVSEEKABLE_FRAME) { > + av_bprintf(&seek_str, "%cframe-index", ante ? ',':' '); > + } > + > + ante = 0; > + av_bprintf(&seek_str, " via"); > + if (seekable & AVSEEKABLE_DEMUXER) { > + av_bprintf(&seek_str, " demuxer"); > + gen = 0; > + ante = 1; > + } > + if (seekable & AVSEEKABLE_PKTSCAN) { > + av_bprintf(&seek_str, "%cpacket-scan", ante ? ',':' '); > + gen = 0; > + ante = 0; > + } > + if (gen) > + av_bprintf(&seek_str, " generic seek"); > + > + if (seekable & AVSEEKABLE_FWDONLY) > + av_bprintf(&seek_str, " (forward only)"); > + > + print_str("seekable", seek_str.str); > + } > + else > + print_str("seekable", "no"); > + > if (do_show_format_tags) > ret = show_tags(tfc, fmt_ctx->metadata, > SECTION_ID_FORMAT_TAGS);
Hi Gyan, the problem that I see here is that it's not machine-readable and would require non-trivial parsing to translate back to the actual information behind it. I think that either a separate sub-section or at least three separate values would be better. Another note: When you skim through the ffprobe code, you can see that ffprobe rarely does its own "numbers-to-string" translations (only for cases of absence, like 'none', 'unknown', etc.). Normally, those translations are included in the libs where they are defined. Oh, and I believe you also need to add new output fields to the xml schema file (ffprobe.xsd). Still like it! 😊 Thanks, sw _______________________________________________ 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".