[FFmpeg-devel] [PATCH v2 1/6] lavc: add new API for iterating codecs and codec parsers

Muhammad Faiz mfcc64 at gmail.com
Wed Jan 3 22:33:25 EET 2018


On Thu, Jan 4, 2018 at 2:59 AM, Rostislav Pehlivanov
<atomnuker at gmail.com> wrote:
> On 3 January 2018 at 19:16, Muhammad Faiz <mfcc64 at gmail.com> wrote:
>
>> On Wed, Jan 3, 2018 at 7:42 AM, Josh de Kock <josh at itanimul.li> wrote:
>> > Also replace linked list with an array.
>> > ---
>> >  configure              |   12 +-
>> >  doc/APIchanges         |    4 +
>> >  libavcodec/allcodecs.c | 1473 ++++++++++++++++++++++++++++--
>> ------------------
>> >  libavcodec/avcodec.h   |   31 +
>> >  libavcodec/parser.c    |   87 ++-
>> >  libavcodec/utils.c     |  105 ----
>> >  libavcodec/version.h   |    3 +
>> >  7 files changed, 974 insertions(+), 741 deletions(-)
>> >
>>
>> > +
>> > +#include "codec_list.c"
>>
>> Won't work when building outside source directory. Use
>> "libavcodec/codec_list.c"
>>
>
> It pretty much will, this is exactly how hwaccels and bitstream filters
> currently work.

At bitstream_filters.c:
#include "libavcodec/bsf_list.c"

>
>
>
>>
>> > +static void av_codec_init_next(void)
>> > +{
>> > +    AVCodec *prev = NULL, *p;
>> > +    void *i = 0;
>> > +    while ((p = (AVCodec*)av_codec_iterate(&i))) {
>>
>> Better use: for (i = 0; codec_list[i]; i++)
>>
>>
>> > diff --git a/libavcodec/parser.c b/libavcodec/parser.c
>> > index 670680e..76532e2 100644
>> > --- a/libavcodec/parser.c
>> > +++ b/libavcodec/parser.c
>> > @@ -32,33 +32,104 @@
>> >  #include "internal.h"
>> >  #include "parser.h"
>> >
>> > -static AVCodecParser *av_first_parser = NULL;
>> > +#include "pthread.h"
>> > +
>> > +/* Parsers */
>> > +extern AVCodecParser ff_aac_parser;
>> > +extern AVCodecParser ff_aac_latm_parser;
>> > +extern AVCodecParser ff_ac3_parser;
>> > +extern AVCodecParser ff_adx_parser;
>> > +extern AVCodecParser ff_bmp_parser;
>> > +extern AVCodecParser ff_cavsvideo_parser;
>> > +extern AVCodecParser ff_cook_parser;
>> > +extern AVCodecParser ff_dca_parser;
>> > +extern AVCodecParser ff_dirac_parser;
>> > +extern AVCodecParser ff_dnxhd_parser;
>> > +extern AVCodecParser ff_dpx_parser;
>> > +extern AVCodecParser ff_dvaudio_parser;
>> > +extern AVCodecParser ff_dvbsub_parser;
>> > +extern AVCodecParser ff_dvdsub_parser;
>> > +extern AVCodecParser ff_dvd_nav_parser;
>> > +extern AVCodecParser ff_flac_parser;
>> > +extern AVCodecParser ff_g729_parser;
>> > +extern AVCodecParser ff_gsm_parser;
>> > +extern AVCodecParser ff_h261_parser;
>> > +extern AVCodecParser ff_h263_parser;
>> > +extern AVCodecParser ff_h264_parser;
>> > +extern AVCodecParser ff_hevc_parser;
>> > +extern AVCodecParser ff_mjpeg_parser;
>> > +extern AVCodecParser ff_mlp_parser;
>> > +extern AVCodecParser ff_mpeg4video_parser;
>> > +extern AVCodecParser ff_mpegaudio_parser;
>> > +extern AVCodecParser ff_mpegvideo_parser;
>> > +extern AVCodecParser ff_opus_parser;
>> > +extern AVCodecParser ff_png_parser;
>> > +extern AVCodecParser ff_pnm_parser;
>> > +extern AVCodecParser ff_rv30_parser;
>> > +extern AVCodecParser ff_rv40_parser;
>> > +extern AVCodecParser ff_sipr_parser;
>> > +extern AVCodecParser ff_tak_parser;
>> > +extern AVCodecParser ff_vc1_parser;
>> > +extern AVCodecParser ff_vorbis_parser;
>> > +extern AVCodecParser ff_vp3_parser;
>> > +extern AVCodecParser ff_vp8_parser;
>> > +extern AVCodecParser ff_vp9_parser;
>> > +extern AVCodecParser ff_xma_parser;
>>
>> Why these are not in allcodecs.c?
>>
>
> Because they're parsers.
>

They still need initialize next pointer. So better to initialize it on
avcodec_register_all().


More information about the ffmpeg-devel mailing list