Quoting Luca Barbato (2015-07-15 20:48:26)
> ---
>

The commit message is still weird. 'prefix: change stuff' does not make
much sense when 'prefix' does not exist yet.

I'd change it to either
libx264: support mpeg2 encoding
or
lavc: add support for (mpeg2 encoding through) libx262
or something along those lines.

> As Anton suggested now x262 is a subfeature of x264
> 
>  configure              |  5 +++-
>  libavcodec/Makefile    |  1 +
>  libavcodec/allcodecs.c |  1 +
>  libavcodec/libx264.c   | 62 
> +++++++++++++++++++++++++++++++++++++++++++-------
>  4 files changed, 60 insertions(+), 9 deletions(-)
> 
> diff --git a/configure b/configure
> index 28115d3..5e66034 100755
> --- a/configure
> +++ b/configure
> @@ -1607,6 +1607,7 @@ CONFIG_EXTRA="
>      imdct15
>      intrax8
>      jpegtables
> +    libx262
>      lgplv3
>      lpc
>      me_cmp
> @@ -4351,7 +4352,9 @@ enabled libwavpack        && require libwavpack 
> wavpack/wavpack.h WavpackOpenFil
>  enabled libwebp           && require_pkg_config libwebp webp/encode.h 
> WebPGetEncoderVersion
>  enabled libx264           && require_pkg_config x264 "stdint.h x264.h" 
> x264_encoder_encode &&
>                               { check_cpp_condition x264.h "X264_BUILD >= 
> 118" ||
> -                               die "ERROR: libx264 version must be >= 
> 0.118."; }
> +                               die "ERROR: libx264 version must be >= 
> 0.118."; } &&
> +                             { check_cpp_condition x264.h "X264_MPEG2" &&
> +                               enable libx262; }
>  enabled libx265           && require_pkg_config x265 x265.h x265_api_get &&
>                               { check_cpp_condition x265.h "X265_BUILD >= 57" 
> ||
>                                 die "ERROR: libx265 version must be >= 57."; }
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index d933ffd..008207b 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -671,6 +671,7 @@ OBJS-$(CONFIG_LIBVPX_VP9_DECODER)         += libvpxdec.o 
> libvpx.o
>  OBJS-$(CONFIG_LIBVPX_VP9_ENCODER)         += libvpxenc.o libvpx.o
>  OBJS-$(CONFIG_LIBWAVPACK_ENCODER)         += libwavpackenc.o
>  OBJS-$(CONFIG_LIBWEBP_ENCODER)            += libwebpenc.o
> +OBJS-$(CONFIG_LIBX262_ENCODER)            += libx264.o

Calling it libx262 when the actual library is still called libx264 is a
bit weird, but I don't really see a good solution.

>  OBJS-$(CONFIG_LIBX264_ENCODER)            += libx264.o
>  OBJS-$(CONFIG_LIBX265_ENCODER)            += libx265.o
>  OBJS-$(CONFIG_LIBXAVS_ENCODER)            += libxavs.o
> diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
> index a3f1550..9fdbe8f 100644
> --- a/libavcodec/allcodecs.c
> +++ b/libavcodec/allcodecs.c
> @@ -473,6 +473,7 @@ void avcodec_register_all(void)
>      REGISTER_ENCDEC (LIBVPX_VP9,        libvpx_vp9);
>      REGISTER_ENCODER(LIBWAVPACK,        libwavpack);
>      REGISTER_ENCODER(LIBWEBP,           libwebp);
> +    REGISTER_ENCODER(LIBX262,           libx262);
>      REGISTER_ENCODER(LIBX264,           libx264);
>      REGISTER_ENCODER(LIBX265,           libx265);
>      REGISTER_ENCODER(LIBXAVS,           libxavs);
> diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
> index 7c502fd..7da09ca 100644
> --- a/libavcodec/libx264.c
> +++ b/libavcodec/libx264.c
> @@ -319,11 +319,18 @@ static int convert_pix_fmt(enum AVPixelFormat pix_fmt)
>          return AVERROR(EINVAL);\
>      }
> 
> -static av_cold int X264_init(AVCodecContext *avctx)
> +static av_always_inline int common_init(AVCodecContext *avctx, int mpeg2)

No need for this, just do
int mpeg2 = avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO;

>  {
>      X264Context *x4 = avctx->priv_data;
> 
> +#if CONFIG_LIBX262_ENCODER
> +    if (mpeg2) {
> +        x4->params.b_mpeg2 = 1;
> +        x264_param_default_mpeg2(&x4->params);
> +    } else
> +#else
>      x264_param_default(&x4->params);
> +#endif
> 
>      x4->params.b_deblocking_filter         = avctx->flags & 
> CODEC_FLAG_LOOP_FILTER;
> 
> @@ -663,13 +670,6 @@ static const AVOption options[] = {
>      { NULL },
>  };
> 
> -static const AVClass class = {
> -    .class_name = "libx264",
> -    .item_name  = av_default_item_name,
> -    .option     = options,
> -    .version    = LIBAVUTIL_VERSION_INT,
> -};
> -
>  static const AVCodecDefault x264_defaults[] = {
>      { "b",                "0" },
>      { "bf",               "-1" },
> @@ -698,6 +698,20 @@ static const AVCodecDefault x264_defaults[] = {
>      { NULL },
>  };
> 
> +
> +#if CONFIG_LIBX264_ENCODER
> +static av_cold int X264_init(AVCodecContext *avctx)
> +{
> +    return common_init(avctx, 0);
> +}
> +
> +static const AVClass class = {
> +    .class_name = "libx264",
> +    .item_name  = av_default_item_name,
> +    .option     = options,
> +    .version    = LIBAVUTIL_VERSION_INT,
> +};
> +
>  AVCodec ff_libx264_encoder = {
>      .name             = "libx264",
>      .long_name        = NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 
> AVC / MPEG-4 part 10"),
> @@ -714,3 +728,35 @@ AVCodec ff_libx264_encoder = {
>      .caps_internal    = FF_CODEC_CAP_INIT_THREADSAFE |
>                          FF_CODEC_CAP_INIT_CLEANUP,
>  };
> +#endif
> +
> +#if CONFIG_LIBX262_ENCODER
> +static av_cold int X262_init(AVCodecContext *avctx)
> +{
> +    return common_init(avctx, 1);
> +}
> +
> +static const AVClass X262_class = {
> +    .class_name = "libx262",
> +    .item_name  = av_default_item_name,
> +    .option     = options,
> +    .version    = LIBAVUTIL_VERSION_INT,
> +};
> +
> +AVCodec ff_libx262_encoder = {
> +    .name             = "libx262",
> +    .long_name        = NULL_IF_CONFIG_SMALL("libx262 MPEG2VIDEO"),
> +    .type             = AVMEDIA_TYPE_VIDEO,
> +    .id               = AV_CODEC_ID_MPEG2VIDEO,
> +    .priv_data_size   = sizeof(X264Context),
> +    .init             = X262_init,
> +    .encode2          = X264_frame,
> +    .close            = X264_close,
> +    .capabilities     = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS,
> +    .priv_class       = &X262_class,
> +    .defaults         = x264_defaults,
> +    .init_static_data = X264_init_static,

Drop this, it's not needed for mpeg2.

-- 
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to