diff mbox

[FFmpeg-devel] avcodec/parser: move parsers list and related API to its own file

Message ID 20180721172821.5732-1-jamrial@gmail.com
State Accepted
Commit 3735d55af32e845a7fe591bc4023c057f8e513f9
Headers show

Commit Message

James Almer July 21, 2018, 5:28 p.m. UTC
And add it to the list of configurable components in Makefile, so changes to
the file will be tracked and the usual warning to suggest re-running configure
will be shown.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 Makefile             |   1 +
 configure            |   2 +-
 libavcodec/Makefile  |   1 +
 libavcodec/parser.c  |  85 ----------------------------------
 libavcodec/parsers.c | 106 +++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 109 insertions(+), 86 deletions(-)
 create mode 100644 libavcodec/parsers.c

Comments

Rostislav Pehlivanov July 21, 2018, 5:58 p.m. UTC | #1
On 21 July 2018 at 18:28, James Almer <jamrial@gmail.com> wrote:

> And add it to the list of configurable components in Makefile, so changes
> to
> the file will be tracked and the usual warning to suggest re-running
> configure
> will be shown.
>
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  Makefile             |   1 +
>  configure            |   2 +-
>  libavcodec/Makefile  |   1 +
>  libavcodec/parser.c  |  85 ----------------------------------
>  libavcodec/parsers.c | 106 +++++++++++++++++++++++++++++++++++++++++++
>  5 files changed, 109 insertions(+), 86 deletions(-)
>  create mode 100644 libavcodec/parsers.c
>
> diff --git a/Makefile b/Makefile
> index 0cd0a1d6f2..4bf1dfedcf 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -58,6 +58,7 @@ tools/target_dec_%_fuzzer$(EXESUF): $(FF_DEP_LIBS)
>  CONFIGURABLE_COMPONENTS =                                           \
>      $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c))                 \
>      $(SRC_PATH)/libavcodec/bitstream_filters.c                      \
> +    $(SRC_PATH)/libavcodec/parsers.c                                \
>      $(SRC_PATH)/libavformat/protocols.c                             \
>
>  config.h: ffbuild/.config
> diff --git a/configure b/configure
> index 534c62ed98..741f56d565 100755
> --- a/configure
> +++ b/configure
> @@ -3679,7 +3679,7 @@ CODEC_LIST="
>      $ENCODER_LIST
>      $DECODER_LIST
>  "
> -PARSER_LIST=$(find_things_extern parser AVCodecParser
> libavcodec/parser.c)
> +PARSER_LIST=$(find_things_extern parser AVCodecParser
> libavcodec/parsers.c)
>  BSF_LIST=$(find_things_extern bsf AVBitStreamFilter
> libavcodec/bitstream_filters.c)
>  HWACCEL_LIST=$(find_things_extern hwaccel AVHWAccel
> libavcodec/hwaccels.h)
>  PROTOCOL_LIST=$(find_things_extern protocol URLProtocol
> libavformat/protocols.c)
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index 2d4bc48dab..e62603f0dd 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -44,6 +44,7 @@ OBJS = ac3_parser.o
>                \
>         options.o                                                        \
>         mjpegenc_huffman.o                                               \
>         parser.o                                                         \
> +       parsers.o                                                        \
>         profiles.o                                                       \
>         qsv_api.o                                                        \
>         raw.o                                                            \
> diff --git a/libavcodec/parser.c b/libavcodec/parser.c
> index f43b197d5e..0a994a3f30 100644
> --- a/libavcodec/parser.c
> +++ b/libavcodec/parser.c
> @@ -27,95 +27,10 @@
>  #include "libavutil/avassert.h"
>  #include "libavutil/internal.h"
>  #include "libavutil/mem.h"
> -#include "libavutil/thread.h"
>
>  #include "internal.h"
>  #include "parser.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_sbc_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;
> -
> -#include "libavcodec/parser_list.c"
> -
> -static AVOnce av_parser_next_init = AV_ONCE_INIT;
> -
> -static void av_parser_init_next(void)
> -{
> -    AVCodecParser *prev = NULL, *p;
> -    int i = 0;
> -    while ((p = (AVCodecParser*)parser_list[i++])) {
> -        if (prev)
> -            prev->next = p;
> -        prev = p;
> -    }
> -}
> -
> -AVCodecParser *av_parser_next(const AVCodecParser *p)
> -{
> -    ff_thread_once(&av_parser_next_init, av_parser_init_next);
> -
> -    if (p)
> -        return p->next;
> -    else
> -        return (AVCodecParser*)parser_list[0];
> -}
> -
> -const AVCodecParser *av_parser_iterate(void **opaque)
> -{
> -    uintptr_t i = (uintptr_t)*opaque;
> -    const AVCodecParser *p = parser_list[i];
> -
> -    if (p)
> -        *opaque = (void*)(i + 1);
> -
> -    return p;
> -}
> -
> -void av_register_codec_parser(AVCodecParser *parser)
> -{
> -    ff_thread_once(&av_parser_next_init, av_parser_init_next);
> -}
> -
>  AVCodecParserContext *av_parser_init(int codec_id)
>  {
>      AVCodecParserContext *s = NULL;
> diff --git a/libavcodec/parsers.c b/libavcodec/parsers.c
> new file mode 100644
> index 0000000000..f2886ff45f
> --- /dev/null
> +++ b/libavcodec/parsers.c
> @@ -0,0 +1,106 @@
> +/*
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301 USA
> + */
> +
> +#include <stdint.h>
> +
> +#include "libavutil/thread.h"
> +
> +#include "avcodec.h"
> +
> +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_sbc_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;
> +
> +#include "libavcodec/parser_list.c"
> +
> +static AVOnce av_parser_next_init = AV_ONCE_INIT;
> +
> +static void av_parser_init_next(void)
> +{
> +    AVCodecParser *prev = NULL, *p;
> +    int i = 0;
> +    while ((p = (AVCodecParser*)parser_list[i++])) {
> +        if (prev)
> +            prev->next = p;
> +        prev = p;
> +    }
> +}
> +
> +AVCodecParser *av_parser_next(const AVCodecParser *p)
> +{
> +    ff_thread_once(&av_parser_next_init, av_parser_init_next);
> +
> +    if (p)
> +        return p->next;
> +    else
> +        return (AVCodecParser*)parser_list[0];
> +}
> +
> +const AVCodecParser *av_parser_iterate(void **opaque)
> +{
> +    uintptr_t i = (uintptr_t)*opaque;
> +    const AVCodecParser *p = parser_list[i];
> +
> +    if (p)
> +        *opaque = (void*)(i + 1);
> +
> +    return p;
> +}
> +
> +void av_register_codec_parser(AVCodecParser *parser)
> +{
> +    ff_thread_once(&av_parser_next_init, av_parser_init_next);
> +}
> --
> 2.18.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

Looks fine
James Almer July 21, 2018, 7:23 p.m. UTC | #2
On 7/21/2018 2:58 PM, Rostislav Pehlivanov wrote:
> On 21 July 2018 at 18:28, James Almer <jamrial@gmail.com> wrote:
> 
>> And add it to the list of configurable components in Makefile, so changes
>> to
>> the file will be tracked and the usual warning to suggest re-running
>> configure
>> will be shown.
>>
>> Signed-off-by: James Almer <jamrial@gmail.com>
>> ---
>>  Makefile             |   1 +
>>  configure            |   2 +-
>>  libavcodec/Makefile  |   1 +
>>  libavcodec/parser.c  |  85 ----------------------------------
>>  libavcodec/parsers.c | 106 +++++++++++++++++++++++++++++++++++++++++++
>>  5 files changed, 109 insertions(+), 86 deletions(-)
>>  create mode 100644 libavcodec/parsers.c
> 
> Looks fine

Pushed, thanks.
Michael Niedermayer July 21, 2018, 7:54 p.m. UTC | #3
On Sat, Jul 21, 2018 at 02:28:21PM -0300, James Almer wrote:
> And add it to the list of configurable components in Makefile, so changes to
> the file will be tracked and the usual warning to suggest re-running configure
> will be shown.
> 
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  Makefile             |   1 +
>  configure            |   2 +-
>  libavcodec/Makefile  |   1 +
>  libavcodec/parser.c  |  85 ----------------------------------
>  libavcodec/parsers.c | 106 +++++++++++++++++++++++++++++++++++++++++++
>  5 files changed, 109 insertions(+), 86 deletions(-)
>  create mode 100644 libavcodec/parsers.c

parser.c, parsers.c parser_list.c

decode.c (no decoder.c, no decoders, no decoder_list.c, no parse.c)
encode.c (matching decode but differing from parser)

seems a bit inconsistent, naming wise.

[...]
James Almer July 21, 2018, 8:36 p.m. UTC | #4
On 7/21/2018 4:54 PM, Michael Niedermayer wrote:
> On Sat, Jul 21, 2018 at 02:28:21PM -0300, James Almer wrote:
>> And add it to the list of configurable components in Makefile, so changes to
>> the file will be tracked and the usual warning to suggest re-running configure
>> will be shown.
>>
>> Signed-off-by: James Almer <jamrial@gmail.com>
>> ---
>>  Makefile             |   1 +
>>  configure            |   2 +-
>>  libavcodec/Makefile  |   1 +
>>  libavcodec/parser.c  |  85 ----------------------------------
>>  libavcodec/parsers.c | 106 +++++++++++++++++++++++++++++++++++++++++++
>>  5 files changed, 109 insertions(+), 86 deletions(-)
>>  create mode 100644 libavcodec/parsers.c
> 
> parser.c, parsers.c parser_list.c
> 
> decode.c (no decoder.c, no decoders, no decoder_list.c, no parse.c)
> encode.c (matching decode but differing from parser)
> 
> seems a bit inconsistent, naming wise.

decode.c and encode.c are not component related files. They are the same
as parser.c is now, containing API independent of available components.

It still could use some cleaning, in any case. We have the following
right now:

allcodecs.c (list of decoders and encoders, plus related
iteration/register API)
codec_list.c (generated file for enabled decoders and encoders)
decode.c (non iteration/register related decoder API functions)
encode.c (non iteration/register related encoder API functions)

allfilters.c (list of filters, plus related iteration/register API)
filter_list.c (generated file for enabled filters)

allformats.c (list of demuxers and muxers, plus related
iteration/register API)
demuxer_list.c (generated file for enabled demuxers)
muxer_list.c (generated file for enabled muxers)

alldevices.c (list of indevs and outdevs, plus related
iteration/register API)
indev_list.c (generated file for enabled indevs)
outdev_list.c (generated file for enabled outdevs)

protocols.c (list of protocols, plus related iteration/register API)
protocol_list.c (generated file for enabled protocols)

bitstream_filters.c (list of bsfs, plus related iteration/register API)
bsf_list.c (generated file for enabled bsfs)
bsf.c (non iteration/register related bsf API functions)
bitstream_filter.c (deprecated bsf API, to be removed in a major bump)

parsers.c (list of parsers, plus related iteration/register API)
parser_list.c (generated file for enabled parsers)
parser.c (non iteration/register related parser API functions)


We could add the "all" prefix to the last three component list files. We
could rename parser.c into parse.c to be in line with decode/encode.c.
We could split the generated list of decoders and encoders into their
own files. We could look into moving the deprecated bsf functions into
the main bsf file and choose a consistent naming for them all (bsf is
shorter and probably best), etc.

I can look into doing some cleaning in this regard if we come to a
consensus as to what should be done. This patch was mainly to get the
file listing available parsers to trigger the Makefile message in case
of changes, while making sure it only happens when new parsers are added
instead of every time a bug is fixed in av_parser_parse2() or any other
such function.
Michael Niedermayer July 21, 2018, 8:51 p.m. UTC | #5
On Sat, Jul 21, 2018 at 05:36:02PM -0300, James Almer wrote:
> On 7/21/2018 4:54 PM, Michael Niedermayer wrote:
> > On Sat, Jul 21, 2018 at 02:28:21PM -0300, James Almer wrote:
> >> And add it to the list of configurable components in Makefile, so changes to
> >> the file will be tracked and the usual warning to suggest re-running configure
> >> will be shown.
> >>
> >> Signed-off-by: James Almer <jamrial@gmail.com>
> >> ---
> >>  Makefile             |   1 +
> >>  configure            |   2 +-
> >>  libavcodec/Makefile  |   1 +
> >>  libavcodec/parser.c  |  85 ----------------------------------
> >>  libavcodec/parsers.c | 106 +++++++++++++++++++++++++++++++++++++++++++
> >>  5 files changed, 109 insertions(+), 86 deletions(-)
> >>  create mode 100644 libavcodec/parsers.c
> > 
> > parser.c, parsers.c parser_list.c
> > 
> > decode.c (no decoder.c, no decoders, no decoder_list.c, no parse.c)
> > encode.c (matching decode but differing from parser)
> > 
> > seems a bit inconsistent, naming wise.
> 
> decode.c and encode.c are not component related files. They are the same
> as parser.c is now, containing API independent of available components.
> 
> It still could use some cleaning, in any case. We have the following
> right now:
> 
> allcodecs.c (list of decoders and encoders, plus related
> iteration/register API)
> codec_list.c (generated file for enabled decoders and encoders)
> decode.c (non iteration/register related decoder API functions)
> encode.c (non iteration/register related encoder API functions)
> 
> allfilters.c (list of filters, plus related iteration/register API)
> filter_list.c (generated file for enabled filters)
> 
> allformats.c (list of demuxers and muxers, plus related
> iteration/register API)
> demuxer_list.c (generated file for enabled demuxers)
> muxer_list.c (generated file for enabled muxers)
> 
> alldevices.c (list of indevs and outdevs, plus related
> iteration/register API)
> indev_list.c (generated file for enabled indevs)
> outdev_list.c (generated file for enabled outdevs)
> 
> protocols.c (list of protocols, plus related iteration/register API)
> protocol_list.c (generated file for enabled protocols)
> 
> bitstream_filters.c (list of bsfs, plus related iteration/register API)
> bsf_list.c (generated file for enabled bsfs)
> bsf.c (non iteration/register related bsf API functions)
> bitstream_filter.c (deprecated bsf API, to be removed in a major bump)
> 
> parsers.c (list of parsers, plus related iteration/register API)
> parser_list.c (generated file for enabled parsers)
> parser.c (non iteration/register related parser API functions)
> 
> 

> We could add the "all" prefix to the last three component list files. We
> could rename parser.c into parse.c to be in line with decode/encode.c.
> We could split the generated list of decoders and encoders into their
> own files. We could look into moving the deprecated bsf functions into
> the main bsf file and choose a consistent naming for them all (bsf is
> shorter and probably best), etc.
> 
> I can look into doing some cleaning in this regard if we come to a
> consensus as to what should be done. This patch was mainly to get the
> file listing available parsers to trigger the Makefile message in case
> of changes, while making sure it only happens when new parsers are added
> instead of every time a bug is fixed in av_parser_parse2() or any other
> such function.

Iam in favor of any cleanup in respect to file naming that makes things
more logically, easy to understand and consistently structured. 
Then again i also dont intend here to push anyone toward anything.
If you have any doubt about some change on the naming then its better to
leave it, we can always rename something later but renaming and then undoing
would be alot more annoying.

I just wanted to bring attention to the naming as it seemed to me that
it was inconsistent for no obvious reason

PS: the file list you wrote in that mail, this should be in some more
vissible place i think than a mail on the ML

thanks

[...]
diff mbox

Patch

diff --git a/Makefile b/Makefile
index 0cd0a1d6f2..4bf1dfedcf 100644
--- a/Makefile
+++ b/Makefile
@@ -58,6 +58,7 @@  tools/target_dec_%_fuzzer$(EXESUF): $(FF_DEP_LIBS)
 CONFIGURABLE_COMPONENTS =                                           \
     $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c))                 \
     $(SRC_PATH)/libavcodec/bitstream_filters.c                      \
