[FFmpeg-devel] [PATCH] avcodec/avformat: Added codec_name to AVCodecContext and AVCodecParameters
Bernardo Pilarz
bernardo.pilarz at aitek.it
Wed Jul 3 15:30:04 EEST 2024
On 03/07/2024 11:56, Bernardo Pilarz via ffmpeg-devel wrote:
> On 03/07/2024 11:10, Anton Khirnov wrote:
>> Quoting Bernardo Pilarz via ffmpeg-devel (2024-07-03 10:10:15)
>>>>> + char *codec_name;
>>>>> const struct AVCodec *codec;
>>>>> enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */
>>>>>
>>>> Adding a new field here is an ABI break, it would need to go at the
>>>> end of the struct.
>>>>
>>>> In general, I feel like this might be better served to go into
>>>> metadata though, especially as very few containers have a string codec
>>>> identifier to begin with.
>>> I would be very glad to do it the right way, but I need some guidance
>>> since this is the first time I try to contribute to FFmpeg.
>>>
>>> The problem that I am trying to solve is receiving metadata from an
>>> RTSP
>>> stream (in example, ONVIF metadata identified by the codec name
>>> 'vcd.onvif.metadata').
>>> This is data that the application will want to handle on its own (and
>>> not through FFmpeg).
>>>
>>> Can you guide me on how to do this properly?
>> First of all, this should definitely NOT go into AVCodecContext, since
>> the entire premise is that we have no codec ID and hence no decoders or
>> encoders, so a codec context makes no sense.
>>
>> Next, the idea that you can define a generic container-independent
>> "codec name" sounds dubious to me, as they are not universally
>> standardized. You'd either have to define precisely what can the API
>> caller expect in there, or make this a private AV_OPT_FLAG_EXPORT option
>> of your demuxer. I'd suggest the second, as it's much simpler, though
>> IIRC we do not yet support per-stream private options.
>>
> I ended up adding it to the AVCodecContext because
> 'avformat_find_stream_info()' invokes
> 'avcodec_parameters_to_context()' followed by
> 'avcodec_parameters_from_context()', thereby overwriting the entire
> 'codecpar' field of each stream in my format context.
> This also means that an AVCodecContext is in fact created even for
> streams with no codec ID.
>
> It's not clear to me how I can use AV_OPT_FLAG_EXPORT (it's my fault
> because I don't know the library so well).
> It might very well be the solution I am looking for, but I need some
> help in understanding how to implement it.
>
> The basic problem is I need to get the "codec name" information that
> is available in 'sdp_parse_rtpmap()' and is completely lost when the
> codec is not supported by FFmpeg.
> By the way, we are talking of AVMEDIA_TYPE_DATA streams, and codecs
> that are potentially custom/not widespread and therefore should
> probably be handled by the application rather than by ffmpeg itself.
>
> P.S.: I am currently only using FFmpeg to grab an RTSP stream. The
> audio and video streams might very well get decoded using FFmpeg later
> on, but so far I am only concerned with getting the compressed packets
> and being able to read their declared codec names.
>
>
How about putting this information in the stream's
'codecpar.coded_side_data'?
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
More information about the ffmpeg-devel
mailing list