Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
e8c090dc
Commit
e8c090dc
authored
Sep 23, 2009
by
Ilkka Ollakka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x264: set requirement to >= 0.76 for libx264
Change to handle changed x264_encoder_headers and nal-stuff
parent
2186305a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
300 deletions
+20
-300
configure.ac
configure.ac
+1
-1
modules/codec/x264.c
modules/codec/x264.c
+19
-299
No files found.
configure.ac
View file @
e8c090dc
...
...
@@ -3354,7 +3354,7 @@ if test "${enable_x264}" != "no"; then
AC_MSG_ERROR([the specified tree doesn't have x264.h])
fi
else
PKG_CHECK_MODULES(X264,x264, [
PKG_CHECK_MODULES(X264,x264
>= 0.76
, [
VLC_ADD_PLUGIN([x264])
VLC_ADD_LDFLAGS([x264],[${X264_LIBS}])
...
...
modules/codec/x264.c
View file @
e8c090dc
...
...
@@ -76,25 +76,15 @@ static void Close( vlc_object_t * );
"I-frames are inserted only every other keyint frames, which probably " \
"leads to ugly encoding artifacts. Range 1 to 100." )
#if X264_BUILD >= 55
/* r607 */
&& X264_BUILD < 67
/* r1117 */
#define PRESCENE_TEXT N_("Faster, less precise scenecut detection" )
#define PRESCENE_LONGTEXT N_( "Faster, less precise scenecut detection. " \
"Required and implied by multi-threading." )
#endif
#define BFRAMES_TEXT N_("B-frames between I and P")
#define BFRAMES_LONGTEXT N_( "Number of consecutive B-frames between I and " \
"P-frames. Range 1 to 16." )
#define B_ADAPT_TEXT N_("Adaptive B-frame decision")
#if X264_BUILD >= 63
#define B_ADAPT_LONGTEXT N_( "Force the specified number of " \
"consecutive B-frames to be used, except possibly before an I-frame." \
"Range 0 to 2." )
#else
#define B_ADAPT_LONGTEXT N_( "Force the specified number of " \
"consecutive B-frames to be used, except possibly before an I-frame." )
#endif
#define B_BIAS_TEXT N_("Influence (bias) B-frames usage")
#define B_BIAS_LONGTEXT N_( "Bias the choice to use B-frames. Positive values " \
...
...
@@ -137,10 +127,8 @@ static void Close( vlc_object_t * );
/* In order to play an interlaced output stream encoded by x264, a decoder needs
mbaff support. r570 is using the 'mb' part and not 'aff' yet; so it's really
'pure-interlaced' mode */
#if X264_BUILD >= 51
/* r570 */
#define INTERLACED_TEXT N_("Interlaced mode")
#define INTERLACED_LONGTEXT N_( "Pure-interlaced mode.")
#endif
/* Ratecontrol */
...
...
@@ -177,7 +165,6 @@ static void Close( vlc_object_t * );
#define VBV_INIT_LONGTEXT N_( "Sets the initial buffer occupancy as a " \
"fraction of the buffer size. Range 0.0 to 1.0.")
#if X264_BUILD >= 59
#define AQ_MODE_TEXT N_("How AQ distributes bits")
#define AQ_MODE_LONGTEXT N_("Defines bitdistribution mode for AQ, default 1\n" \
" - 0: Disabled\n"\
...
...
@@ -189,7 +176,6 @@ static void Close( vlc_object_t * );
"and textured areas, default 1.0 recommented to be between 0..2\n"\
" - 0.5: weak AQ\n"\
" - 1.5: strong AQ")
#endif
/* IP Ratio < 1 is technically valid but should never improve quality */
#define IPRATIO_TEXT N_("QP factor between I and P")
...
...
@@ -233,34 +219,23 @@ static void Close( vlc_object_t * );
#define DIRECT_PRED_TEXT N_("Direct MV prediction mode")
#define DIRECT_PRED_LONGTEXT N_( "Direct MV prediction mode.")
#if X264_BUILD >= 52
/* r573 */
#define DIRECT_PRED_SIZE_TEXT N_("Direct prediction size")
#define DIRECT_PRED_SIZE_LONGTEXT N_( "Direct prediction size: "\
" - 0: 4x4\n" \
" - 1: 8x8\n" \
" - -1: smallest possible according to level\n" )
#endif
#define WEIGHTB_TEXT N_("Weighted prediction for B-frames")
#define WEIGHTB_LONGTEXT N_( "Weighted prediction for B-frames.")
#define ME_TEXT N_("Integer pixel motion estimation method")
#if X264_BUILD >= 58
/* r728 */
#define ME_LONGTEXT N_( "Selects the motion estimation algorithm: "\
" - dia: diamond search, radius 1 (fast)\n" \
" - hex: hexagonal search, radius 2\n" \
" - umh: uneven multi-hexagon search (better but slower)\n" \
" - esa: exhaustive search (extremely slow, primarily for testing)\n" \
" - tesa: hadamard exhaustive search (extremely slow, primarily for testing)\n" )
#else
#define ME_LONGTEXT N_( "Selects the motion estimation algorithm: "\
" - dia: diamond search, radius 1 (fast)\n" \
" - hex: hexagonal search, radius 2\n" \
" - umh: uneven multi-hexagon search (better but slower)\n" \
" - esa: exhaustive search (extremely slow, primarily for testing)\n" )
#endif
#if X264_BUILD >= 24
#define MERANGE_TEXT N_("Maximum motion vector search range")
#define MERANGE_LONGTEXT N_( "Maximum distance to search for " \
"motion estimation, measured from predicted position(s). " \
...
...
@@ -270,44 +245,23 @@ static void Close( vlc_object_t * );
#define MVRANGE_TEXT N_("Maximum motion vector length")
#define MVRANGE_LONGTEXT N_( "Maximum motion vector length in pixels. " \
"-1 is automatic, based on level." )
#endif
#if X264_BUILD >= 55
/* r607 */
#define MVRANGE_THREAD_TEXT N_("Minimum buffer space between threads")
#define MVRANGE_THREAD_LONGTEXT N_( "Minimum buffer space between threads. " \
"-1 is automatic, based on number of threads." )
#endif
#if X264_BUILD >= 65
#define PSY_RD_TEXT N_( "Strength of psychovisual optimization, default is \"1.0:0.0\"")
#define PSY_RD_LONGTEXT N_( "First parameter controls if RD is on (subme>=6) or off"\
"second parameter controls if Trellis is used on psychovisual optimization," \
"default off")
#endif
#define SUBME_TEXT N_("Subpixel motion estimation and partition decision " \
"quality")
#if X264_BUILD >= 65
#define SUBME_MAX 9
#define SUBME_LONGTEXT N_( "This parameter controls quality versus speed " \
"tradeoffs involved in the motion estimation decision process " \
"(lower = quicker and higher = better quality). Range 1 to 9." )
#elif X264_BUILD >= 46
/* r477 */
#define SUBME_MAX 7
#define SUBME_LONGTEXT N_( "This parameter controls quality versus speed " \
"tradeoffs involved in the motion estimation decision process " \
"(lower = quicker and higher = better quality). Range 1 to 7." )
#elif X264_BUILD >= 30
/* r262 */
#define SUBME_MAX 6
#define SUBME_LONGTEXT N_( "This parameter controls quality versus speed " \
"tradeoffs involved in the motion estimation decision process " \
"(lower = quicker and higher = better quality). Range 1 to 6." )
#else
#define SUBME_MAX 5
#define SUBME_LONGTEXT N_( "This parameter controls quality versus speed " \
"tradeoffs involved in the motion estimation decision process " \
"(lower = quicker and higher = better quality). Range 1 to 5." )
#endif
#define B_RDO_TEXT N_("RD based mode decision for B-frames")
#define B_RDO_LONGTEXT N_( "RD based mode decision for B-frames. This " \
...
...
@@ -348,7 +302,6 @@ static void Close( vlc_object_t * );
#define NR_LONGTEXT N_( "Dct-domain noise reduction. Adaptive pseudo-deadzone. " \
"10 to 1000 seems to be a useful range." )
#if X264_BUILD >= 52
/* r573 */
#define DEADZONE_INTER_TEXT N_("Inter luma quantization deadzone")
#define DEADZONE_INTER_LONGTEXT N_( "Set the size of the inter luma quantization deadzone. " \
"Range 0 to 32." )
...
...
@@ -356,15 +309,12 @@ static void Close( vlc_object_t * );
#define DEADZONE_INTRA_TEXT N_("Intra luma quantization deadzone")
#define DEADZONE_INTRA_LONGTEXT N_( "Set the size of the intra luma quantization deadzone. " \
"Range 0 to 32." )
#endif
/* Input/Output */
#if X264_BUILD >= 55
/* r607 */
#define NON_DETERMINISTIC_TEXT N_("Non-deterministic optimizations when threaded")
#define NON_DETERMINISTIC_LONGTEXT N_( "Slightly improve quality of SMP, " \
"at the cost of repeatability.")
#endif
#define ASM_TEXT N_("CPU optimizations")
#define ASM_LONGTEXT N_( "Use assembler CPU optimizations.")
...
...
@@ -386,28 +336,17 @@ static void Close( vlc_object_t * );
#define VERBOSE_TEXT N_("Statistics")
#define VERBOSE_LONGTEXT N_( "Print stats for each frame.")
#if X264_BUILD >= 47
/* r518 */
#define SPS_ID_TEXT N_("SPS and PPS id numbers")
#define SPS_ID_LONGTEXT N_( "Set SPS and PPS id numbers to allow concatenating " \
"streams with different settings.")
#endif
#define AUD_TEXT N_("Access unit delimiters")
#define AUD_LONGTEXT N_( "Generate access unit delimiter NAL units.")
#if X264_BUILD >= 24 && X264_BUILD < 58
static
const
char
*
const
enc_me_list
[]
=
{
"dia"
,
"hex"
,
"umh"
,
"esa"
};
static
const
char
*
const
enc_me_list_text
[]
=
{
N_
(
"dia"
),
N_
(
"hex"
),
N_
(
"umh"
),
N_
(
"esa"
)
};
#endif
#if X264_BUILD >= 58
/* r728 */
static
const
char
*
const
enc_me_list
[]
=
{
"dia"
,
"hex"
,
"umh"
,
"esa"
,
"tesa"
};
static
const
char
*
const
enc_me_list_text
[]
=
{
N_
(
"dia"
),
N_
(
"hex"
),
N_
(
"umh"
),
N_
(
"esa"
),
N_
(
"tesa"
)
};
#endif
static
const
char
*
const
profile_list
[]
=
{
"baseline"
,
"main"
,
"high"
};
...
...
@@ -417,17 +356,10 @@ static const char *const enc_analyse_list[] =
static
const
char
*
const
enc_analyse_list_text
[]
=
{
N_
(
"none"
),
N_
(
"fast"
),
N_
(
"normal"
),
N_
(
"slow"
),
N_
(
"all"
)
};
#if X264_BUILD >= 45
/* r457 */
static
const
char
*
const
direct_pred_list
[]
=
{
"none"
,
"spatial"
,
"temporal"
,
"auto"
};
static
const
char
*
const
direct_pred_list_text
[]
=
{
N_
(
"none"
),
N_
(
"spatial"
),
N_
(
"temporal"
),
N_
(
"auto"
)
};
#else
static
const
char
*
const
direct_pred_list
[]
=
{
"none"
,
"spatial"
,
"temporal"
};
static
const
char
*
const
direct_pred_list_text
[]
=
{
N_
(
"none"
),
N_
(
"spatial"
),
N_
(
"temporal"
)
};
#endif
vlc_module_begin
()
set_description
(
N_
(
"H.264/MPEG4 AVC encoder (x264)"
))
...
...
@@ -449,33 +381,19 @@ vlc_module_begin ()
SCENE_LONGTEXT
,
false
)
change_integer_range
(
-
1
,
100
)
#if X264_BUILD >= 55
/* r607 */
# if X264_BUILD < 67
/* r1117 */
add_bool
(
SOUT_CFG_PREFIX
"pre-scenecut"
,
false
,
NULL
,
PRESCENE_TEXT
,
PRESCENE_LONGTEXT
,
false
)
# else
add_obsolete_bool
(
SOUT_CFG_PREFIX
"pre-scenecut"
)
# endif
#endif
add_integer
(
SOUT_CFG_PREFIX
"bframes"
,
3
,
NULL
,
BFRAMES_TEXT
,
BFRAMES_LONGTEXT
,
false
)
change_integer_range
(
0
,
16
)
#if X264_BUILD >= 63
add_integer
(
SOUT_CFG_PREFIX
"b-adapt"
,
1
,
NULL
,
B_ADAPT_TEXT
,
B_ADAPT_LONGTEXT
,
false
)
change_integer_range
(
0
,
2
)
#elif X264_BUILD >= 0x0013
/* r137 */
add_bool
(
SOUT_CFG_PREFIX
"b-adapt"
,
true
,
NULL
,
B_ADAPT_TEXT
,
B_ADAPT_LONGTEXT
,
false
)
#endif
#if X264_BUILD >= 0x0013
/* r137 */
add_integer
(
SOUT_CFG_PREFIX
"b-bias"
,
0
,
NULL
,
B_BIAS_TEXT
,
B_BIAS_LONGTEXT
,
false
)
change_integer_range
(
-
100
,
100
)
#endif
add_bool
(
SOUT_CFG_PREFIX
"bpyramid"
,
false
,
NULL
,
BPYRAMID_TEXT
,
BPYRAMID_LONGTEXT
,
false
)
...
...
@@ -496,11 +414,9 @@ vlc_module_begin ()
FILTER_LONGTEXT
,
false
)
add_deprecated_alias
(
SOUT_CFG_PREFIX
"filter"
)
/* Deprecated since 0.8.6 */
#if X264_BUILD >= 65
add_string
(
SOUT_CFG_PREFIX
"psy-rd"
,
"1.0:0.0"
,
NULL
,
PSY_RD_TEXT
,
PSY_RD_LONGTEXT
,
false
)
#endif
add_string
(
SOUT_CFG_PREFIX
"level"
,
"5.1"
,
NULL
,
LEVEL_TEXT
,
LEVEL_LONGTEXT
,
false
)
...
...
@@ -508,10 +424,8 @@ vlc_module_begin ()
PROFILE_LONGTEXT
,
false
)
change_string_list
(
profile_list
,
profile_list
,
0
);
#if X264_BUILD >= 51
/* r570 */
add_bool
(
SOUT_CFG_PREFIX
"interlaced"
,
false
,
NULL
,
INTERLACED_TEXT
,
INTERLACED_LONGTEXT
,
false
)
#endif
/* Ratecontrol */
...
...
@@ -519,11 +433,9 @@ vlc_module_begin ()
false
)
change_integer_range
(
-
1
,
51
)
/* QP 0 -> lossless encoding */
#if X264_BUILD >= 37
/* r334 */
add_integer
(
SOUT_CFG_PREFIX
"crf"
,
23
,
NULL
,
CRF_TEXT
,
CRF_LONGTEXT
,
false
)
change_integer_range
(
0
,
51
)
#endif
add_integer
(
SOUT_CFG_PREFIX
"qpmin"
,
10
,
NULL
,
QPMIN_TEXT
,
QPMIN_LONGTEXT
,
false
)
...
...
@@ -562,10 +474,8 @@ vlc_module_begin ()
PBRATIO_LONGTEXT
,
false
)
change_float_range
(
1
,
2
)
#if X264_BUILD >= 23
/* r190 */
add_integer
(
SOUT_CFG_PREFIX
"chroma-qp-offset"
,
0
,
NULL
,
CHROMA_QP_OFFSET_TEXT
,
CHROMA_QP_OFFSET_LONGTEXT
,
false
)
#endif
add_integer
(
SOUT_CFG_PREFIX
"pass"
,
0
,
NULL
,
PASS_TEXT
,
PASS_LONGTEXT
,
false
)
...
...
@@ -580,13 +490,12 @@ vlc_module_begin ()
add_float
(
SOUT_CFG_PREFIX
"qblur"
,
0
.
5
,
NULL
,
QBLUR_TEXT
,
QBLUR_LONGTEXT
,
false
)
#if X264_BUILD >= 59
add_integer
(
SOUT_CFG_PREFIX
"aq-mode"
,
X264_AQ_VARIANCE
,
NULL
,
AQ_MODE_TEXT
,
AQ_MODE_LONGTEXT
,
false
)
change_integer_range
(
0
,
2
)
add_float
(
SOUT_CFG_PREFIX
"aq-strength"
,
1
.
0
,
NULL
,
AQ_STRENGTH_TEXT
,
AQ_STRENGTH_LONGTEXT
,
false
)
#endif
/* Analysis */
...
...
@@ -600,18 +509,13 @@ vlc_module_begin ()
DIRECT_PRED_LONGTEXT
,
false
)
change_string_list
(
direct_pred_list
,
direct_pred_list_text
,
0
);
#if X264_BUILD >= 52
/* r573 */
add_integer
(
SOUT_CFG_PREFIX
"direct-8x8"
,
1
,
NULL
,
DIRECT_PRED_SIZE_TEXT
,
DIRECT_PRED_SIZE_LONGTEXT
,
false
)
change_integer_range
(
-
1
,
1
)
#endif
#if X264_BUILD >= 0x0012
/* r134 */
add_bool
(
SOUT_CFG_PREFIX
"weightb"
,
true
,
NULL
,
WEIGHTB_TEXT
,
WEIGHTB_LONGTEXT
,
false
)
#endif
#if X264_BUILD >= 24
/* r221 */
add_string
(
SOUT_CFG_PREFIX
"me"
,
"hex"
,
NULL
,
ME_TEXT
,
ME_LONGTEXT
,
false
)
change_string_list
(
enc_me_list
,
enc_me_list_text
,
0
);
...
...
@@ -619,77 +523,45 @@ vlc_module_begin ()
add_integer
(
SOUT_CFG_PREFIX
"merange"
,
16
,
NULL
,
MERANGE_TEXT
,
MERANGE_LONGTEXT
,
false
)
change_integer_range
(
1
,
64
)
#endif
add_integer
(
SOUT_CFG_PREFIX
"mvrange"
,
-
1
,
NULL
,
MVRANGE_TEXT
,
MVRANGE_LONGTEXT
,
false
)
#if X264_BUILD >= 55
/* r607 */
add_integer
(
SOUT_CFG_PREFIX
"mvrange-thread"
,
-
1
,
NULL
,
MVRANGE_THREAD_TEXT
,
MVRANGE_THREAD_LONGTEXT
,
false
)
#endif
add_integer
(
SOUT_CFG_PREFIX
"subme"
,
5
,
NULL
,
SUBME_TEXT
,
SUBME_LONGTEXT
,
false
)
change_integer_range
(
1
,
SUBME_MAX
)
add_deprecated_alias
(
SOUT_CFG_PREFIX
"subpel"
)
/* Deprecated since 0.8.5 */
#if X264_BUILD >= 41
# if X264_BUILD < 65
/* r368 */
add_bool
(
SOUT_CFG_PREFIX
"b-rdo"
,
false
,
NULL
,
B_RDO_TEXT
,
B_RDO_LONGTEXT
,
false
)
# else
add_obsolete_bool
(
SOUT_CFG_PREFIX
"b-rdo"
)
# endif
#endif
#if X264_BUILD >= 36
/* r318 */
add_bool
(
SOUT_CFG_PREFIX
"mixed-refs"
,
true
,
NULL
,
MIXED_REFS_TEXT
,
MIXED_REFS_LONGTEXT
,
false
)
#endif
#if X264_BUILD >= 23
/* r171 */
add_bool
(
SOUT_CFG_PREFIX
"chroma-me"
,
true
,
NULL
,
CHROMA_ME_TEXT
,
CHROMA_ME_LONGTEXT
,
false
)
#endif
#if X264_BUILD >= 43
# if X264_BUILD < 65
/* r390 */
add_bool
(
SOUT_CFG_PREFIX
"bime"
,
false
,
NULL
,
BIME_TEXT
,
BIME_LONGTEXT
,
false
)
# else
add_obsolete_bool
(
SOUT_CFG_PREFIX
"bime"
)
# endif
#endif
#if X264_BUILD >= 30
/* r251 */
add_bool
(
SOUT_CFG_PREFIX
"8x8dct"
,
false
,
NULL
,
TRANSFORM_8X8DCT_TEXT
,
TRANSFORM_8X8DCT_LONGTEXT
,
false
)
#endif
#if X264_BUILD >= 39
/* r360 */
add_integer
(
SOUT_CFG_PREFIX
"trellis"
,
1
,
NULL
,
TRELLIS_TEXT
,
TRELLIS_LONGTEXT
,
false
)
change_integer_range
(
0
,
2
)
#endif
#if X264_BUILD >= 42
/* r384 */
add_bool
(
SOUT_CFG_PREFIX
"fast-pskip"
,
true
,
NULL
,
FAST_PSKIP_TEXT
,
FAST_PSKIP_LONGTEXT
,
false
)
#endif
#if X264_BUILD >= 46
/* r503 */
add_bool
(
SOUT_CFG_PREFIX
"dct-decimate"
,
true
,
NULL
,
DCT_DECIMATE_TEXT
,
DCT_DECIMATE_LONGTEXT
,
false
)
#endif
#if X264_BUILD >= 44
/* r398 */
add_integer
(
SOUT_CFG_PREFIX
"nr"
,
0
,
NULL
,
NR_TEXT
,
NR_LONGTEXT
,
false
)
change_integer_range
(
0
,
1000
)
#endif
#if X264_BUILD >= 52
/* r573 */
add_integer
(
SOUT_CFG_PREFIX
"deadzone-inter"
,
21
,
NULL
,
DEADZONE_INTER_TEXT
,
DEADZONE_INTRA_LONGTEXT
,
false
)
change_integer_range
(
0
,
32
)
...
...
@@ -697,14 +569,11 @@ vlc_module_begin ()
add_integer
(
SOUT_CFG_PREFIX
"deadzone-intra"
,
11
,
NULL
,
DEADZONE_INTRA_TEXT
,
DEADZONE_INTRA_LONGTEXT
,
false
)
change_integer_range
(
0
,
32
)
#endif
/* Input/Output */
#if X264_BUILD >= 55
/* r607 */
add_bool
(
SOUT_CFG_PREFIX
"non-deterministic"
,
false
,
NULL
,
NON_DETERMINISTIC_TEXT
,
NON_DETERMINISTIC_LONGTEXT
,
false
)
#endif
add_bool
(
SOUT_CFG_PREFIX
"asm"
,
true
,
NULL
,
ASM_TEXT
,
ASM_LONGTEXT
,
false
)
...
...
@@ -713,27 +582,21 @@ vlc_module_begin ()
add_bool
(
SOUT_CFG_PREFIX
"psnr"
,
false
,
NULL
,
PSNR_TEXT
,
PSNR_LONGTEXT
,
false
)
#if X264_BUILD >= 50
/* r554 */
/* x264 ssim = 1 (default). disable SSIM computation for speed. */
add_bool
(
SOUT_CFG_PREFIX
"ssim"
,
false
,
NULL
,
SSIM_TEXT
,
SSIM_LONGTEXT
,
false
)
#endif
add_bool
(
SOUT_CFG_PREFIX
"quiet"
,
false
,
NULL
,
QUIET_TEXT
,
QUIET_LONGTEXT
,
false
)
#if X264_BUILD >= 47
/* r518 */
add_integer
(
SOUT_CFG_PREFIX
"sps-id"
,
0
,
NULL
,
SPS_ID_TEXT
,
SPS_ID_LONGTEXT
,
false
)
#endif
add_bool
(
SOUT_CFG_PREFIX
"aud"
,
false
,
NULL
,
AUD_TEXT
,
AUD_LONGTEXT
,
false
)
#if X264_BUILD >= 0x000e
/* r81 */
add_bool
(
SOUT_CFG_PREFIX
"verbose"
,
false
,
NULL
,
VERBOSE_TEXT
,
VERBOSE_LONGTEXT
,
false
)
#endif
add_string
(
SOUT_CFG_PREFIX
"stats"
,
"x264_2pass.log"
,
NULL
,
STATS_TEXT
,
STATS_LONGTEXT
,
false
)
...
...
@@ -790,29 +653,15 @@ static int Open ( vlc_object_t *p_this )
{
return
VLC_EGENERIC
;
}
/* X264_POINTVER or X264_VERSION are not available */
msg_Dbg
(
p_enc
,
"version x264 0.%d.X"
,
X264_BUILD
);
#if X264_BUILD < 37
if
(
p_enc
->
fmt_in
.
video
.
i_width
%
16
!=
0
||
p_enc
->
fmt_in
.
video
.
i_height
%
16
!=
0
)
if
(
X264_BUILD
<
76
)
{
msg_Warn
(
p_enc
,
"size is not a multiple of 16 (%ix%i)"
,
p_enc
->
fmt_in
.
video
.
i_width
,
p_enc
->
fmt_in
.
video
.
i_height
);
if
(
p_enc
->
fmt_in
.
video
.
i_width
<
16
||
p_enc
->
fmt_in
.
video
.
i_height
<
16
)
{
msg_Err
(
p_enc
,
"video is too small to be cropped"
);
return
VLC_EGENERIC
;
}
msg_Warn
(
p_enc
,
"cropping video to %ix%i"
,
p_enc
->
fmt_in
.
video
.
i_width
>>
4
<<
4
,
p_enc
->
fmt_in
.
video
.
i_height
>>
4
<<
4
);
msg_Warn
(
p_enc
,
"x264 version needs to be 0.76 or higher"
);
return
VLC_EGENERIC
;
}
#endif
config_ChainParse
(
p_enc
,
SOUT_CFG_PREFIX
,
ppsz_sout_options
,
p_enc
->
p_cfg
);
...
...
@@ -832,11 +681,6 @@ static int Open ( vlc_object_t *p_this )
x264_param_default
(
&
p_sys
->
param
);
p_sys
->
param
.
i_width
=
p_enc
->
fmt_in
.
video
.
i_width
;
p_sys
->
param
.
i_height
=
p_enc
->
fmt_in
.
video
.
i_height
;
#if X264_BUILD < 37
p_sys
->
param
.
i_width
=
p_sys
->
param
.
i_width
>>
4
<<
4
;
p_sys
->
param
.
i_height
=
p_sys
->
param
.
i_height
>>
4
<<
4
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"qcomp"
,
&
val
);
p_sys
->
param
.
rc
.
f_qcompress
=
val
.
f_float
;
...
...
@@ -846,29 +690,16 @@ static int Open ( vlc_object_t *p_this )
if
(
p_enc
->
fmt_out
.
i_bitrate
>
0
)
{
p_sys
->
param
.
rc
.
i_bitrate
=
p_enc
->
fmt_out
.
i_bitrate
/
1000
;
#if X264_BUILD < 48
/* cbr = 1 overrides qp or crf and sets an average bitrate
but maxrate = average bitrate is needed for "real" CBR */
p_sys
->
param
.
rc
.
b_cbr
=
1
;
#endif
p_sys
->
param
.
rc
.
i_rc_method
=
X264_RC_ABR
;
}
else
/* Set default to CRF */
{
#if X264_BUILD >= 37
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"crf"
,
&
val
);
if
(
val
.
i_int
>
0
&&
val
.
i_int
<=
51
)
{
# if X264_BUILD >= 54
p_sys
->
param
.
rc
.
f_rf_constant
=
val
.
i_int
;
# else
p_sys
->
param
.
rc
.
i_rf_constant
=
val
.
i_int
;
# endif
# if X264_BUILD >= 48
p_sys
->
param
.
rc
.
i_rc_method
=
X264_RC_CRF
;
# endif
}
#endif
}
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"qpstep"
,
&
val
);
...
...
@@ -894,17 +725,12 @@ static int Open ( vlc_object_t *p_this )
/* User defined QP-value, so change ratecontrol method */
p_sys
->
param
.
rc
.
i_rc_method
=
X264_RC_CQP
;
#if X264_BUILD >= 0x000a
p_sys
->
param
.
rc
.
i_qp_constant
=
val
.
i_int
;
p_sys
->
param
.
rc
.
i_qp_min
=
i_qmin
;
p_sys
->
param
.
rc
.
i_qp_max
=
i_qmax
;
#else
p_sys
->
param
.
i_qp_constant
=
val
.
i_int
;
#endif
}
#if X264_BUILD >= 24
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"ratetol"
,
&
val
);
p_sys
->
param
.
rc
.
f_rate_tolerance
=
val
.
f_float
;
...
...
@@ -916,18 +742,12 @@ static int Open ( vlc_object_t *p_this )
/* max bitrate = average bitrate -> CBR */
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"vbv-maxrate"
,
&
val
);
#if X264_BUILD >= 48
if
(
!
val
.
i_int
&&
p_sys
->
param
.
rc
.
i_rc_method
==
X264_RC_ABR
)
p_sys
->
param
.
rc
.
i_vbv_max_bitrate
=
p_sys
->
param
.
rc
.
i_bitrate
;
else
if
(
val
.
i_int
)
#endif
p_sys
->
param
.
rc
.
i_vbv_max_bitrate
=
val
.
i_int
;
#else
p_sys
->
param
.
rc
.
i_rc_buffer_size
=
p_sys
->
param
.
rc
.
i_bitrate
;
p_sys
->
param
.
rc
.
i_rc_init_buffer
=
p_sys
->
param
.
rc
.
i_bitrate
/
4
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"cabac"
,
&
val
);
p_sys
->
param
.
b_cabac
=
val
.
b_bool
;
...
...
@@ -944,7 +764,6 @@ static int Open ( vlc_object_t *p_this )
free
(
val
.
psz_string
);
}
#if X264_BUILD >= 65
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"psy-rd"
,
&
val
);
if
(
val
.
psz_string
)
{
...
...
@@ -954,7 +773,6 @@ static int Open ( vlc_object_t *p_this )
free
(
val
.
psz_string
);
}
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"level"
,
&
val
);
if
(
val
.
psz_string
)
...
...
@@ -967,10 +785,8 @@ static int Open ( vlc_object_t *p_this )
free
(
val
.
psz_string
);
}
#if X264_BUILD >= 51
/* r570 */
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"interlaced"
,
&
val
);
p_sys
->
param
.
b_interlaced
=
val
.
b_bool
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"ipratio"
,
&
val
);
p_sys
->
param
.
rc
.
f_ip_factor
=
val
.
f_float
;
...
...
@@ -985,78 +801,52 @@ static int Open ( vlc_object_t *p_this )
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"qblur"
,
&
val
);
p_sys
->
param
.
rc
.
f_qblur
=
val
.
f_float
;
#if X264_BUILD >= 59
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"aq-mode"
,
&
val
);
p_sys
->
param
.
rc
.
i_aq_mode
=
val
.
i_int
;
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"aq-strength"
,
&
val
);
p_sys
->
param
.
rc
.
f_aq_strength
=
val
.
f_float
;
#endif
#if X264_BUILD >= 0x000e
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"verbose"
,
&
val
);
if
(
val
.
b_bool
)
p_sys
->
param
.
i_log_level
=
X264_LOG_DEBUG
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"quiet"
,
&
val
);
if
(
val
.
b_bool
)
p_sys
->
param
.
i_log_level
=
X264_LOG_NONE
;
#if X264_BUILD >= 47
/* r518 */
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"sps-id"
,
&
val
);
if
(
val
.
i_int
>=
0
)
p_sys
->
param
.
i_sps_id
=
val
.
i_int
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"aud"
,
&
val
);
if
(
val
.
b_bool
)
p_sys
->
param
.
b_aud
=
val
.
b_bool
;
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"keyint"
,
&
val
);
#if X264_BUILD >= 0x000e
if
(
val
.
i_int
>
0
)
p_sys
->
param
.
i_keyint_max
=
val
.
i_int
;
#else
if
(
val
.
i_int
>
0
)
p_sys
->
param
.
i_iframe
=
val
.
i_int
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"min-keyint"
,
&
val
);
#if X264_BUILD >= 0x000e
if
(
val
.
i_int
>
0
)
p_sys
->
param
.
i_keyint_min
=
val
.
i_int
;
#else
if
(
val
.
i_int
>
0
)
p_sys
->
param
.
i_idrframe
=
val
.
i_int
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"bframes"
,
&
val
);
if
(
val
.
i_int
>=
0
&&
val
.
i_int
<=
16
)
p_sys
->
param
.
i_bframe
=
val
.
i_int
;
#if X264_BUILD >= 22
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"bpyramid"
,
&
val
);
p_sys
->
param
.
b_bframe_pyramid
=
val
.
b_bool
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"ref"
,
&
val
);
if
(
val
.
i_int
>
0
&&
val
.
i_int
<=
15
)
p_sys
->
param
.
i_frame_reference
=
val
.
i_int
;
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"scenecut"
,
&
val
);
#if X264_BUILD >= 0x000b
if
(
val
.
i_int
>=
-
1
&&
val
.
i_int
<=
100
)
p_sys
->
param
.
i_scenecut_threshold
=
val
.
i_int
;
#endif
#if X264_BUILD >= 55
/* r607 */
&& X264_BUILD < 67
/* r1117 */
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"pre-scenecut"
,
&
val
);
p_sys
->
param
.
b_pre_scenecut
=
val
.
b_bool
;
#endif
#if X264_BUILD >= 55
/* r607 */
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"non-deterministic"
,
&
val
);
p_sys
->
param
.
b_deterministic
=
val
.
b_bool
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"subme"
,
&
val
);
if
(
val
.
i_int
>=
1
&&
val
.
i_int
<=
SUBME_MAX
)
p_sys
->
param
.
analyse
.
i_subpel_refine
=
val
.
i_int
;
#if X264_BUILD >= 24
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"me"
,
&
val
);
if
(
!
strcmp
(
val
.
psz_string
,
"dia"
)
)
{
...
...
@@ -1074,12 +864,10 @@ static int Open ( vlc_object_t *p_this )
{
p_sys
->
param
.
analyse
.
i_me_method
=
X264_ME_ESA
;
}
# if X264_BUILD >= 58
/* r728 */
else
if
(
!
strcmp
(
val
.
psz_string
,
"tesa"
)
)
{
p_sys
->
param
.
analyse
.
i_me_method
=
X264_ME_TESA
;
}
# endif
free
(
val
.
psz_string
);
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"merange"
,
&
val
);
...
...
@@ -1088,12 +876,9 @@ static int Open ( vlc_object_t *p_this )
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"mvrange"
,
&
val
);
p_sys
->
param
.
analyse
.
i_mv_range
=
val
.
i_int
;
#endif
#if X264_BUILD >= 55
/* r607 */
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"mvrange-thread"
,
&
val
);
p_sys
->
param
.
analyse
.
i_mv_range_thread
=
val
.
i_int
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"direct"
,
&
val
);
if
(
!
strcmp
(
val
.
psz_string
,
"none"
)
)
...
...
@@ -1108,86 +893,52 @@ static int Open ( vlc_object_t *p_this )
{
p_sys
->
param
.
analyse
.
i_direct_mv_pred
=
X264_DIRECT_PRED_TEMPORAL
;
}
#if X264_BUILD >= 45
/* r457 */
else
if
(
!
strcmp
(
val
.
psz_string
,
"auto"
)
)
{
p_sys
->
param
.
analyse
.
i_direct_mv_pred
=
X264_DIRECT_PRED_AUTO
;
}
#endif
free
(
val
.
psz_string
);
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"psnr"
,
&
val
);
p_sys
->
param
.
analyse
.
b_psnr
=
val
.
b_bool
;
#if X264_BUILD >= 50
/* r554 */
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"ssim"
,
&
val
);
p_sys
->
param
.
analyse
.
b_ssim
=
val
.
b_bool
;
#endif
#if X264_BUILD >= 0x0012
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"weightb"
,
&
val
);
p_sys
->
param
.
analyse
.
b_weighted_bipred
=
val
.
b_bool
;
#endif
#if X264_BUILD >= 0x0013
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"b-adapt"
,
&
val
);
#if X264_BUILD >= 63
p_sys
->
param
.
i_bframe_adaptive
=
val
.
i_int
;
#else
p_sys
->
param
.
b_bframe_adaptive
=
val
.
b_bool
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"b-bias"
,
&
val
);
if
(
val
.
i_int
>=
-
100
&&
val
.
i_int
<=
100
)
p_sys
->
param
.
i_bframe_bias
=
val
.
i_int
;
#endif
#if X264_BUILD >= 23
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"chroma-me"
,
&
val
);
p_sys
->
param
.
analyse
.
b_chroma_me
=
val
.
b_bool
;
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"chroma-qp-offset"
,
&
val
);
p_sys
->
param
.
analyse
.
i_chroma_qp_offset
=
val
.
i_int
;
#endif
#if X264_BUILD >= 36
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"mixed-refs"
,
&
val
);
p_sys
->
param
.
analyse
.
b_mixed_references
=
val
.
b_bool
;
#endif
#if X264_BUILD >= 39
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"trellis"
,
&
val
);
if
(
val
.
i_int
>=
0
&&
val
.
i_int
<=
2
)
p_sys
->
param
.
analyse
.
i_trellis
=
val
.
i_int
;
#endif
#if X264_BUILD >= 41 && X264_BUILD < 65
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"b-rdo"
,
&
val
);
p_sys
->
param
.
analyse
.
b_bframe_rdo
=
val
.
b_bool
;
#endif
#if X264_BUILD >= 42
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"fast-pskip"
,
&
val
);
p_sys
->
param
.
analyse
.
b_fast_pskip
=
val
.
b_bool
;
#endif
#if X264_BUILD >= 43 && X264_BUILD < 65
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"bime"
,
&
val
);
p_sys
->
param
.
analyse
.
b_bidir_me
=
val
.
b_bool
;
#endif
#if X264_BUILD >= 44
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"nr"
,
&
val
);
if
(
val
.
i_int
>=
0
&&
val
.
i_int
<=
1000
)
p_sys
->
param
.
analyse
.
i_noise_reduction
=
val
.
i_int
;
#endif
#if X264_BUILD >= 46
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"dct-decimate"
,
&
val
);
p_sys
->
param
.
analyse
.
b_dct_decimate
=
val
.
b_bool
;
#endif
#if X264_BUILD >= 52
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"deadzone-inter"
,
&
val
);
if
(
val
.
i_int
>=
0
&&
val
.
i_int
<=
32
)
p_sys
->
param
.
analyse
.
i_luma_deadzone
[
0
]
=
val
.
i_int
;
...
...
@@ -1196,13 +947,6 @@ static int Open ( vlc_object_t *p_this )
if
(
val
.
i_int
>=
0
&&
val
.
i_int
<=
32
)
p_sys
->
param
.
analyse
.
i_luma_deadzone
[
1
]
=
val
.
i_int
;
#if X264_BUILD <= 65
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"direct-8x8"
,
&
val
);
if
(
val
.
i_int
>=
-
1
&&
val
.
i_int
<=
1
)
p_sys
->
param
.
analyse
.
i_direct_8x8_inference
=
val
.
i_int
;
#endif
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"asm"
,
&
val
);
if
(
!
val
.
b_bool
)
p_sys
->
param
.
cpu
=
0
;
...
...
@@ -1243,10 +987,8 @@ static int Open ( vlc_object_t *p_this )
}
free
(
val
.
psz_string
);
#if X264_BUILD >= 30
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"8x8dct"
,
&
val
);
p_sys
->
param
.
analyse
.
b_transform_8x8
=
val
.
b_bool
;
#endif
if
(
p_enc
->
fmt_in
.
video
.
i_aspect
>
0
)
{
...
...
@@ -1278,11 +1020,7 @@ static int Open ( vlc_object_t *p_this )
{
p_sys
->
param
.
rc
.
i_vbv_buffer_size
=
p_sys
->
param
.
rc
.
i_bitrate
*
p_sys
->
param
.
i_fps_den
;
#if X264_BUILD >= 0x000e
p_sys
->
param
.
rc
.
i_vbv_buffer_size
*=
p_sys
->
param
.
i_keyint_max
;
#else
p_sys
->
param
.
rc
.
i_vbv_buffer_size
*=
p_sys
->
param
.
i_idrframe
;
#endif
p_sys
->
param
.
rc
.
i_vbv_buffer_size
/=
p_sys
->
param
.
i_fps_num
;
}
...
...
@@ -1331,9 +1069,7 @@ static int Open ( vlc_object_t *p_this )
value (cores * 1.5) based on detected CPUs. Default behavior for x264 is
threads = 1, however VLC usage differs and uses threads = 0 (auto) by
default unless ofcourse transcode threads is explicitly specified.. */
#if X264_BUILD >= 29
p_sys
->
param
.
i_threads
=
p_enc
->
i_threads
;
#endif
var_Get
(
p_enc
,
SOUT_CFG_PREFIX
"stats"
,
&
val
);
if
(
val
.
psz_string
)
...
...
@@ -1380,12 +1116,10 @@ static int Open ( vlc_object_t *p_this )
#endif
#if X264_BUILD >= 69
/* Set lookahead value to lower than default,
* as rtp-output without mux doesn't handle
* difference that well yet*/
p_sys
->
param
.
rc
.
i_lookahead
=
5
;
#endif
/* Open the encoder */
p_sys
->
h
=
x264_encoder_open
(
&
p_sys
->
param
);
...
...
@@ -1411,26 +1145,18 @@ static int Open ( vlc_object_t *p_this )
p_enc
->
fmt_out
.
i_extra
=
0
;
p_enc
->
fmt_out
.
p_extra
=
NULL
;
x264_encoder_headers
(
p_sys
->
h
,
&
nal
,
&
i_nal
);
p_enc
->
fmt_out
.
i_extra
=
x264_encoder_headers
(
p_sys
->
h
,
&
nal
,
&
i_nal
);
p_enc
->
fmt_out
.
p_extra
=
malloc
(
p_enc
->
fmt_out
.
i_extra
);
if
(
!
p_enc
->
fmt_out
.
p_extra
)
{
Close
(
VLC_OBJECT
(
p_enc
)
);
return
VLC_ENOMEM
;
}
void
*
p_tmp
=
p_enc
->
fmt_out
.
p_extra
;
for
(
i
=
0
;
i
<
i_nal
;
i
++
)
{
void
*
p_tmp
;
int
i_size
=
p_sys
->
i_buffer
;
x264_nal_encode
(
p_sys
->
p_buffer
,
&
i_size
,
1
,
&
nal
[
i
]
);
p_tmp
=
realloc
(
p_enc
->
fmt_out
.
p_extra
,
p_enc
->
fmt_out
.
i_extra
+
i_size
);
if
(
!
p_tmp
)
{
Close
(
VLC_OBJECT
(
p_enc
)
);
return
VLC_ENOMEM
;
}
p_enc
->
fmt_out
.
p_extra
=
p_tmp
;
memcpy
(
(
uint8_t
*
)
p_enc
->
fmt_out
.
p_extra
+
p_enc
->
fmt_out
.
i_extra
,
p_sys
->
p_buffer
,
i_size
);
p_enc
->
fmt_out
.
i_extra
+=
i_size
;
memcpy
(
p_tmp
,
nal
[
i
].
p_payload
,
nal
[
i
].
i_payload
);
p_tmp
+=
nal
[
i
].
i_payload
;
}
return
VLC_SUCCESS
;
...
...
@@ -1458,20 +1184,14 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pict )
pic
.
img
.
i_stride
[
i
]
=
p_pict
->
p
[
i
].
i_pitch
;
}
#if X264_BUILD >= 0x0013
x264_encoder_encode
(
p_sys
->
h
,
&
nal
,
&
i_nal
,
&
pic
,
&
pic
);
#else
x264_encoder_encode
(
p_sys
->
h
,
&
nal
,
&
i_nal
,
&
pic
);
#endif
if
(
!
i_nal
)
return
NULL
;
for
(
i
=
0
,
i_out
=
0
;
i
<
i_nal
;
i
++
)
{
int
i_size
=
p_sys
->
i_buffer
-
i_out
;
x264_nal_encode
(
p_sys
->
p_buffer
+
i_out
,
&
i_size
,
1
,
&
nal
[
i
]
);
i_out
+=
i_size
;
memcpy
(
p_sys
->
p_buffer
+
i_out
,
nal
[
i
].
p_payload
,
nal
[
i
].
i_payload
);
i_out
+=
nal
[
i
].
i_payload
;
}
p_block
=
block_New
(
p_enc
,
i_out
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment