On Sun, 1 Dec 2024, James Almer wrote:
On 11/28/2024 5:02 PM, Marton Balint wrote:
On Wed, 27 Nov 2024, Marth64 wrote:
As it stands today, ffprobe has two stream-level fields (closed_captions
and film_grain)
that do not work. Their value is always 0 because ffprobe cannot access
the internal
codec properties in the stream context when it is setting up its internal
streams.
Additionally, avformat/dump used to successfully print about the presence
of
Closed Captions (EIA-608/CEA-708) and the presence of film grain. This
does
not work either anymore, because avformat_find_stream_info() does not
copy
them in the skeleton context it uses after calling codec_close().
To clarify: the aforementioned features/code are broken.
So, to the user, Closed Caption detection as a feature is broken, and
ffprobe
and the dump is essentially having two fields that do not work.
This patchset aims to fix the issue by:
(1) Adding a video stream disposition, AV_DISPOSITION_CAPTIONS_EIA608
that
can be set in avformat_find_stream_info(), and using it to express
the presence of Closed Captions (EIA-608/CEA-708)
Manually mapping between different codec properties and stream
dispositions seems ugly, and I am not sure if we should even use the
disposition field for something like this.
I suggest you try adding the "properties" attribute to AVCodecParameters,
because as far as I see it is very similar to profile or level. Can you
see if that works? If it does, we might even promote the FF_CODEC_PROPERTY
flags to AV_CODEC_PROPERTY so they will become properly public.
I don't agree it should be in codecpar. It's rarely (if ever) filled during
header parsing (codec or container), and instead set when parsing a frame
that contains the relevant characteristic that's exported here as a
"property", like captions or film grain parameters. Therefore it's not a
field used for initialization.
Okay, but if this is a frame property, we should not clobber neither
AVStream nor AVCodecParameters with it.
Probably we need a more generic solution for the problem that some
information is only available in the first read packet or in the first
decoded frame.
I see two possibilites:
1) Make ffprobe read the first packet or decode a first frame from every
stream and print information based on that.
2) Extend avstream_find_stream_info() so
- the API user can force it to read a packet or decode a frame from every
stream (this is not always the case right now)
- it has a way to return the first frame or first packet from every
stream when probing
Regards,
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".