summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Garrett-Glaser <darkshikari@gmail.com>2009-11-24 15:49:34 +0000
committerJason Garrett-Glaser <darkshikari@gmail.com>2009-11-24 15:49:34 +0000
commit096c87f667ab8cdfc4fd290c80421a80c842adca (patch)
tree020f28c639f7d2578e375e3a056580056935202f
parentf3bdc3da15e3c794f226f915656049bd01fbb871 (diff)
downloadffmpeg-streaming-096c87f667ab8cdfc4fd290c80421a80c842adca.zip
ffmpeg-streaming-096c87f667ab8cdfc4fd290c80421a80c842adca.tar.gz
Add weightp support in API for libx264.
ffmpeg can encode baseline profile again. Originally committed as revision 20600 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rwxr-xr-xconfigure4
-rw-r--r--ffpresets/libx264-baseline.ffpreset1
-rw-r--r--ffpresets/libx264-default.ffpreset1
-rw-r--r--ffpresets/libx264-fastfirstpass.ffpreset3
-rw-r--r--ffpresets/libx264-hq.ffpreset1
-rw-r--r--ffpresets/libx264-ipod320.ffpreset1
-rw-r--r--ffpresets/libx264-ipod640.ffpreset1
-rw-r--r--ffpresets/libx264-lossless_fast.ffpreset1
-rw-r--r--ffpresets/libx264-lossless_max.ffpreset1
-rw-r--r--ffpresets/libx264-lossless_medium.ffpreset1
-rw-r--r--ffpresets/libx264-lossless_slow.ffpreset1
-rw-r--r--ffpresets/libx264-lossless_slower.ffpreset1
-rw-r--r--ffpresets/libx264-max.ffpreset1
-rw-r--r--ffpresets/libx264-normal.ffpreset1
-rw-r--r--ffpresets/libx264-slowfirstpass.ffpreset1
-rw-r--r--libavcodec/avcodec.h12
-rw-r--r--libavcodec/libx264.c1
-rw-r--r--libavcodec/options.c1
18 files changed, 30 insertions, 4 deletions
diff --git a/configure b/configure
index 13e53d1..2b7cbd8 100755
--- a/configure
+++ b/configure
@@ -2378,8 +2378,8 @@ enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm &&
- { check_cpp_condition x264.h "X264_BUILD >= 78" ||
- die "ERROR: libx264 version must be >= 0.78."; }
+ { check_cpp_condition x264.h "X264_BUILD >= 79" ||
+ die "ERROR: libx264 version must be >= 0.79."; }
enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
diff --git a/ffpresets/libx264-baseline.ffpreset b/ffpresets/libx264-baseline.ffpreset
index 4766418..ee7654b 100644
--- a/ffpresets/libx264-baseline.ffpreset
+++ b/ffpresets/libx264-baseline.ffpreset
@@ -1,3 +1,4 @@
coder=0
bf=0
flags2=-wpred-dct8x8
+wpredp=0
diff --git a/ffpresets/libx264-default.ffpreset b/ffpresets/libx264-default.ffpreset
index 1377530..75191e2 100644
--- a/ffpresets/libx264-default.ffpreset
+++ b/ffpresets/libx264-default.ffpreset
@@ -19,3 +19,4 @@ refs=3
directpred=1
trellis=1
flags2=+mixed_refs+wpred+dct8x8+fastpskip
+wpredp=2
diff --git a/ffpresets/libx264-fastfirstpass.ffpreset b/ffpresets/libx264-fastfirstpass.ffpreset
index 20aecf1..7278f77 100644
--- a/ffpresets/libx264-fastfirstpass.ffpreset
+++ b/ffpresets/libx264-fastfirstpass.ffpreset
@@ -3,7 +3,7 @@ flags=+loop
cmp=+chroma
partitions=-parti8x8-parti4x4-partp8x8-partp4x4-partb8x8
me_method=dia
-subq=1
+subq=2
me_range=16
g=250
keyint_min=25
@@ -19,3 +19,4 @@ refs=1
directpred=3
trellis=0
flags2=-bpyramid-wpred-mixed_refs-dct8x8+fastpskip
+wpredp=2
diff --git a/ffpresets/libx264-hq.ffpreset b/ffpresets/libx264-hq.ffpreset
index 32b64f1..9c14d8f 100644
--- a/ffpresets/libx264-hq.ffpreset
+++ b/ffpresets/libx264-hq.ffpreset
@@ -19,3 +19,4 @@ refs=4
directpred=3
trellis=1
flags2=+wpred+mixed_refs+dct8x8+fastpskip
+wpredp=2
diff --git a/ffpresets/libx264-ipod320.ffpreset b/ffpresets/libx264-ipod320.ffpreset
index 89441c7..943b521 100644
--- a/ffpresets/libx264-ipod320.ffpreset
+++ b/ffpresets/libx264-ipod320.ffpreset
@@ -4,3 +4,4 @@ flags2=-wpred-dct8x8
level=13
maxrate=768000
bufsize=3000000
+wpredp=0
diff --git a/ffpresets/libx264-ipod640.ffpreset b/ffpresets/libx264-ipod640.ffpreset
index fd58e2a..1ed3d9f 100644
--- a/ffpresets/libx264-ipod640.ffpreset
+++ b/ffpresets/libx264-ipod640.ffpreset
@@ -5,3 +5,4 @@ flags2=-wpred-dct8x8
level=30
maxrate=10000000
bufsize=10000000
+wpredp=0
diff --git a/ffpresets/libx264-lossless_fast.ffpreset b/ffpresets/libx264-lossless_fast.ffpreset
index dcf418a..ea08d3c 100644
--- a/ffpresets/libx264-lossless_fast.ffpreset
+++ b/ffpresets/libx264-lossless_fast.ffpreset
@@ -17,3 +17,4 @@ qdiff=4
directpred=1
flags2=+fastpskip
cqp=0
+wpredp=0
diff --git a/ffpresets/libx264-lossless_max.ffpreset b/ffpresets/libx264-lossless_max.ffpreset
index b8506c2..8c049c9 100644
--- a/ffpresets/libx264-lossless_max.ffpreset
+++ b/ffpresets/libx264-lossless_max.ffpreset
@@ -18,3 +18,4 @@ refs=16
directpred=1
flags2=+mixed_refs+dct8x8+fastpskip
cqp=0
+wpredp=2
diff --git a/ffpresets/libx264-lossless_medium.ffpreset b/ffpresets/libx264-lossless_medium.ffpreset
index 99fb6b9..558be6c 100644
--- a/ffpresets/libx264-lossless_medium.ffpreset
+++ b/ffpresets/libx264-lossless_medium.ffpreset
@@ -17,3 +17,4 @@ qdiff=4
directpred=1
flags2=+fastpskip
cqp=0
+wpredp=2
diff --git a/ffpresets/libx264-lossless_slow.ffpreset b/ffpresets/libx264-lossless_slow.ffpreset
index 2ecb55b..ff641cf 100644
--- a/ffpresets/libx264-lossless_slow.ffpreset
+++ b/ffpresets/libx264-lossless_slow.ffpreset
@@ -18,3 +18,4 @@ refs=2
directpred=1
flags2=+dct8x8+fastpskip
cqp=0
+wpredp=2
diff --git a/ffpresets/libx264-lossless_slower.ffpreset b/ffpresets/libx264-lossless_slower.ffpreset
index dd499c7..854f74b 100644
--- a/ffpresets/libx264-lossless_slower.ffpreset
+++ b/ffpresets/libx264-lossless_slower.ffpreset
@@ -18,3 +18,4 @@ refs=4
directpred=1
flags2=+mixed_refs+dct8x8+fastpskip
cqp=0
+wpredp=2
diff --git a/ffpresets/libx264-max.ffpreset b/ffpresets/libx264-max.ffpreset
index fe498bb..667ba85 100644
--- a/ffpresets/libx264-max.ffpreset
+++ b/ffpresets/libx264-max.ffpreset
@@ -19,3 +19,4 @@ refs=16
directpred=3
trellis=2
flags2=+wpred+mixed_refs+dct8x8-fastpskip
+wpredp=2
diff --git a/ffpresets/libx264-normal.ffpreset b/ffpresets/libx264-normal.ffpreset
index c0a6c8e..ee790b6 100644
--- a/ffpresets/libx264-normal.ffpreset
+++ b/ffpresets/libx264-normal.ffpreset
@@ -19,3 +19,4 @@ refs=2
directpred=3
trellis=0
flags2=+wpred+dct8x8+fastpskip
+wpredp=2
diff --git a/ffpresets/libx264-slowfirstpass.ffpreset b/ffpresets/libx264-slowfirstpass.ffpreset
index 280c336..fe07331 100644
--- a/ffpresets/libx264-slowfirstpass.ffpreset
+++ b/ffpresets/libx264-slowfirstpass.ffpreset
@@ -19,3 +19,4 @@ refs=1
directpred=3
trellis=0
flags2=+wpred+dct8x8+fastpskip
+wpredp=2
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index ac3b803..f4fe7d6 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -30,7 +30,7 @@
#include "libavutil/avutil.h"
#define LIBAVCODEC_VERSION_MAJOR 52
-#define LIBAVCODEC_VERSION_MINOR 41
+#define LIBAVCODEC_VERSION_MINOR 42
#define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
@@ -2554,6 +2554,16 @@ typedef struct AVCodecContext {
* - decoding: Set by libavcodec, user can override.
*/
int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
+
+ /**
+ * explicit P-frame weighted prediction analysis method
+ * 0: off
+ * 1: fast blind weighting (one reference duplicate with -1 offset)
+ * 2: smart weighting (full fade detection analysis)
+ * - encoding: Set by user.
+ * - decoding: unused
+ */
+ int weighted_p_pred;
} AVCodecContext;
/**
diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
index 3a3f1e5..05c2980 100644
--- a/libavcodec/libx264.c
+++ b/libavcodec/libx264.c
@@ -228,6 +228,7 @@ static av_cold int X264_init(AVCodecContext *avctx)
x4->params.analyse.i_direct_mv_pred = avctx->directpred;
x4->params.analyse.b_weighted_bipred = avctx->flags2 & CODEC_FLAG2_WPRED;
+ x4->params.analyse.i_weighted_pred = avctx->weighted_p_pred;
if (avctx->me_method == ME_EPZS)
x4->params.analyse.i_me_method = X264_ME_DIA;
diff --git a/libavcodec/options.c b/libavcodec/options.c
index dbfdf70..ded294e 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -124,6 +124,7 @@ static const AVOption options[]={
{"b_qfactor", "qp factor between p and b frames", OFFSET(b_quant_factor), FF_OPT_TYPE_FLOAT, 1.25, -FLT_MAX, FLT_MAX, V|E},
{"rc_strategy", "ratecontrol method", OFFSET(rc_strategy), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},
{"b_strategy", "strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), FF_OPT_TYPE_INT, 0, INT_MIN, INT_MAX, V|E},
+{"wpredp", "weighted prediction analysis method", OFFSET(weighted_p_pred), FF_OPT_TYPE_INT, 0, INT_MIN, INT_MAX, V|E},
{"hurry_up", NULL, OFFSET(hurry_up), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D},
{"ps", "rtp payload size in bytes", OFFSET(rtp_payload_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},
{"mv_bits", NULL, OFFSET(mv_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX},
OpenPOWER on IntegriCloud