aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2015-07-17 21:21:03 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2015-07-17 21:21:03 +0200
commite56f14659f580954626e8c1660771c593ecd74fa (patch)
treec2c0eeb1f93092778165d4812316df3df2d65ff8
parent4c7c0d37e5c2ad5b046d1f543e47850c8b94403d (diff)
parente1319aa1c1be9b64117c19170344fb78841dd67c (diff)
downloadffmpeg-e56f14659f580954626e8c1660771c593ecd74fa.tar.gz
Merge commit 'e1319aa1c1be9b64117c19170344fb78841dd67c'
* commit 'e1319aa1c1be9b64117c19170344fb78841dd67c': libx264: Add support for the MPEG2 encoder Conflicts: configure libavcodec/Makefile libavcodec/libx264.c Merged-by: Michael Niedermayer <michael@niedermayer.cc>
-rwxr-xr-xconfigure6
-rw-r--r--libavcodec/Makefile1
-rw-r--r--libavcodec/allcodecs.c1
-rw-r--r--libavcodec/libx264.c63
4 files changed, 56 insertions, 15 deletions
diff --git a/configure b/configure
index 1cd9fd622f..7aeae1825a 100755
--- a/configure
+++ b/configure
@@ -1920,6 +1920,7 @@ CONFIG_EXTRA="
imdct15
intrax8
jpegtables
+ libx262
lgplv3
llauddsp
llviddsp
@@ -2504,6 +2505,7 @@ libvpx_vp9_encoder_deps="libvpx"
libwavpack_encoder_deps="libwavpack"
libwebp_encoder_deps="libwebp"
libwebp_anim_encoder_deps="libwebp"
+libx262_encoder_deps="libx262"
libx264_encoder_deps="libx264"
libx264rgb_encoder_deps="libx264"
libx264rgb_encoder_select="libx264_encoder"
@@ -5228,7 +5230,9 @@ enabled libx264 && { use_pkg_config x264 "stdint.h x264.h" x264_encode
{ require libx264 x264.h x264_encoder_encode -lx264 &&
warn "using libx264 without pkg-config"; } } &&
{ check_cpp_condition x264.h "X264_BUILD >= 118" ||
- die "ERROR: libx264 must be installed and version must be >= 0.118."; }
+ die "ERROR: libx264 must be installed and 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 b7fe1c9270..204e54fe6e 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -804,6 +804,7 @@ OBJS-$(CONFIG_LIBVPX_VP9_ENCODER) += libvpxenc.o libvpx.o
OBJS-$(CONFIG_LIBWAVPACK_ENCODER) += libwavpackenc.o
OBJS-$(CONFIG_LIBWEBP_ENCODER) += libwebpenc_common.o libwebpenc.o
OBJS-$(CONFIG_LIBWEBP_ANIM_ENCODER) += libwebpenc_common.o libwebpenc_animencoder.o
+OBJS-$(CONFIG_LIBX262_ENCODER) += libx264.o
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 c8545070f2..82db791b83 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -550,6 +550,7 @@ void avcodec_register_all(void)
REGISTER_ENCODER(LIBWAVPACK, libwavpack);
REGISTER_ENCODER(LIBWEBP_ANIM, libwebp_anim); /* preferred over libwebp */
REGISTER_ENCODER(LIBWEBP, libwebp);
+ REGISTER_ENCODER(LIBX262, libx262);
REGISTER_ENCODER(LIBX264, libx264);
REGISTER_ENCODER(LIBX264RGB, libx264rgb);
REGISTER_ENCODER(LIBX265, libx265);
diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
index 4f34d065a5..4487fef736 100644
--- a/libavcodec/libx264.c
+++ b/libavcodec/libx264.c
@@ -384,7 +384,14 @@ static av_cold int X264_init(AVCodecContext *avctx)
if (avctx->global_quality > 0)
av_log(avctx, AV_LOG_WARNING, "-qscale is ignored, -crf is recommended.\n");
+#if CONFIG_LIBX262_ENCODER
+ if (avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
+ 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;
@@ -842,20 +849,6 @@ static const AVOption options[] = {
{ NULL },
};
-static const AVClass x264_class = {
- .class_name = "libx264",
- .item_name = av_default_item_name,
- .option = options,
- .version = LIBAVUTIL_VERSION_INT,
-};
-
-static const AVClass rgbclass = {
- .class_name = "libx264rgb",
- .item_name = av_default_item_name,
- .option = options,
- .version = LIBAVUTIL_VERSION_INT,
-};
-
static const AVCodecDefault x264_defaults[] = {
{ "b", "0" },
{ "bf", "-1" },
@@ -887,6 +880,21 @@ static const AVCodecDefault x264_defaults[] = {
{ NULL },
};
+#if CONFIG_LIBX264_ENCODER
+static const AVClass x264_class = {
+ .class_name = "libx264",
+ .item_name = av_default_item_name,
+ .option = options,
+ .version = LIBAVUTIL_VERSION_INT,
+};
+
+static const AVClass rgbclass = {
+ .class_name = "libx264rgb",
+ .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"),
@@ -918,3 +926,30 @@ AVCodec ff_libx264rgb_encoder = {
.defaults = x264_defaults,
.pix_fmts = pix_fmts_8bit_rgb,
};
+#endif
+
+#if CONFIG_LIBX262_ENCODER
+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 = X264_init,
+ .encode2 = X264_frame,
+ .close = X264_close,
+ .capabilities = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS,
+ .priv_class = &X262_class,
+ .defaults = x264_defaults,
+ .pix_fmts = pix_fmts_8bit,
+ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE |
+ FF_CODEC_CAP_INIT_CLEANUP,
+};
+#endif