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