diff mbox series

[FFmpeg-devel,6/9] ffprobe: use AVFrame.duration instead of AVFrame.pkt_duration

Message ID 20220713091725.16638-6-anton@khirnov.net
State New
Headers show
Series [FFmpeg-devel,1/9] lavu/frame: add a duration field to AVFrame | expand

Checks

Context Check Description
andriy/configure_x86 warning Failed to apply patch

Commit Message

Anton Khirnov July 13, 2022, 9:17 a.m. UTC
---
 fftools/ffprobe.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

James Almer July 13, 2022, 12:39 p.m. UTC | #1
You should probably add new entries to the schema file instead.

https://git.videolan.org/?p=ffmpeg.git;a=blob;f=doc/ffprobe.xsd;h=3af621a17ae884adfeacb7cd50c60e1553808188;hb=HEAD#l93

Once frame->pkt_duration is gone, ffprobe shouldn't keep printing a 
frame->duration value as "pkt_duration" and "pkt_duration_time".
Also, if frame->duration is supposed to be able to have values other 
than those we wrote to pkt_duration, maybe keep printing the latter with 
the existing schema entries until it's all gone (You can use 
AV_NOWARN_DEPRECATED() to shut compilers up).

On 7/13/2022 6:17 AM, Anton Khirnov wrote:
> ---
>   fftools/ffprobe.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
> index f156663019..a041241e1e 100644
> --- a/fftools/ffprobe.c
> +++ b/fftools/ffprobe.c
> @@ -2570,8 +2570,8 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
>       print_time("pkt_dts_time",          frame->pkt_dts, &stream->time_base);
>       print_ts  ("best_effort_timestamp", frame->best_effort_timestamp);
>       print_time("best_effort_timestamp_time", frame->best_effort_timestamp, &stream->time_base);
> -    print_duration_ts  ("pkt_duration",      frame->pkt_duration);
> -    print_duration_time("pkt_duration_time", frame->pkt_duration, &stream->time_base);
> +    print_duration_ts  ("pkt_duration",      frame->duration);
> +    print_duration_time("pkt_duration_time", frame->duration, &stream->time_base);
>       if (frame->pkt_pos != -1) print_fmt    ("pkt_pos", "%"PRId64, frame->pkt_pos);
>       else                      print_str_opt("pkt_pos", "N/A");
>       if (frame->pkt_size != -1) print_val    ("pkt_size", frame->pkt_size, unit_byte_str);
Anton Khirnov July 14, 2022, 9:34 a.m. UTC | #2
Quoting James Almer (2022-07-13 14:39:20)
> You should probably add new entries to the schema file instead.
> 
> https://git.videolan.org/?p=ffmpeg.git;a=blob;f=doc/ffprobe.xsd;h=3af621a17ae884adfeacb7cd50c60e1553808188;hb=HEAD#l93
> 
> Once frame->pkt_duration is gone, ffprobe shouldn't keep printing a 
> frame->duration value as "pkt_duration" and "pkt_duration_time".
> Also, if frame->duration is supposed to be able to have values other 
> than those we wrote to pkt_duration, maybe keep printing the latter with 
> the existing schema entries until it's all gone (You can use 
> AV_NOWARN_DEPRECATED() to shut compilers up).

Well, the whole idea that values printed by ffprobe should precisely
mirror the libav* API, up to the field names of our structs, seems quite
questionable to me, IMO it makes more sense for it to provide a layer of
abstraction over the libraries. But then again I neither maintain
ffprobe, nor use it very much, so I wanted to keep changes to a minimum.
If nobody has other plans for dealing with this then I can certainly
make the changes you're sugesting.
James Almer July 14, 2022, 11:50 a.m. UTC | #3
On 7/14/2022 6:34 AM, Anton Khirnov wrote:
> Quoting James Almer (2022-07-13 14:39:20)
>> You should probably add new entries to the schema file instead.
>>
>> https://git.videolan.org/?p=ffmpeg.git;a=blob;f=doc/ffprobe.xsd;h=3af621a17ae884adfeacb7cd50c60e1553808188;hb=HEAD#l93
>>
>> Once frame->pkt_duration is gone, ffprobe shouldn't keep printing a
>> frame->duration value as "pkt_duration" and "pkt_duration_time".
>> Also, if frame->duration is supposed to be able to have values other
>> than those we wrote to pkt_duration, maybe keep printing the latter with
>> the existing schema entries until it's all gone (You can use
>> AV_NOWARN_DEPRECATED() to shut compilers up).
> 
> Well, the whole idea that values printed by ffprobe should precisely
> mirror the libav* API, up to the field names of our structs, seems quite
> questionable to me, IMO it makes more sense for it to provide a layer of
> abstraction over the libraries. But then again I neither maintain
> ffprobe, nor use it very much, so I wanted to keep changes to a minimum.
> If nobody has other plans for dealing with this then I can certainly
> make the changes you're sugesting.

ffprobe used to print pkt_pts until it was removed, so printing a field 
that does not exist (once it's removed) where the new values assigned to 
it have potentially slightly different semantics than the old ones does 
not seem like a good idea.
diff mbox series

Patch

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index f156663019..a041241e1e 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -2570,8 +2570,8 @@  static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
     print_time("pkt_dts_time",          frame->pkt_dts, &stream->time_base);
     print_ts  ("best_effort_timestamp", frame->best_effort_timestamp);
     print_time("best_effort_timestamp_time", frame->best_effort_timestamp, &stream->time_base);
-    print_duration_ts  ("pkt_duration",      frame->pkt_duration);
-    print_duration_time("pkt_duration_time", frame->pkt_duration, &stream->time_base);
+    print_duration_ts  ("pkt_duration",      frame->duration);
+    print_duration_time("pkt_duration_time", frame->duration, &stream->time_base);
     if (frame->pkt_pos != -1) print_fmt    ("pkt_pos", "%"PRId64, frame->pkt_pos);
     else                      print_str_opt("pkt_pos", "N/A");
     if (frame->pkt_size != -1) print_val    ("pkt_size", frame->pkt_size, unit_byte_str);