+    $(SRC_PATH)/libavcodec/parsers.c                                \
     $(SRC_PATH)/libavformat/protocols.c                             \
 
 config.h: ffbuild/.config
diff --git a/configure b/configure
index 534c62ed98..741f56d565 100755
--- a/configure
+++ b/configure
@@ -3679,7 +3679,7 @@  CODEC_LIST="
     $ENCODER_LIST
     $DECODER_LIST
 "
-PARSER_LIST=$(find_things_extern parser AVCodecParser libavcodec/parser.c)
+PARSER_LIST=$(find_things_extern parser AVCodecParser libavcodec/parsers.c)
 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
 HWACCEL_LIST=$(find_things_extern hwaccel AVHWAccel libavcodec/hwaccels.h)
 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 2d4bc48dab..e62603f0dd 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -44,6 +44,7 @@  OBJS = ac3_parser.o                                                     \
        options.o                                                        \
        mjpegenc_huffman.o                                               \
        parser.o                                                         \
+       parsers.o                                                        \
        profiles.o                                                       \
        qsv_api.o                                                        \
        raw.o                                                            \
diff --git a/libavcodec/parser.c b/libavcodec/parser.c
index f43b197d5e..0a994a3f30 100644
--- a/libavcodec/parser.c
+++ b/libavcodec/parser.c
@@ -27,95 +27,10 @@ 
 #include "libavutil/avassert.h"
 #include "libavutil/internal.h"
 #include "libavutil/mem.h"
-#include "libavutil/thread.h"
 
 #include "internal.h"
 #include "parser.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_sbc_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;
-
-#include "libavcodec/parser_list.c"
-
-static AVOnce av_parser_next_init = AV_ONCE_INIT;
-
-static void av_parser_init_next(void)
-{
-    AVCodecParser *prev = NULL, *p;
-    int i = 0;
-    while ((p = (AVCodecParser*)parser_list[i++])) {
-        if (prev)
-            prev->next = p;
-        prev = p;
-    }
-}
-
-AVCodecParser *av_parser_next(const AVCodecParser *p)
-{
-    ff_thread_once(&av_parser_next_init, av_parser_init_next);
-
-    if (p)
-        return p->next;
-    else
-        return (AVCodecParser*)parser_list[0];
-}
-
-const AVCodecParser *av_parser_iterate(void **opaque)
-{
-    uintptr_t i = (uintptr_t)*opaque;
-    const AVCodecParser *p = parser_list[i];
-
-    if (p)
-        *opaque = (void*)(i + 1);
-
-    return p;
-}
-
-void av_register_codec_parser(AVCodecParser *parser)
-{
-    ff_thread_once(&av_parser_next_init, av_parser_init_next);
-}
-
 AVCodecParserContext *av_parser_init(int codec_id)
 {
     AVCodecParserContext *s = NULL;
diff --git a/libavcodec/parsers.c b/libavcodec/parsers.c
new file mode 100644
index 0000000000..f2886ff45f
--- /dev/null
+++ b/libavcodec/parsers.c
@@ -0,0 +1,106 @@ 
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdint.h>
+
+#include "libavutil/thread.h"
+
+#include "avcodec.h"
+
+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_sbc_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;
+
+#include "libavcodec/parser_list.c"
+
+static AVOnce av_parser_next_init = AV_ONCE_INIT;
+
+static void av_parser_init_next(void)
+{
+    AVCodecParser *prev = NULL, *p;
+    int i = 0;
+    while ((p = (AVCodecParser*)parser_list[i++])) {
+        if (prev)
+            prev->next = p;
+        prev = p;
+    }
+}
+
+AVCodecParser *av_parser_next(const AVCodecParser *p)
+{
+    ff_thread_once(&av_parser_next_init, av_parser_init_next);
+
+    if (p)
+        return p->next;
+    else
+        return (AVCodecParser*)parser_list[0];
+}
+
+const AVCodecParser *av_parser_iterate(void **opaque)
+{
+    uintptr_t i = (uintptr_t)*opaque;
+    const AVCodecParser *p = parser_list[i];
+
+    if (p)
+        *opaque = (void*)(i + 1);
+
+    return p;
+}
+
+void av_register_codec_parser(AVCodecParser *parser)
+{
+    ff_thread_once(&av_parser_next_init, av_parser_init_next);
+}