Mercurial > mplayer.hg
annotate libmpcodecs/ve_lavc.c @ 34929:c410ef9752a0
Initialize a few more AVFrame fields to avoid FFmpeg errors.
However this really needs to be done via FFmpeg somehow to avoid
issues each time new fields are added, either by exposing
ff_init_buffer_info as public API or by calling get_buffer etc.
through wrappers that take care of the initialization.
author | reimar |
---|---|
date | Sat, 14 Jul 2012 11:37:22 +0000 |
parents | a3c178a46634 |
children | a0ca5aa37d71 |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30313
diff
changeset
|
18 |
5550 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21 #include <string.h> | |
8237 | 22 #include <math.h> |
17469
40b109500177
Using INT_MAX without including limits.h breaks compilation on MinGW.
diego
parents:
17464
diff
changeset
|
23 #include <limits.h> |
8347 | 24 #include <time.h> |
17909 | 25 #include <assert.h> |
5550 | 26 |
8371
345a539683da
infinity fix by ("Steven M. Schultz" <sms at 2BSD dot COM>)
michael
parents:
8347
diff
changeset
|
27 #if !defined(INFINITY) && defined(HUGE_VAL) |
345a539683da
infinity fix by ("Steven M. Schultz" <sms at 2BSD dot COM>)
michael
parents:
8347
diff
changeset
|
28 #define INFINITY HUGE_VAL |
345a539683da
infinity fix by ("Steven M. Schultz" <sms at 2BSD dot COM>)
michael
parents:
8347
diff
changeset
|
29 #endif |
345a539683da
infinity fix by ("Steven M. Schultz" <sms at 2BSD dot COM>)
michael
parents:
8347
diff
changeset
|
30 |
17012 | 31 #include "config.h" |
32064
a735105a66b6
Move all MEncoder-related extern variable declarations to mencoder.h.
diego
parents:
32033
diff
changeset
|
32 #include "mencoder.h" |
17012 | 33 #include "mp_msg.h" |
34 #include "help_mp.h" | |
26693 | 35 #include "av_opts.h" |
30313
7f7591482564
Add a proper header for our strsep implementation so strsep will
reimar
parents:
30312
diff
changeset
|
36 #include "osdep/strsep.h" |
5550 | 37 |
38 #include "codec-cfg.h" | |
22600
3c2b4a866c6a
Add explicit location for headers from the stream/ directory.
diego
parents:
22152
diff
changeset
|
39 #include "stream/stream.h" |
22601
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22600
diff
changeset
|
40 #include "libmpdemux/demuxer.h" |
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22600
diff
changeset
|
41 #include "libmpdemux/stheader.h" |
5550 | 42 |
22601
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22600
diff
changeset
|
43 #include "libmpdemux/muxer.h" |
5550 | 44 |
5607 | 45 #include "img_format.h" |
30312
54e9eb2664a7
Reuse the fmt-conversion code instead of duplicating the functionality.
reimar
parents:
29793
diff
changeset
|
46 #include "fmt-conversion.h" |
5607 | 47 #include "mp_image.h" |
32477 | 48 #include "ve.h" |
5550 | 49 #include "vf.h" |
33871
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
33192
diff
changeset
|
50 #include "av_helpers.h" |
5550 | 51 |
52 //===========================================================================// | |
53 | |
54 #include "libavcodec/avcodec.h" | |
55 | |
56 | |
57 /* video options */ | |
7555 | 58 static char *lavc_param_vcodec = "mpeg4"; |
5550 | 59 static int lavc_param_vbitrate = -1; |
7088 | 60 static int lavc_param_vrate_tolerance = 1000*8; |
10498 | 61 static int lavc_param_mb_decision = 0; /* default is realtime encoding */ |
5550 | 62 static int lavc_param_v4mv = 0; |
5556 | 63 static int lavc_param_vme = 4; |
18569 | 64 static float lavc_param_vqscale = -1; |
7088 | 65 static int lavc_param_vqmin = 2; |
66 static int lavc_param_vqmax = 31; | |
11032 | 67 static float lavc_param_lmin = 2; |
68 static float lavc_param_lmax = 31; | |
20756 | 69 static float lavc_param_mb_lmin = 2; |
70 static float lavc_param_mb_lmax = 31; | |
5550 | 71 static int lavc_param_vqdiff = 3; |
72 static float lavc_param_vqcompress = 0.5; | |
73 static float lavc_param_vqblur = 0.5; | |
7088 | 74 static float lavc_param_vb_qfactor = 1.25; |
75 static float lavc_param_vb_qoffset = 1.25; | |
76 static float lavc_param_vi_qfactor = 0.8; | |
77 static float lavc_param_vi_qoffset = 0.0; | |
5657
ee2efbf3dc9d
Preliminary support for lavcs b-frame encoding, disabled by default.
atmos4
parents:
5646
diff
changeset
|
78 static int lavc_param_vmax_b_frames = 0; |
5550 | 79 static int lavc_param_keyint = -1; |
5778 | 80 static int lavc_param_vpass = 0; |
17886
d526e19c56c3
Support libavcodec vrc_strategy=1 (XviD ratecontrol).
corey
parents:
17842
diff
changeset
|
81 static int lavc_param_vrc_strategy = 0; |
5778 | 82 static int lavc_param_vb_strategy = 0; |
6255
140e94c4c89b
single coefficient elimination disabled by default
michael
parents:
6228
diff
changeset
|
83 static int lavc_param_luma_elim_threshold = 0; |
140e94c4c89b
single coefficient elimination disabled by default
michael
parents:
6228
diff
changeset
|
84 static int lavc_param_chroma_elim_threshold = 0; |
6228
ea6b20e70ac5
new options to support Michael's libavcodec patch, #ifdefed
arpi
parents:
5977
diff
changeset
|
85 static int lavc_param_packet_size= 0; |
15385
6e455aec9cca
vstrict=-1 is now less "dangerous", make it default and remove m/ljpeg encoding colorspace hack
reimar
parents:
15368
diff
changeset
|
86 static int lavc_param_strict= -1; |
6228
ea6b20e70ac5
new options to support Michael's libavcodec patch, #ifdefed
arpi
parents:
5977
diff
changeset
|
87 static int lavc_param_data_partitioning= 0; |
26395 | 88 static int lavc_param_gray=0; |
7088 | 89 static float lavc_param_rc_qsquish=1.0; |
90 static float lavc_param_rc_qmod_amp=0; | |
91 static int lavc_param_rc_qmod_freq=0; | |
92 static char *lavc_param_rc_override_string=NULL; | |
93 static char *lavc_param_rc_eq="tex^qComp"; | |
94 static int lavc_param_rc_buffer_size=0; | |
95 static float lavc_param_rc_buffer_aggressivity=1.0; | |
96 static int lavc_param_rc_max_rate=0; | |
97 static int lavc_param_rc_min_rate=0; | |
98 static float lavc_param_rc_initial_cplx=0; | |
15988 | 99 static float lavc_param_rc_initial_buffer_occupancy=0.9; |
6944 | 100 static int lavc_param_mpeg_quant=0; |
7152 | 101 static int lavc_param_fdct=0; |
7564 | 102 static int lavc_param_idct=0; |
8237 | 103 static char* lavc_param_aspect = NULL; |
9993
6e7f3643bee6
optional automatic aspect encoding based on d_width and d_height
rfelker
parents:
9868
diff
changeset
|
104 static int lavc_param_autoaspect = 0; |
7490 | 105 static float lavc_param_lumi_masking= 0.0; |
7496 | 106 static float lavc_param_dark_masking= 0.0; |
7490 | 107 static float lavc_param_temporal_cplx_masking= 0.0; |
108 static float lavc_param_spatial_cplx_masking= 0.0; | |
109 static float lavc_param_p_masking= 0.0; | |
15368 | 110 static float lavc_param_border_masking= 0.0; |
7490 | 111 static int lavc_param_normalize_aqp= 0; |
7504 | 112 static int lavc_param_interlaced_dct= 0; |
8190 | 113 static int lavc_param_prediction_method= FF_PRED_LEFT; |
10778 | 114 static int lavc_param_format= IMGFMT_YV12; |
8341 | 115 static int lavc_param_debug= 0; |
8347 | 116 static int lavc_param_psnr= 0; |
8803 | 117 static int lavc_param_me_pre_cmp= 0; |
8587 | 118 static int lavc_param_me_cmp= 0; |
119 static int lavc_param_me_sub_cmp= 0; | |
120 static int lavc_param_mb_cmp= 0; | |
11753 | 121 #ifdef FF_CMP_VSAD |
122 static int lavc_param_ildct_cmp= FF_CMP_VSAD; | |
123 #endif | |
8803 | 124 static int lavc_param_pre_dia_size= 0; |
8587 | 125 static int lavc_param_dia_size= 0; |
126 static int lavc_param_qpel= 0; | |
8684 | 127 static int lavc_param_trell= 0; |
24329 | 128 static int lavc_param_lowdelay= 0; |
11930
f2a503cb70ba
bit_exact patch by ("Steven M. Schultz" <sms at 2BSD dot COM>)
michael
parents:
11910
diff
changeset
|
129 static int lavc_param_bit_exact = 0; |
9536 | 130 static int lavc_param_aic= 0; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
131 static int lavc_param_aiv= 0; |
9536 | 132 static int lavc_param_umv= 0; |
28380
f521e54d47ee
Add support for libavcodec GMC flag, patch by Dave Baker, dbkr mxtelecom com.
diego
parents:
28360
diff
changeset
|
133 static int lavc_param_gmc= 0; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
134 static int lavc_param_obmc= 0; |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
135 static int lavc_param_loop= 0; |
8695 | 136 static int lavc_param_last_pred= 0; |
8709 | 137 static int lavc_param_pre_me= 1; |
8803 | 138 static int lavc_param_me_subpel_quality= 8; |
9508 | 139 static int lavc_param_me_range= 0; |
9645 | 140 static int lavc_param_ibias= FF_DEFAULT_QUANT_BIAS; |
141 static int lavc_param_pbias= FF_DEFAULT_QUANT_BIAS; | |
10291 | 142 static int lavc_param_coder= 0; |
143 static int lavc_param_context= 0; | |
10779 | 144 static char *lavc_param_intra_matrix = NULL; |
145 static char *lavc_param_inter_matrix = NULL; | |
10963 | 146 static int lavc_param_cbp= 0; |
10974 | 147 static int lavc_param_mv0= 0; |
11363 | 148 static int lavc_param_noise_reduction= 0; |
11910 | 149 static int lavc_param_qns= 0; |
11445 | 150 static int lavc_param_qp_rd= 0; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
151 static int lavc_param_inter_threshold= 0; |
11699
9165fbc7d89d
scenechange_threshold command line option patch by (Balatoni Denes <pnis at coder dot hu>)
michael
parents:
11672
diff
changeset
|
152 static int lavc_param_sc_threshold= 0; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
153 static int lavc_param_ss= 0; |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
154 static int lavc_param_top= -1; |
11702 | 155 static int lavc_param_alt= 0; |
156 static int lavc_param_ilme= 0; | |
12542 | 157 static int lavc_param_nssew= 8; |
12764
8109997eb7d3
dc precision and closed gop patch by (Nico Sabbi <nsabbi at tiscali dot it>)
michael
parents:
12760
diff
changeset
|
158 static int lavc_param_closed_gop = 0; |
8109997eb7d3
dc precision and closed gop patch by (Nico Sabbi <nsabbi at tiscali dot it>)
michael
parents:
12760
diff
changeset
|
159 static int lavc_param_dc_precision = 8; |
12760
787a1ce375df
multi-threaded lavc patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
12542
diff
changeset
|
160 static int lavc_param_threads= 1; |
13386
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
161 static int lavc_param_turbo = 0; |
23953
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
162 static int lavc_param_skip_threshold=0; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
163 static int lavc_param_skip_factor=0; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
164 static int lavc_param_skip_exp=0; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
165 static int lavc_param_skip_cmp=0; |
17243
67ce2e4206ea
support downscaling frames for dynamic b frame decission
gpoirier
parents:
17063
diff
changeset
|
166 static int lavc_param_brd_scale = 0; |
17256
b89745a920d6
Add bidir_refine to lavc's set of options, and document it.
gpoirier
parents:
17243
diff
changeset
|
167 static int lavc_param_bidir_refine = 0; |
17464 | 168 static int lavc_param_sc_factor = 1; |
17478
7d60fe925f87
vglobal so the user can tell the encoder that she wants global headers ... one step closer to correct mov/mp4 muxing
michael
parents:
17469
diff
changeset
|
169 static int lavc_param_video_global_header= 0; |
18489 | 170 static int lavc_param_mv0_threshold = 256; |
18569 | 171 static int lavc_param_refs = 1; |
18572 | 172 static int lavc_param_b_sensitivity = 40; |
23209 | 173 static int lavc_param_level = FF_LEVEL_UNKNOWN; |
5550 | 174 |
11375 | 175 char *lavc_param_acodec = "mp2"; |
176 int lavc_param_atag = 0; | |
177 int lavc_param_abitrate = 224; | |
17842 | 178 int lavc_param_audio_global_header= 0; |
26693 | 179 static char *lavc_param_avopt = NULL; |
31589
ef92321146a1
Make it possible to set all options for lavc audio encoder.
reimar
parents:
30955
diff
changeset
|
180 char *lavc_param_audio_avopt = NULL; |
11375 | 181 |
10594
57bdcdb061d7
Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents:
10498
diff
changeset
|
182 #include "m_option.h" |
5550 | 183 |
32678 | 184 #define MAX_BITRATE 100000000 /* 100Mbit */ |
185 | |
30955
4e59a7aebadb
Mark encoder-related m_option_t struct arrays as const.
diego
parents:
30948
diff
changeset
|
186 const m_option_t lavcopts_conf[]={ |
11375 | 187 {"acodec", &lavc_param_acodec, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
23957
74eb6825d332
allow to specify the audio bitrate in bits (some codecs need that ...)
michael
parents:
23954
diff
changeset
|
188 {"abitrate", &lavc_param_abitrate, CONF_TYPE_INT, CONF_RANGE, 1, 1000000, NULL}, |
11375 | 189 {"atag", &lavc_param_atag, CONF_TYPE_INT, CONF_RANGE, 0, 0xffff, NULL}, |
5550 | 190 {"vcodec", &lavc_param_vcodec, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
32678 | 191 {"vbitrate", &lavc_param_vbitrate, CONF_TYPE_INT, CONF_RANGE, 4, MAX_BITRATE, NULL}, |
192 {"vratetol", &lavc_param_vrate_tolerance, CONF_TYPE_INT, CONF_RANGE, 4, MAX_BITRATE, NULL}, | |
10498 | 193 {"vhq", &lavc_param_mb_decision, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
194 {"mbd", &lavc_param_mb_decision, CONF_TYPE_INT, CONF_RANGE, 0, 9, NULL}, | |
5550 | 195 {"v4mv", &lavc_param_v4mv, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
17261 | 196 {"vme", &lavc_param_vme, CONF_TYPE_INT, CONF_RANGE, 0, 8, NULL}, |
18569 | 197 {"vqscale", &lavc_param_vqscale, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 255.0, NULL}, |
5550 | 198 {"vqmin", &lavc_param_vqmin, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, |
199 {"vqmax", &lavc_param_vqmax, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, | |
11032 | 200 {"lmin", &lavc_param_lmin, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL}, |
201 {"lmax", &lavc_param_lmax, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL}, | |
20756 | 202 {"mblmin", &lavc_param_mb_lmin, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL}, |
203 {"mblmax", &lavc_param_mb_lmax, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL}, | |
5550 | 204 {"vqdiff", &lavc_param_vqdiff, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, |
205 {"vqcomp", &lavc_param_vqcompress, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL}, | |
206 {"vqblur", &lavc_param_vqblur, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL}, | |
7088 | 207 {"vb_qfactor", &lavc_param_vb_qfactor, CONF_TYPE_FLOAT, CONF_RANGE, -31.0, 31.0, NULL}, |
5657
ee2efbf3dc9d
Preliminary support for lavcs b-frame encoding, disabled by default.
atmos4
parents:
5646
diff
changeset
|
208 {"vmax_b_frames", &lavc_param_vmax_b_frames, CONF_TYPE_INT, CONF_RANGE, 0, FF_MAX_B_FRAMES, NULL}, |
13385
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
209 {"vpass", &lavc_param_vpass, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL}, |
5778 | 210 {"vrc_strategy", &lavc_param_vrc_strategy, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL}, |
8413 | 211 {"vb_strategy", &lavc_param_vb_strategy, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL}, |
6228
ea6b20e70ac5
new options to support Michael's libavcodec patch, #ifdefed
arpi
parents:
5977
diff
changeset
|
212 {"vb_qoffset", &lavc_param_vb_qoffset, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 31.0, NULL}, |
7039
2eae7ac0fa8b
same behavior for luma & chroma single coeff elimination
michael
parents:
7038
diff
changeset
|
213 {"vlelim", &lavc_param_luma_elim_threshold, CONF_TYPE_INT, CONF_RANGE, -99, 99, NULL}, |
7038 | 214 {"vcelim", &lavc_param_chroma_elim_threshold, CONF_TYPE_INT, CONF_RANGE, -99, 99, NULL}, |
6228
ea6b20e70ac5
new options to support Michael's libavcodec patch, #ifdefed
arpi
parents:
5977
diff
changeset
|
215 {"vpsize", &lavc_param_packet_size, CONF_TYPE_INT, CONF_RANGE, 0, 100000000, NULL}, |
8195 | 216 {"vstrict", &lavc_param_strict, CONF_TYPE_INT, CONF_RANGE, -99, 99, NULL}, |
34531 | 217 {"vdpart", &lavc_param_data_partitioning, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
5550 | 218 {"keyint", &lavc_param_keyint, CONF_TYPE_INT, 0, 0, 0, NULL}, |
34532 | 219 {"gray", &lavc_param_gray, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_GRAY, NULL}, |
6944 | 220 {"mpeg_quant", &lavc_param_mpeg_quant, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
7088 | 221 {"vi_qfactor", &lavc_param_vi_qfactor, CONF_TYPE_FLOAT, CONF_RANGE, -31.0, 31.0, NULL}, |
222 {"vi_qoffset", &lavc_param_vi_qoffset, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 31.0, NULL}, | |
223 {"vqsquish", &lavc_param_rc_qsquish, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 99.0, NULL}, | |
224 {"vqmod_amp", &lavc_param_rc_qmod_amp, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 99.0, NULL}, | |
225 {"vqmod_freq", &lavc_param_rc_qmod_freq, CONF_TYPE_INT, 0, 0, 0, NULL}, | |
226 {"vrc_eq", &lavc_param_rc_eq, CONF_TYPE_STRING, 0, 0, 0, NULL}, | |
227 {"vrc_override", &lavc_param_rc_override_string, CONF_TYPE_STRING, 0, 0, 0, NULL}, | |
32678 | 228 {"vrc_maxrate", &lavc_param_rc_max_rate, CONF_TYPE_INT, CONF_RANGE, 0, MAX_BITRATE, NULL}, |
229 {"vrc_minrate", &lavc_param_rc_min_rate, CONF_TYPE_INT, CONF_RANGE, 0, MAX_BITRATE, NULL}, | |
230 {"vrc_buf_size", &lavc_param_rc_buffer_size, CONF_TYPE_INT, CONF_RANGE, 4, MAX_BITRATE, NULL}, | |
7088 | 231 {"vrc_buf_aggressivity", &lavc_param_rc_buffer_aggressivity, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 99.0, NULL}, |
232 {"vrc_init_cplx", &lavc_param_rc_initial_cplx, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 9999999.0, NULL}, | |
15781 | 233 {"vrc_init_occupancy", &lavc_param_rc_initial_buffer_occupancy, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL}, |
7152 | 234 {"vfdct", &lavc_param_fdct, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL}, |
8237 | 235 {"aspect", &lavc_param_aspect, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
9993
6e7f3643bee6
optional automatic aspect encoding based on d_width and d_height
rfelker
parents:
9868
diff
changeset
|
236 {"autoaspect", &lavc_param_autoaspect, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
7490 | 237 {"lumi_mask", &lavc_param_lumi_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL}, |
238 {"tcplx_mask", &lavc_param_temporal_cplx_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL}, | |
239 {"scplx_mask", &lavc_param_spatial_cplx_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL}, | |
240 {"p_mask", &lavc_param_p_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL}, | |
241 {"naq", &lavc_param_normalize_aqp, CONF_TYPE_FLAG, 0, 0, 1, NULL}, | |
7496 | 242 {"dark_mask", &lavc_param_dark_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL}, |
7504 | 243 {"ildct", &lavc_param_interlaced_dct, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
7564 | 244 {"idct", &lavc_param_idct, CONF_TYPE_INT, CONF_RANGE, 0, 20, NULL}, |
8190 | 245 {"pred", &lavc_param_prediction_method, CONF_TYPE_INT, CONF_RANGE, 0, 20, NULL}, |
10778 | 246 {"format", &lavc_param_format, CONF_TYPE_IMGFMT, 0, 0, 0, NULL}, |
8341 | 247 {"debug", &lavc_param_debug, CONF_TYPE_INT, CONF_RANGE, 0, 100000000, NULL}, |
8347 | 248 {"psnr", &lavc_param_psnr, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PSNR, NULL}, |
8803 | 249 {"precmp", &lavc_param_me_pre_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, |
8587 | 250 {"cmp", &lavc_param_me_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, |
251 {"subcmp", &lavc_param_me_sub_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, | |
252 {"mbcmp", &lavc_param_mb_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, | |
23953
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
253 {"skipcmp", &lavc_param_skip_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, |
11753 | 254 #ifdef FF_CMP_VSAD |
255 {"ildctcmp", &lavc_param_ildct_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, | |
256 #endif | |
11930
f2a503cb70ba
bit_exact patch by ("Steven M. Schultz" <sms at 2BSD dot COM>)
michael
parents:
11910
diff
changeset
|
257 {"bit_exact", &lavc_param_bit_exact, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_BITEXACT, NULL}, |
8803 | 258 {"predia", &lavc_param_pre_dia_size, CONF_TYPE_INT, CONF_RANGE, -2000, 2000, NULL}, |
8684 | 259 {"dia", &lavc_param_dia_size, CONF_TYPE_INT, CONF_RANGE, -2000, 2000, NULL}, |
8587 | 260 {"qpel", &lavc_param_qpel, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QPEL, NULL}, |
27516
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
261 {"trell", &lavc_param_trell, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
24329 | 262 {"lowdelay", &lavc_param_lowdelay, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_LOW_DELAY, NULL}, |
8695 | 263 {"last_pred", &lavc_param_last_pred, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, |
8709 | 264 {"preme", &lavc_param_pre_me, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, |
8803 | 265 {"subq", &lavc_param_me_subpel_quality, CONF_TYPE_INT, CONF_RANGE, 0, 8, NULL}, |
9508 | 266 {"me_range", &lavc_param_me_range, CONF_TYPE_INT, CONF_RANGE, 0, 16000, NULL}, |
28360
ed8f8f58f855
Update libavcodec 'aic' flag define to match current FFmpeg.
diego
parents:
27516
diff
changeset
|
267 {"aic", &lavc_param_aic, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_AC_PRED, NULL}, |
34533 | 268 {"umv", &lavc_param_umv, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
34534
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
269 {"aiv", &lavc_param_aiv, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
270 {"obmc", &lavc_param_obmc, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
271 {"loop", &lavc_param_loop, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_LOOP_FILTER, NULL}, |
9645 | 272 {"ibias", &lavc_param_ibias, CONF_TYPE_INT, CONF_RANGE, -512, 512, NULL}, |
273 {"pbias", &lavc_param_pbias, CONF_TYPE_INT, CONF_RANGE, -512, 512, NULL}, | |
10291 | 274 {"coder", &lavc_param_coder, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL}, |
275 {"context", &lavc_param_context, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL}, | |
10779 | 276 {"intra_matrix", &lavc_param_intra_matrix, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
277 {"inter_matrix", &lavc_param_inter_matrix, CONF_TYPE_STRING, 0, 0, 0, NULL}, | |
10963 | 278 {"cbp", &lavc_param_cbp, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CBP_RD, NULL}, |
10974 | 279 {"mv0", &lavc_param_mv0, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_MV0, NULL}, |
11363 | 280 {"nr", &lavc_param_noise_reduction, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL}, |
11445 | 281 {"qprd", &lavc_param_qp_rd, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QP_RD, NULL}, |
34534
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
282 {"ss", &lavc_param_ss, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
283 {"alt", &lavc_param_alt, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
11702 | 284 {"ilme", &lavc_param_ilme, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_ME, NULL}, |
12764
8109997eb7d3
dc precision and closed gop patch by (Nico Sabbi <nsabbi at tiscali dot it>)
michael
parents:
12760
diff
changeset
|
285 {"cgop", &lavc_param_closed_gop, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CLOSED_GOP, NULL}, |
28380
f521e54d47ee
Add support for libavcodec GMC flag, patch by Dave Baker, dbkr mxtelecom com.
diego
parents:
28360
diff
changeset
|
286 {"gmc", &lavc_param_gmc, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_GMC, NULL}, |
12765 | 287 {"dc", &lavc_param_dc_precision, CONF_TYPE_INT, CONF_RANGE, 8, 11, NULL}, |
15368 | 288 {"border_mask", &lavc_param_border_masking, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL}, |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
289 {"inter_threshold", &lavc_param_inter_threshold, CONF_TYPE_INT, CONF_RANGE, -1000000, 1000000, NULL}, |
15989
a9eb721d92fc
10l: scene change detecion is deactivated with sc_threshold=1000000000
ranma
parents:
15988
diff
changeset
|
290 {"sc_threshold", &lavc_param_sc_threshold, CONF_TYPE_INT, CONF_RANGE, -1000000000, 1000000000, NULL}, |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
291 {"top", &lavc_param_top, CONF_TYPE_INT, CONF_RANGE, -1, 1, NULL}, |
11910 | 292 {"qns", &lavc_param_qns, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL}, |
12542 | 293 {"nssew", &lavc_param_nssew, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL}, |
12760
787a1ce375df
multi-threaded lavc patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
12542
diff
changeset
|
294 {"threads", &lavc_param_threads, CONF_TYPE_INT, CONF_RANGE, 1, 8, NULL}, |
13386
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
295 {"turbo", &lavc_param_turbo, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
23953
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
296 {"skip_threshold", &lavc_param_skip_threshold, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL}, |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
297 {"skip_factor", &lavc_param_skip_factor, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL}, |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
298 {"skip_exp", &lavc_param_skip_exp, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL}, |
17243
67ce2e4206ea
support downscaling frames for dynamic b frame decission
gpoirier
parents:
17063
diff
changeset
|
299 {"brd_scale", &lavc_param_brd_scale, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL}, |
17256
b89745a920d6
Add bidir_refine to lavc's set of options, and document it.
gpoirier
parents:
17243
diff
changeset
|
300 {"bidir_refine", &lavc_param_bidir_refine, CONF_TYPE_INT, CONF_RANGE, 0, 4, NULL}, |
17464 | 301 {"sc_factor", &lavc_param_sc_factor, CONF_TYPE_INT, CONF_RANGE, 1, INT_MAX, NULL}, |
17478
7d60fe925f87
vglobal so the user can tell the encoder that she wants global headers ... one step closer to correct mov/mp4 muxing
michael
parents:
17469
diff
changeset
|
302 {"vglobal", &lavc_param_video_global_header, CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL}, |
17842 | 303 {"aglobal", &lavc_param_audio_global_header, CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL}, |
18489 | 304 {"mv0_threshold", &lavc_param_mv0_threshold, CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL}, |
18569 | 305 {"refs", &lavc_param_refs, CONF_TYPE_INT, CONF_RANGE, 1, 16, NULL}, |
18572 | 306 {"b_sensitivity", &lavc_param_b_sensitivity, CONF_TYPE_INT, CONF_RANGE, 1, INT_MAX, NULL}, |
23209 | 307 {"level", &lavc_param_level, CONF_TYPE_INT, CONF_RANGE, INT_MIN, INT_MAX, NULL}, |
26693 | 308 {"o", &lavc_param_avopt, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
31589
ef92321146a1
Make it possible to set all options for lavc audio encoder.
reimar
parents:
30955
diff
changeset
|
309 {"audio_o", &lavc_param_audio_avopt, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
5550 | 310 {NULL, NULL, 0, 0, 0, 0, NULL} |
311 }; | |
312 | |
313 struct vf_priv_s { | |
8585 | 314 muxer_stream_t* mux; |
7444 | 315 AVCodecContext *context; |
8413 | 316 AVFrame *pic; |
5550 | 317 AVCodec *codec; |
7088 | 318 FILE *stats_file; |
5550 | 319 }; |
320 | |
7088 | 321 #define stats_file (vf->priv->stats_file) |
5550 | 322 #define mux_v (vf->priv->mux) |
323 #define lavc_venc_context (vf->priv->context) | |
324 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
325 static int encode_frame(struct vf_instance *vf, AVFrame *pic, double pts); |
14080 | 326 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
327 static int config(struct vf_instance *vf, |
5550 | 328 int width, int height, int d_width, int d_height, |
329 unsigned int flags, unsigned int outfmt){ | |
7088 | 330 int size, i; |
29674 | 331 char *p; |
34531 | 332 AVDictionary *opts = NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
333 |
5550 | 334 mux_v->bih->biWidth=width; |
335 mux_v->bih->biHeight=height; | |
336 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8); | |
337 | |
17355 | 338 mp_msg(MSGT_MENCODER, MSGL_INFO,"videocodec: libavcodec (%dx%d fourcc=%x [%.4s])\n", |
5550 | 339 mux_v->bih->biWidth, mux_v->bih->biHeight, mux_v->bih->biCompression, |
340 (char *)&mux_v->bih->biCompression); | |
341 | |
7444 | 342 lavc_venc_context->width = width; |
343 lavc_venc_context->height = height; | |
5677
a21cab74cde8
bitrate>16000 means bits not kbits - noticed by George Hawkins <george_hawkins@yahoo.com>
arpi
parents:
5657
diff
changeset
|
344 if (lavc_param_vbitrate > 16000) /* != -1 */ |
7444 | 345 lavc_venc_context->bit_rate = lavc_param_vbitrate; |
5677
a21cab74cde8
bitrate>16000 means bits not kbits - noticed by George Hawkins <george_hawkins@yahoo.com>
arpi
parents:
5657
diff
changeset
|
346 else if (lavc_param_vbitrate >= 0) /* != -1 */ |
7444 | 347 lavc_venc_context->bit_rate = lavc_param_vbitrate*1000; |
5550 | 348 else |
7444 | 349 lavc_venc_context->bit_rate = 800000; /* default */ |
17480
3993a5fad89a
pass vbv_size & max_rate from encoder to muxer over muxer_stream_t (if this is wrong/silly/10000000l then dont hesitate to flame / reverse)
michael
parents:
17478
diff
changeset
|
350 |
19360
d4d72e5eea07
pass average bitrate from encoder to (lavf) muxer
michael
parents:
19073
diff
changeset
|
351 mux_v->avg_rate= lavc_venc_context->bit_rate; |
17480
3993a5fad89a
pass vbv_size & max_rate from encoder to muxer over muxer_stream_t (if this is wrong/silly/10000000l then dont hesitate to flame / reverse)
michael
parents:
17478
diff
changeset
|
352 |
7444 | 353 lavc_venc_context->bit_rate_tolerance= lavc_param_vrate_tolerance*1000; |
15307 | 354 lavc_venc_context->time_base= (AVRational){mux_v->h.dwScale, mux_v->h.dwRate}; |
7444 | 355 lavc_venc_context->qmin= lavc_param_vqmin; |
356 lavc_venc_context->qmax= lavc_param_vqmax; | |
11032 | 357 lavc_venc_context->lmin= (int)(FF_QP2LAMBDA * lavc_param_lmin + 0.5); |
358 lavc_venc_context->lmax= (int)(FF_QP2LAMBDA * lavc_param_lmax + 0.5); | |
20756 | 359 lavc_venc_context->mb_lmin= (int)(FF_QP2LAMBDA * lavc_param_mb_lmin + 0.5); |
360 lavc_venc_context->mb_lmax= (int)(FF_QP2LAMBDA * lavc_param_mb_lmax + 0.5); | |
7444 | 361 lavc_venc_context->max_qdiff= lavc_param_vqdiff; |
362 lavc_venc_context->qcompress= lavc_param_vqcompress; | |
363 lavc_venc_context->qblur= lavc_param_vqblur; | |
364 lavc_venc_context->max_b_frames= lavc_param_vmax_b_frames; | |
365 lavc_venc_context->b_quant_factor= lavc_param_vb_qfactor; | |
366 lavc_venc_context->rc_strategy= lavc_param_vrc_strategy; | |
367 lavc_venc_context->b_frame_strategy= lavc_param_vb_strategy; | |
14786 | 368 lavc_venc_context->b_quant_offset= (int)(FF_QP2LAMBDA * lavc_param_vb_qoffset + 0.5); |
7444 | 369 lavc_venc_context->luma_elim_threshold= lavc_param_luma_elim_threshold; |
370 lavc_venc_context->chroma_elim_threshold= lavc_param_chroma_elim_threshold; | |
371 lavc_venc_context->rtp_payload_size= lavc_param_packet_size; | |
372 lavc_venc_context->strict_std_compliance= lavc_param_strict; | |
373 lavc_venc_context->i_quant_factor= lavc_param_vi_qfactor; | |
14786 | 374 lavc_venc_context->i_quant_offset= (int)(FF_QP2LAMBDA * lavc_param_vi_qoffset + 0.5); |
7444 | 375 lavc_venc_context->rc_qsquish= lavc_param_rc_qsquish; |
376 lavc_venc_context->rc_qmod_amp= lavc_param_rc_qmod_amp; | |
377 lavc_venc_context->rc_qmod_freq= lavc_param_rc_qmod_freq; | |
378 lavc_venc_context->rc_eq= lavc_param_rc_eq; | |
17480
3993a5fad89a
pass vbv_size & max_rate from encoder to muxer over muxer_stream_t (if this is wrong/silly/10000000l then dont hesitate to flame / reverse)
michael
parents:
17478
diff
changeset
|
379 |
3993a5fad89a
pass vbv_size & max_rate from encoder to muxer over muxer_stream_t (if this is wrong/silly/10000000l then dont hesitate to flame / reverse)
michael
parents:
17478
diff
changeset
|
380 mux_v->max_rate= |
7444 | 381 lavc_venc_context->rc_max_rate= lavc_param_rc_max_rate*1000; |
382 lavc_venc_context->rc_min_rate= lavc_param_rc_min_rate*1000; | |
17480
3993a5fad89a
pass vbv_size & max_rate from encoder to muxer over muxer_stream_t (if this is wrong/silly/10000000l then dont hesitate to flame / reverse)
michael
parents:
17478
diff
changeset
|
383 |
3993a5fad89a
pass vbv_size & max_rate from encoder to muxer over muxer_stream_t (if this is wrong/silly/10000000l then dont hesitate to flame / reverse)
michael
parents:
17478
diff
changeset
|
384 mux_v->vbv_size= |
7444 | 385 lavc_venc_context->rc_buffer_size= lavc_param_rc_buffer_size*1000; |
17480
3993a5fad89a
pass vbv_size & max_rate from encoder to muxer over muxer_stream_t (if this is wrong/silly/10000000l then dont hesitate to flame / reverse)
michael
parents:
17478
diff
changeset
|
386 |
15781 | 387 lavc_venc_context->rc_initial_buffer_occupancy= |
388 lavc_venc_context->rc_buffer_size * | |
389 lavc_param_rc_initial_buffer_occupancy; | |
7444 | 390 lavc_venc_context->rc_buffer_aggressivity= lavc_param_rc_buffer_aggressivity; |
391 lavc_venc_context->rc_initial_cplx= lavc_param_rc_initial_cplx; | |
8341 | 392 lavc_venc_context->debug= lavc_param_debug; |
8695 | 393 lavc_venc_context->last_predictor_count= lavc_param_last_pred; |
8709 | 394 lavc_venc_context->pre_me= lavc_param_pre_me; |
8803 | 395 lavc_venc_context->me_pre_cmp= lavc_param_me_pre_cmp; |
396 lavc_venc_context->pre_dia_size= lavc_param_pre_dia_size; | |
397 lavc_venc_context->me_subpel_quality= lavc_param_me_subpel_quality; | |
9508 | 398 lavc_venc_context->me_range= lavc_param_me_range; |
9645 | 399 lavc_venc_context->intra_quant_bias= lavc_param_ibias; |
400 lavc_venc_context->inter_quant_bias= lavc_param_pbias; | |
10291 | 401 lavc_venc_context->coder_type= lavc_param_coder; |
402 lavc_venc_context->context_model= lavc_param_context; | |
11699
9165fbc7d89d
scenechange_threshold command line option patch by (Balatoni Denes <pnis at coder dot hu>)
michael
parents:
11672
diff
changeset
|
403 lavc_venc_context->scenechange_threshold= lavc_param_sc_threshold; |
11363 | 404 lavc_venc_context->noise_reduction= lavc_param_noise_reduction; |
11910 | 405 lavc_venc_context->quantizer_noise_shaping= lavc_param_qns; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
406 lavc_venc_context->inter_threshold= lavc_param_inter_threshold; |
12542 | 407 lavc_venc_context->nsse_weight= lavc_param_nssew; |
23953
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
408 lavc_venc_context->frame_skip_threshold= lavc_param_skip_threshold; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
409 lavc_venc_context->frame_skip_factor= lavc_param_skip_factor; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
410 lavc_venc_context->frame_skip_exp= lavc_param_skip_exp; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
411 lavc_venc_context->frame_skip_cmp= lavc_param_skip_cmp; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
412 |
10779 | 413 if (lavc_param_intra_matrix) |
414 { | |
415 char *tmp; | |
416 | |
417 lavc_venc_context->intra_matrix = | |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
418 av_malloc(sizeof(*lavc_venc_context->intra_matrix)*64); |
10779 | 419 |
420 i = 0; | |
421 while ((tmp = strsep(&lavc_param_intra_matrix, ",")) && (i < 64)) | |
422 { | |
423 if (!tmp || (tmp && !strlen(tmp))) | |
424 break; | |
425 lavc_venc_context->intra_matrix[i++] = atoi(tmp); | |
426 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
427 |
10779 | 428 if (i != 64) |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
429 av_freep(&lavc_venc_context->intra_matrix); |
10779 | 430 else |
431 mp_msg(MSGT_MENCODER, MSGL_V, "Using user specified intra matrix\n"); | |
432 } | |
433 if (lavc_param_inter_matrix) | |
434 { | |
435 char *tmp; | |
436 | |
437 lavc_venc_context->inter_matrix = | |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
438 av_malloc(sizeof(*lavc_venc_context->inter_matrix)*64); |
10779 | 439 |
440 i = 0; | |
441 while ((tmp = strsep(&lavc_param_inter_matrix, ",")) && (i < 64)) | |
442 { | |
443 if (!tmp || (tmp && !strlen(tmp))) | |
444 break; | |
445 lavc_venc_context->inter_matrix[i++] = atoi(tmp); | |
446 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
447 |
10779 | 448 if (i != 64) |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
449 av_freep(&lavc_venc_context->inter_matrix); |
10779 | 450 else |
451 mp_msg(MSGT_MENCODER, MSGL_V, "Using user specified inter matrix\n"); | |
452 } | |
9508 | 453 |
7088 | 454 p= lavc_param_rc_override_string; |
455 for(i=0; p; i++){ | |
456 int start, end, q; | |
457 int e=sscanf(p, "%d,%d,%d", &start, &end, &q); | |
458 if(e!=3){ | |
459 mp_msg(MSGT_MENCODER,MSGL_ERR,"error parsing vrc_q\n"); | |
460 return 0; | |
461 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
462 lavc_venc_context->rc_override= |
7444 | 463 realloc(lavc_venc_context->rc_override, sizeof(RcOverride)*(i+1)); |
464 lavc_venc_context->rc_override[i].start_frame= start; | |
465 lavc_venc_context->rc_override[i].end_frame = end; | |
7088 | 466 if(q>0){ |
7444 | 467 lavc_venc_context->rc_override[i].qscale= q; |
468 lavc_venc_context->rc_override[i].quality_factor= 1.0; | |
7088 | 469 } |
470 else{ | |
7444 | 471 lavc_venc_context->rc_override[i].qscale= 0; |
472 lavc_venc_context->rc_override[i].quality_factor= -q/100.0; | |
7088 | 473 } |
474 p= strchr(p, '/'); | |
475 if(p) p++; | |
476 } | |
7444 | 477 lavc_venc_context->rc_override_count=i; |
7088 | 478 |
7444 | 479 lavc_venc_context->mpeg_quant=lavc_param_mpeg_quant; |
7152 | 480 |
7444 | 481 lavc_venc_context->dct_algo= lavc_param_fdct; |
7564 | 482 lavc_venc_context->idct_algo= lavc_param_idct; |
7152 | 483 |
7490 | 484 lavc_venc_context->lumi_masking= lavc_param_lumi_masking; |
485 lavc_venc_context->temporal_cplx_masking= lavc_param_temporal_cplx_masking; | |
486 lavc_venc_context->spatial_cplx_masking= lavc_param_spatial_cplx_masking; | |
487 lavc_venc_context->p_masking= lavc_param_p_masking; | |
7496 | 488 lavc_venc_context->dark_masking= lavc_param_dark_masking; |
15368 | 489 lavc_venc_context->border_masking = lavc_param_border_masking; |
7490 | 490 |
8237 | 491 if (lavc_param_aspect != NULL) |
7389
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
492 { |
8237 | 493 int par_width, par_height, e; |
494 float ratio=0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
495 |
8237 | 496 e= sscanf (lavc_param_aspect, "%d/%d", &par_width, &par_height); |
497 if(e==2){ | |
498 if(par_height) | |
499 ratio= (float)par_width / (float)par_height; | |
500 }else{ | |
501 e= sscanf (lavc_param_aspect, "%f", &ratio); | |
7389
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
502 } |
8237 | 503 |
504 if (e && ratio > 0.1 && ratio < 10.0) { | |
11195
9bfd1b5d38cd
mpeg4 has only 8bit per numerator and denominator ...
michael
parents:
11194
diff
changeset
|
505 lavc_venc_context->sample_aspect_ratio= av_d2q(ratio * height / width, 255); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
506 mp_dbg(MSGT_MENCODER, MSGL_DBG2, "sample_aspect_ratio: %d/%d\n", |
11195
9bfd1b5d38cd
mpeg4 has only 8bit per numerator and denominator ...
michael
parents:
11194
diff
changeset
|
507 lavc_venc_context->sample_aspect_ratio.num, |
9bfd1b5d38cd
mpeg4 has only 8bit per numerator and denominator ...
michael
parents:
11194
diff
changeset
|
508 lavc_venc_context->sample_aspect_ratio.den); |
12061 | 509 mux_v->aspect = ratio; |
8237 | 510 mp_dbg(MSGT_MENCODER, MSGL_DBG2, "aspect_ratio: %f\n", ratio); |
511 } else { | |
512 mp_dbg(MSGT_MENCODER, MSGL_ERR, "aspect ratio: cannot parse \"%s\"\n", lavc_param_aspect); | |
513 return 0; | |
7389
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
514 } |
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
515 } |
13669
8f12e583f50b
10l...autoaspect was always applied to muxer aspect if using newer libavcodec...hope this is ok
rfelker
parents:
13406
diff
changeset
|
516 else if (lavc_param_autoaspect) { |
11369 | 517 lavc_venc_context->sample_aspect_ratio = av_d2q((float)d_width/d_height*height / width, 255); |
12061 | 518 mux_v->aspect = (float)d_width/d_height; |
13669
8f12e583f50b
10l...autoaspect was always applied to muxer aspect if using newer libavcodec...hope this is ok
rfelker
parents:
13406
diff
changeset
|
519 } |
7389
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
520 |
5550 | 521 /* keyframe interval */ |
522 if (lavc_param_keyint >= 0) /* != -1 */ | |
7444 | 523 lavc_venc_context->gop_size = lavc_param_keyint; |
5550 | 524 else |
7444 | 525 lavc_venc_context->gop_size = 250; /* default */ |
5550 | 526 |
10498 | 527 lavc_venc_context->flags = 0; |
528 if (lavc_param_mb_decision) | |
5550 | 529 { |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17909
diff
changeset
|
530 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_MPCODECS_HighQualityEncodingSelected); |
10498 | 531 lavc_venc_context->mb_decision= lavc_param_mb_decision; |
5550 | 532 } |
533 | |
8587 | 534 lavc_venc_context->me_cmp= lavc_param_me_cmp; |
535 lavc_venc_context->me_sub_cmp= lavc_param_me_sub_cmp; | |
536 lavc_venc_context->mb_cmp= lavc_param_mb_cmp; | |
11753 | 537 #ifdef FF_CMP_VSAD |
538 lavc_venc_context->ildct_cmp= lavc_param_ildct_cmp; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
539 #endif |
8587 | 540 lavc_venc_context->dia_size= lavc_param_dia_size; |
541 lavc_venc_context->flags|= lavc_param_qpel; | |
27516
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
542 lavc_venc_context->trellis = lavc_param_trell; |
24329 | 543 lavc_venc_context->flags|= lavc_param_lowdelay; |
11930
f2a503cb70ba
bit_exact patch by ("Steven M. Schultz" <sms at 2BSD dot COM>)
michael
parents:
11910
diff
changeset
|
544 lavc_venc_context->flags|= lavc_param_bit_exact; |
9536 | 545 lavc_venc_context->flags|= lavc_param_aic; |
34534
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
546 if (lavc_param_aiv) |
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
547 av_dict_set(&opts, "aiv", "1", 0); |
34533 | 548 if (lavc_param_umv) |
549 av_dict_set(&opts, "umv", "1", 0); | |
34534
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
550 if (lavc_param_obmc) |
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
551 av_dict_set(&opts, "obmc", "1", 0); |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
552 lavc_venc_context->flags|= lavc_param_loop; |
7444 | 553 lavc_venc_context->flags|= lavc_param_v4mv ? CODEC_FLAG_4MV : 0; |
34531 | 554 if (lavc_param_data_partitioning) |
555 av_dict_set(&opts, "data_partitioning", "1", 0); | |
10963 | 556 lavc_venc_context->flags|= lavc_param_cbp; |
10974 | 557 lavc_venc_context->flags|= lavc_param_mv0; |
11445 | 558 lavc_venc_context->flags|= lavc_param_qp_rd; |
34534
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
559 if (lavc_param_ss) |
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
560 av_dict_set(&opts, "structured_slices", "1", 0); |
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
561 if (lavc_param_alt) |
a97a86317704
Remove ifdefs that have been unnecessary since a long time
reimar
parents:
34533
diff
changeset
|
562 av_dict_set(&opts, "alternate_scan", "1", 0); |
11702 | 563 lavc_venc_context->flags|= lavc_param_ilme; |
28380
f521e54d47ee
Add support for libavcodec GMC flag, patch by Dave Baker, dbkr mxtelecom com.
diego
parents:
28360
diff
changeset
|
564 lavc_venc_context->flags|= lavc_param_gmc; |
12764
8109997eb7d3
dc precision and closed gop patch by (Nico Sabbi <nsabbi at tiscali dot it>)
michael
parents:
12760
diff
changeset
|
565 #ifdef CODEC_FLAG_CLOSED_GOP |
8109997eb7d3
dc precision and closed gop patch by (Nico Sabbi <nsabbi at tiscali dot it>)
michael
parents:
12760
diff
changeset
|
566 lavc_venc_context->flags|= lavc_param_closed_gop; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
567 #endif |
34532 | 568 lavc_venc_context->flags|= lavc_param_gray; |
6461 | 569 |
7490 | 570 if(lavc_param_normalize_aqp) lavc_venc_context->flags|= CODEC_FLAG_NORMALIZE_AQP; |
7504 | 571 if(lavc_param_interlaced_dct) lavc_venc_context->flags|= CODEC_FLAG_INTERLACED_DCT; |
8347 | 572 lavc_venc_context->flags|= lavc_param_psnr; |
12764
8109997eb7d3
dc precision and closed gop patch by (Nico Sabbi <nsabbi at tiscali dot it>)
michael
parents:
12760
diff
changeset
|
573 lavc_venc_context->intra_dc_precision = lavc_param_dc_precision - 8; |
8190 | 574 lavc_venc_context->prediction_method= lavc_param_prediction_method; |
17243
67ce2e4206ea
support downscaling frames for dynamic b frame decission
gpoirier
parents:
17063
diff
changeset
|
575 lavc_venc_context->brd_scale = lavc_param_brd_scale; |
17256
b89745a920d6
Add bidir_refine to lavc's set of options, and document it.
gpoirier
parents:
17243
diff
changeset
|
576 lavc_venc_context->bidir_refine = lavc_param_bidir_refine; |
17464 | 577 lavc_venc_context->scenechange_factor = lavc_param_sc_factor; |
17478
7d60fe925f87
vglobal so the user can tell the encoder that she wants global headers ... one step closer to correct mov/mp4 muxing
michael
parents:
17469
diff
changeset
|
578 if((lavc_param_video_global_header&1) |
7d60fe925f87
vglobal so the user can tell the encoder that she wants global headers ... one step closer to correct mov/mp4 muxing
michael
parents:
17469
diff
changeset
|
579 /*|| (video_global_header==0 && (oc->oformat->flags & AVFMT_GLOBALHEADER))*/){ |
7d60fe925f87
vglobal so the user can tell the encoder that she wants global headers ... one step closer to correct mov/mp4 muxing
michael
parents:
17469
diff
changeset
|
580 lavc_venc_context->flags |= CODEC_FLAG_GLOBAL_HEADER; |
7d60fe925f87
vglobal so the user can tell the encoder that she wants global headers ... one step closer to correct mov/mp4 muxing
michael
parents:
17469
diff
changeset
|
581 } |
7d60fe925f87
vglobal so the user can tell the encoder that she wants global headers ... one step closer to correct mov/mp4 muxing
michael
parents:
17469
diff
changeset
|
582 if(lavc_param_video_global_header&2){ |
7d60fe925f87
vglobal so the user can tell the encoder that she wants global headers ... one step closer to correct mov/mp4 muxing
michael
parents:
17469
diff
changeset
|
583 lavc_venc_context->flags2 |= CODEC_FLAG2_LOCAL_HEADER; |
7d60fe925f87
vglobal so the user can tell the encoder that she wants global headers ... one step closer to correct mov/mp4 muxing
michael
parents:
17469
diff
changeset
|
584 } |
18489 | 585 lavc_venc_context->mv0_threshold = lavc_param_mv0_threshold; |
18569 | 586 lavc_venc_context->refs = lavc_param_refs; |
18572 | 587 lavc_venc_context->b_sensitivity = lavc_param_b_sensitivity; |
23209 | 588 lavc_venc_context->level = lavc_param_level; |
17478
7d60fe925f87
vglobal so the user can tell the encoder that she wants global headers ... one step closer to correct mov/mp4 muxing
michael
parents:
17469
diff
changeset
|
589 |
26693 | 590 if(lavc_param_avopt){ |
591 if(parse_avopts(lavc_venc_context, lavc_param_avopt) < 0){ | |
592 mp_msg(MSGT_MENCODER,MSGL_ERR, "Your options /%s/ look like gibberish to me pal\n", lavc_param_avopt); | |
593 return 0; | |
594 } | |
595 } | |
596 | |
23309
af2f1099072f
Pass imgfmt from lavc encoder to lavf muxer (this is needed for dv).
corey
parents:
23288
diff
changeset
|
597 mux_v->imgfmt = lavc_param_format; |
30312
54e9eb2664a7
Reuse the fmt-conversion code instead of duplicating the functionality.
reimar
parents:
29793
diff
changeset
|
598 lavc_venc_context->pix_fmt = imgfmt2pixfmt(lavc_param_format); |
54e9eb2664a7
Reuse the fmt-conversion code instead of duplicating the functionality.
reimar
parents:
29793
diff
changeset
|
599 if (lavc_venc_context->pix_fmt == PIX_FMT_NONE) |
54e9eb2664a7
Reuse the fmt-conversion code instead of duplicating the functionality.
reimar
parents:
29793
diff
changeset
|
600 return 0; |
10302 | 601 |
10848
5844bf004dec
2pass stats curruption fix by ("Johannes E. Schindelin" <Johannes dot Schindelin at gmx dot de>)
michael
parents:
10779
diff
changeset
|
602 if(!stats_file) { |
5778 | 603 /* lavc internal 2pass bitrate control */ |
6673 | 604 switch(lavc_param_vpass){ |
7088 | 605 case 2: |
13385
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
606 case 3: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
607 lavc_venc_context->flags|= CODEC_FLAG_PASS2; |
10881
6c3555f4c5c3
fix 2-pass encoding with libavcodec onwin32, patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10848
diff
changeset
|
608 stats_file= fopen(passtmpfile, "rb"); |
7088 | 609 if(stats_file==NULL){ |
610 mp_msg(MSGT_MENCODER,MSGL_ERR,"2pass failed: filename=%s\n", passtmpfile); | |
611 return 0; | |
612 } | |
613 fseek(stats_file, 0, SEEK_END); | |
614 size= ftell(stats_file); | |
615 fseek(stats_file, 0, SEEK_SET); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
616 |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
617 lavc_venc_context->stats_in= av_malloc(size + 1); |
7444 | 618 lavc_venc_context->stats_in[size]=0; |
7088 | 619 |
7444 | 620 if(fread(lavc_venc_context->stats_in, size, 1, stats_file)<1){ |
7088 | 621 mp_msg(MSGT_MENCODER,MSGL_ERR,"2pass failed: reading from filename=%s\n", passtmpfile); |
622 return 0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
623 } |
13385
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
624 if(lavc_param_vpass == 2) |
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
625 break; |
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
626 else |
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
627 fclose(stats_file); |
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
628 /* fall through */ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
629 case 1: |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
630 lavc_venc_context->flags|= CODEC_FLAG_PASS1; |
13385
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
631 stats_file= fopen(passtmpfile, "wb"); |
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
632 if(stats_file==NULL){ |
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
633 mp_msg(MSGT_MENCODER,MSGL_ERR,"2pass failed: filename=%s\n", passtmpfile); |
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
634 return 0; |
e488b3c628db
support generating divx2pass.log on 2nd pass patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
13074
diff
changeset
|
635 } |
13406
2f69854dfbe4
10l: Make turbo mode compatible with 3-pass encoding
gpoirier
parents:
13386
diff
changeset
|
636 if(lavc_param_turbo && (lavc_param_vpass == 1)) { |
13386
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
637 /* uses SAD comparison functions instead of other hungrier */ |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
638 lavc_venc_context->me_pre_cmp = 0; |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
639 lavc_venc_context->me_cmp = 0; |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
640 lavc_venc_context->me_sub_cmp = 0; |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
641 lavc_venc_context->mb_cmp = 2; |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
642 |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
643 /* Disables diamond motion estimation */ |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
644 lavc_venc_context->pre_dia_size = 0; |
14892
fb3a1db63672
35% faster turbo mode with 0.01dB drop. Based Loren Merritt's suggestions.
gpoirier
parents:
14878
diff
changeset
|
645 lavc_venc_context->dia_size = 1; |
13386
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
646 |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
647 lavc_venc_context->quantizer_noise_shaping = 0; // qns=0 |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
648 lavc_venc_context->noise_reduction = 0; // nr=0 |
14892
fb3a1db63672
35% faster turbo mode with 0.01dB drop. Based Loren Merritt's suggestions.
gpoirier
parents:
14878
diff
changeset
|
649 lavc_venc_context->mb_decision = 0; // mbd=0 ("realtime" encoding) |
13386
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
650 |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
651 lavc_venc_context->flags &= ~CODEC_FLAG_QPEL; |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
652 lavc_venc_context->flags &= ~CODEC_FLAG_4MV; |
27516
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
653 lavc_venc_context->trellis = 0; |
13386
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
654 lavc_venc_context->flags &= ~CODEC_FLAG_CBP_RD; |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
655 lavc_venc_context->flags &= ~CODEC_FLAG_QP_RD; |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
656 lavc_venc_context->flags &= ~CODEC_FLAG_MV0; |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
657 } |
7088 | 658 break; |
6673 | 659 } |
10848
5844bf004dec
2pass stats curruption fix by ("Johannes E. Schindelin" <Johannes dot Schindelin at gmx dot de>)
michael
parents:
10779
diff
changeset
|
660 } |
5778 | 661 |
7444 | 662 lavc_venc_context->me_method = ME_ZERO+lavc_param_vme; |
5550 | 663 |
664 /* fixed qscale :p */ | |
18569 | 665 if (lavc_param_vqscale >= 0.0) |
5550 | 666 { |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17909
diff
changeset
|
667 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_MPCODECS_UsingConstantQscale, lavc_param_vqscale); |
7444 | 668 lavc_venc_context->flags |= CODEC_FLAG_QSCALE; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
669 lavc_venc_context->global_quality= |
11032 | 670 vf->priv->pic->quality = (int)(FF_QP2LAMBDA * lavc_param_vqscale + 0.5); |
5550 | 671 } |
19073
8b52dad54b1d
Remove #if LIBAVCODEC_BUILD >= XXX and #if LIBAVFORMAT_BUILD >= XXX jungle.
diego
parents:
18976
diff
changeset
|
672 |
33027
55de45e1d943
Do not use deprecated avcodec_thread_init, it is broken and does nothing currently.
reimar
parents:
32943
diff
changeset
|
673 lavc_venc_context->thread_count = lavc_param_threads; |
33028 | 674 lavc_venc_context->thread_type = FF_THREAD_FRAME | FF_THREAD_SLICE; |
5550 | 675 |
34531 | 676 if (avcodec_open2(lavc_venc_context, vf->priv->codec, &opts) != 0) { |
5550 | 677 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CantOpenCodec); |
678 return 0; | |
679 } | |
34531 | 680 av_dict_free(&opts); |
5550 | 681 |
7088 | 682 /* free second pass buffer, its not needed anymore */ |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
683 av_freep(&lavc_venc_context->stats_in); |
27516
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
684 if(lavc_venc_context->bits_per_coded_sample) |
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
685 mux_v->bih->biBitCount= lavc_venc_context->bits_per_coded_sample; |
8190 | 686 if(lavc_venc_context->extradata_size){ |
32105 | 687 mux_v->bih= realloc(mux_v->bih, sizeof(*mux_v->bih) + lavc_venc_context->extradata_size); |
8190 | 688 memcpy(mux_v->bih + 1, lavc_venc_context->extradata, lavc_venc_context->extradata_size); |
32105 | 689 mux_v->bih->biSize= sizeof(*mux_v->bih) + lavc_venc_context->extradata_size; |
8190 | 690 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
691 |
17659 | 692 mux_v->decoder_delay = lavc_venc_context->max_b_frames ? 1 : 0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
693 |
5550 | 694 return 1; |
695 } | |
696 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
697 static int control(struct vf_instance *vf, int request, void* data){ |
5550 | 698 |
14080 | 699 switch(request){ |
700 case VFCTRL_FLUSH_FRAMES: | |
701 if(vf->priv->codec->capabilities & CODEC_CAP_DELAY) | |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17886
diff
changeset
|
702 while(encode_frame(vf, NULL, MP_NOPTS_VALUE) > 0); |
14080 | 703 return CONTROL_TRUE; |
704 default: | |
705 return CONTROL_UNKNOWN; | |
706 } | |
5550 | 707 } |
708 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
709 static int query_format(struct vf_instance *vf, unsigned int fmt){ |
5550 | 710 switch(fmt){ |
711 case IMGFMT_YV12: | |
712 case IMGFMT_IYUV: | |
713 case IMGFMT_I420: | |
10778 | 714 if(lavc_param_format == IMGFMT_YV12) |
8190 | 715 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
716 break; | |
10293 | 717 case IMGFMT_411P: |
10778 | 718 if(lavc_param_format == IMGFMT_411P) |
10293 | 719 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
720 break; | |
8190 | 721 case IMGFMT_422P: |
10778 | 722 if(lavc_param_format == IMGFMT_422P) |
8190 | 723 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
724 break; | |
10293 | 725 case IMGFMT_444P: |
10778 | 726 if(lavc_param_format == IMGFMT_444P) |
10293 | 727 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
728 break; | |
729 case IMGFMT_YVU9: | |
10778 | 730 if(lavc_param_format == IMGFMT_YVU9) |
10293 | 731 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
732 break; | |
10302 | 733 case IMGFMT_BGR32: |
10778 | 734 if(lavc_param_format == IMGFMT_BGR32) |
10302 | 735 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
736 break; | |
5550 | 737 } |
738 return 0; | |
739 } | |
740 | |
8347 | 741 static double psnr(double d){ |
742 if(d==0) return INFINITY; | |
743 return -10.0*log(d)/log(10); | |
744 } | |
745 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
746 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){ |
8413 | 747 AVFrame *pic= vf->priv->pic; |
5550 | 748 |
8339 | 749 pic->data[0]=mpi->planes[0]; |
750 pic->data[1]=mpi->planes[1]; | |
751 pic->data[2]=mpi->planes[2]; | |
752 pic->linesize[0]=mpi->stride[0]; | |
753 pic->linesize[1]=mpi->stride[1]; | |
754 pic->linesize[2]=mpi->stride[2]; | |
34529 | 755 pic->pict_type = is_forced_key_frame(pts) ? AV_PICTURE_TYPE_I : 0; |
5550 | 756 |
11672
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
757 if(lavc_param_interlaced_dct){ |
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
758 if((mpi->fields & MP_IMGFIELD_ORDERED) && (mpi->fields & MP_IMGFIELD_INTERLACED)) |
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
759 pic->top_field_first= !!(mpi->fields & MP_IMGFIELD_TOP_FIRST); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
760 else |
11672
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
761 pic->top_field_first= 1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
762 |
11672
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
763 if(lavc_param_top!=-1) |
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
764 pic->top_field_first= lavc_param_top; |
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
765 } |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
766 |
26754
63630c09e237
cosmetics: Remove pointless parentheses from return calls.
diego
parents:
26693
diff
changeset
|
767 return encode_frame(vf, pic, pts) >= 0; |
14080 | 768 } |
769 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
770 static int encode_frame(struct vf_instance *vf, AVFrame *pic, double pts){ |
14080 | 771 const char pict_type_char[5]= {'?', 'I', 'P', 'B', 'S'}; |
772 int out_size; | |
17907 | 773 double dts; |
14080 | 774 |
23954 | 775 if(pts == MP_NOPTS_VALUE) |
776 pts= lavc_venc_context->frame_number * av_q2d(lavc_venc_context->time_base); | |
777 | |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17886
diff
changeset
|
778 if(pic){ |
17909 | 779 #if 0 |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17886
diff
changeset
|
780 pic->opaque= malloc(sizeof(pts)); |
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17886
diff
changeset
|
781 memcpy(pic->opaque, &pts, sizeof(pts)); |
17909 | 782 #else |
783 if(pts != MP_NOPTS_VALUE) | |
784 pic->pts= floor(pts / av_q2d(lavc_venc_context->time_base) + 0.5); | |
785 else | |
786 pic->pts= MP_NOPTS_VALUE; | |
787 #endif | |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17886
diff
changeset
|
788 } |
7444 | 789 out_size = avcodec_encode_video(lavc_venc_context, mux_v->buffer, mux_v->buffer_size, |
8339 | 790 pic); |
5550 | 791 |
32841
f698af71f514
For codecs that produce no data on the first pass, e.g.
ranma
parents:
32768
diff
changeset
|
792 /* store stats if there are any */ |
32860
77dd2bb3fd02
Make sure we don't store the same stats twice by nulling the first byte of the stats_out string once we have written it.
ranma
parents:
32841
diff
changeset
|
793 if(lavc_venc_context->stats_out && stats_file) { |
32841
f698af71f514
For codecs that produce no data on the first pass, e.g.
ranma
parents:
32768
diff
changeset
|
794 fprintf(stats_file, "%s", lavc_venc_context->stats_out); |
32860
77dd2bb3fd02
Make sure we don't store the same stats twice by nulling the first byte of the stats_out string once we have written it.
ranma
parents:
32841
diff
changeset
|
795 /* make sure we can't accidentally store the same stats twice */ |
77dd2bb3fd02
Make sure we don't store the same stats twice by nulling the first byte of the stats_out string once we have written it.
ranma
parents:
32841
diff
changeset
|
796 lavc_venc_context->stats_out[0] = 0; |
77dd2bb3fd02
Make sure we don't store the same stats twice by nulling the first byte of the stats_out string once we have written it.
ranma
parents:
32841
diff
changeset
|
797 } |
32841
f698af71f514
For codecs that produce no data on the first pass, e.g.
ranma
parents:
32768
diff
changeset
|
798 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
799 if(pts != MP_NOPTS_VALUE) |
17907 | 800 dts= pts - lavc_venc_context->delay * av_q2d(lavc_venc_context->time_base); |
801 else | |
802 dts= MP_NOPTS_VALUE; | |
17909 | 803 #if 0 |
17907 | 804 pts= lavc_venc_context->coded_frame->opaque ? |
805 *(double*)lavc_venc_context->coded_frame->opaque | |
806 : MP_NOPTS_VALUE; | |
17909 | 807 #else |
808 if(lavc_venc_context->coded_frame->pts != MP_NOPTS_VALUE) | |
809 pts= lavc_venc_context->coded_frame->pts * av_q2d(lavc_venc_context->time_base); | |
810 else | |
811 pts= MP_NOPTS_VALUE; | |
812 assert(MP_NOPTS_VALUE == AV_NOPTS_VALUE); | |
813 #endif | |
814 //fprintf(stderr, "ve_lavc %f/%f\n", dts, pts); | |
23953
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
815 if(out_size == 0 && lavc_param_skip_threshold==0 && lavc_param_skip_factor==0){ |
17659 | 816 ++mux_v->encoder_delay; |
14080 | 817 return 0; |
17659 | 818 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
819 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
820 muxer_write_chunk(mux_v,out_size,lavc_venc_context->coded_frame->key_frame?0x10:0, |
17907 | 821 dts, pts); |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17886
diff
changeset
|
822 free(lavc_venc_context->coded_frame->opaque); |
17907 | 823 lavc_venc_context->coded_frame->opaque= NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
824 |
8347 | 825 /* store psnr / pict size / type / qscale */ |
826 if(lavc_param_psnr){ | |
827 static FILE *fvstats=NULL; | |
828 char filename[20]; | |
829 double f= lavc_venc_context->width*lavc_venc_context->height*255.0*255.0; | |
9865
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
830 double quality=0.0; |
9868 | 831 int8_t *q; |
8347 | 832 |
833 if(!fvstats) { | |
834 time_t today2; | |
835 struct tm *today; | |
836 today2 = time(NULL); | |
837 today = localtime(&today2); | |
838 sprintf(filename, "psnr_%02d%02d%02d.log", today->tm_hour, | |
839 today->tm_min, today->tm_sec); | |
840 fvstats = fopen(filename,"w"); | |
841 if(!fvstats) { | |
842 perror("fopen"); | |
843 lavc_param_psnr=0; // disable block | |
12983 | 844 mp_msg(MSGT_MENCODER,MSGL_ERR,"Can't open %s for writing. Check its permissions.\n",filename); |
14080 | 845 return -1; |
8347 | 846 /*exit(1);*/ |
847 } | |
848 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
849 |
9865
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
850 // average MB quantizer |
9868 | 851 q = lavc_venc_context->coded_frame->qscale_table; |
852 if(q) { | |
9865
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
853 int x, y; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
854 int w = (lavc_venc_context->width+15) >> 4; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
855 int h = (lavc_venc_context->height+15) >> 4; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
856 for( y = 0; y < h; y++ ) { |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
857 for( x = 0; x < w; x++ ) |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
858 quality += (double)*(q+x); |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
859 q += lavc_venc_context->coded_frame->qstride; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
860 } |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
861 quality /= w * h; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
862 } else |
11032 | 863 quality = lavc_venc_context->coded_frame->quality / (float)FF_QP2LAMBDA; |
8347 | 864 |
865 fprintf(fvstats, "%6d, %2.2f, %6d, %2.2f, %2.2f, %2.2f, %2.2f %c\n", | |
8413 | 866 lavc_venc_context->coded_frame->coded_picture_number, |
9865
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
867 quality, |
8347 | 868 out_size, |
8413 | 869 psnr(lavc_venc_context->coded_frame->error[0]/f), |
870 psnr(lavc_venc_context->coded_frame->error[1]*4/f), | |
871 psnr(lavc_venc_context->coded_frame->error[2]*4/f), | |
872 psnr((lavc_venc_context->coded_frame->error[0]+lavc_venc_context->coded_frame->error[1]+lavc_venc_context->coded_frame->error[2])/(f*1.5)), | |
873 pict_type_char[lavc_venc_context->coded_frame->pict_type] | |
8347 | 874 ); |
875 } | |
14080 | 876 return out_size; |
5550 | 877 } |
878 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
879 static void uninit(struct vf_instance *vf){ |
19073
8b52dad54b1d
Remove #if LIBAVCODEC_BUILD >= XXX and #if LIBAVFORMAT_BUILD >= XXX jungle.
diego
parents:
18976
diff
changeset
|
880 |
8347 | 881 if(lavc_param_psnr){ |
882 double f= lavc_venc_context->width*lavc_venc_context->height*255.0*255.0; | |
8413 | 883 f*= lavc_venc_context->coded_frame->coded_picture_number; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
884 |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17909
diff
changeset
|
885 mp_msg(MSGT_MENCODER, MSGL_INFO, "PSNR: Y:%2.2f, Cb:%2.2f, Cr:%2.2f, All:%2.2f\n", |
8347 | 886 psnr(lavc_venc_context->error[0]/f), |
887 psnr(lavc_venc_context->error[1]*4/f), | |
888 psnr(lavc_venc_context->error[2]*4/f), | |
889 psnr((lavc_venc_context->error[0]+lavc_venc_context->error[1]+lavc_venc_context->error[2])/(f*1.5)) | |
890 ); | |
891 } | |
892 | |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
893 av_freep(&lavc_venc_context->intra_matrix); |
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
894 av_freep(&lavc_venc_context->inter_matrix); |
10779 | 895 |
29793
e19b989877c6
Only call avcodec_close if the open succeeded before, otherwise avcodec_close
reimar
parents:
29674
diff
changeset
|
896 if (lavc_venc_context->codec) |
e19b989877c6
Only call avcodec_close if the open succeeded before, otherwise avcodec_close
reimar
parents:
29674
diff
changeset
|
897 avcodec_close(lavc_venc_context); |
7088 | 898 |
899 if(stats_file) fclose(stats_file); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
900 |
7088 | 901 /* free rc_override */ |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
902 av_freep(&lavc_venc_context->rc_override); |
7444 | 903 |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
904 av_freep(&vf->priv->context); |
5551 | 905 } |
906 | |
5550 | 907 //===========================================================================// |
908 | |
909 static int vf_open(vf_instance_t *vf, char* args){ | |
5551 | 910 vf->uninit=uninit; |
5550 | 911 vf->config=config; |
14878 | 912 vf->default_caps=VFCAP_CONSTANT; |
5550 | 913 vf->control=control; |
914 vf->query_format=query_format; | |
915 vf->put_image=put_image; | |
32103 | 916 vf->priv=calloc(1, sizeof(struct vf_priv_s)); |
8585 | 917 vf->priv->mux=(muxer_stream_t*)args; |
5550 | 918 |
5977
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
919 /* XXX: hack: some of the MJPEG decoder DLL's needs exported huffman |
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
920 table, so we define a zero-table, also lavc mjpeg encoder is putting |
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
921 huffman tables into the stream, so no problem */ |
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
922 if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "mjpeg")) |
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
923 { |
32105 | 924 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+28); |
925 mux_v->bih->biSize=sizeof(*mux_v->bih)+28; | |
5977
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
926 } |
14057 | 927 else if (lavc_param_vcodec && (!strcasecmp(lavc_param_vcodec, "huffyuv") |
928 || !strcasecmp(lavc_param_vcodec, "ffvhuff"))) | |
8190 | 929 { |
930 /* XXX: hack: huffyuv needs to store huffman tables (allthough we dunno the size yet ...) */ | |
32105 | 931 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+1000); |
932 mux_v->bih->biSize=sizeof(*mux_v->bih)+1000; | |
8190 | 933 } |
10131 | 934 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "asv1")) |
935 { | |
32105 | 936 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+8); |
937 mux_v->bih->biSize=sizeof(*mux_v->bih)+8; | |
10131 | 938 } |
10777 | 939 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "asv2")) |
940 { | |
32105 | 941 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+8); |
942 mux_v->bih->biSize=sizeof(*mux_v->bih)+8; | |
10777 | 943 } |
8587 | 944 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "wmv2")) |
945 { | |
32105 | 946 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+4); |
947 mux_v->bih->biSize=sizeof(*mux_v->bih)+4; | |
8587 | 948 } |
5977
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
949 else |
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
950 { |
32105 | 951 mux_v->bih=calloc(1, sizeof(*mux_v->bih)); |
952 mux_v->bih->biSize=sizeof(*mux_v->bih); | |
5977
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
953 } |
5550 | 954 mux_v->bih->biWidth=0; |
955 mux_v->bih->biHeight=0; | |
956 mux_v->bih->biPlanes=1; | |
957 mux_v->bih->biBitCount=24; | |
958 if (!lavc_param_vcodec) | |
959 { | |
5977
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
960 printf("No libavcodec codec specified! It's required!\n"); |
5550 | 961 return 0; |
962 } | |
963 | |
964 if (!strcasecmp(lavc_param_vcodec, "mpeg1") || !strcasecmp(lavc_param_vcodec, "mpeg1video")) | |
965 mux_v->bih->biCompression = mmioFOURCC('m', 'p', 'g', '1'); | |
10699 | 966 else if (!strcasecmp(lavc_param_vcodec, "mpeg2") || !strcasecmp(lavc_param_vcodec, "mpeg2video")) |
967 mux_v->bih->biCompression = mmioFOURCC('m', 'p', 'g', '2'); | |
5550 | 968 else if (!strcasecmp(lavc_param_vcodec, "h263") || !strcasecmp(lavc_param_vcodec, "h263p")) |
969 mux_v->bih->biCompression = mmioFOURCC('h', '2', '6', '3'); | |
970 else if (!strcasecmp(lavc_param_vcodec, "rv10")) | |
971 mux_v->bih->biCompression = mmioFOURCC('R', 'V', '1', '0'); | |
972 else if (!strcasecmp(lavc_param_vcodec, "mjpeg")) | |
973 mux_v->bih->biCompression = mmioFOURCC('M', 'J', 'P', 'G'); | |
10302 | 974 else if (!strcasecmp(lavc_param_vcodec, "ljpeg")) |
975 mux_v->bih->biCompression = mmioFOURCC('L', 'J', 'P', 'G'); | |
5550 | 976 else if (!strcasecmp(lavc_param_vcodec, "mpeg4")) |
14766 | 977 mux_v->bih->biCompression = mmioFOURCC('F', 'M', 'P', '4'); |
5550 | 978 else if (!strcasecmp(lavc_param_vcodec, "msmpeg4")) |
979 mux_v->bih->biCompression = mmioFOURCC('d', 'i', 'v', '3'); | |
5972 | 980 else if (!strcasecmp(lavc_param_vcodec, "msmpeg4v2")) |
981 mux_v->bih->biCompression = mmioFOURCC('M', 'P', '4', '2'); | |
6461 | 982 else if (!strcasecmp(lavc_param_vcodec, "wmv1")) |
983 mux_v->bih->biCompression = mmioFOURCC('W', 'M', 'V', '1'); | |
8587 | 984 else if (!strcasecmp(lavc_param_vcodec, "wmv2")) |
985 mux_v->bih->biCompression = mmioFOURCC('W', 'M', 'V', '2'); | |
8190 | 986 else if (!strcasecmp(lavc_param_vcodec, "huffyuv")) |
987 mux_v->bih->biCompression = mmioFOURCC('H', 'F', 'Y', 'U'); | |
14057 | 988 else if (!strcasecmp(lavc_param_vcodec, "ffvhuff")) |
989 mux_v->bih->biCompression = mmioFOURCC('F', 'F', 'V', 'H'); | |
10131 | 990 else if (!strcasecmp(lavc_param_vcodec, "asv1")) |
991 mux_v->bih->biCompression = mmioFOURCC('A', 'S', 'V', '1'); | |
10777 | 992 else if (!strcasecmp(lavc_param_vcodec, "asv2")) |
993 mux_v->bih->biCompression = mmioFOURCC('A', 'S', 'V', '2'); | |
10264 | 994 else if (!strcasecmp(lavc_param_vcodec, "ffv1")) |
995 mux_v->bih->biCompression = mmioFOURCC('F', 'F', 'V', '1'); | |
13074 | 996 else if (!strcasecmp(lavc_param_vcodec, "snow")) |
997 mux_v->bih->biCompression = mmioFOURCC('S', 'N', 'O', 'W'); | |
20419 | 998 else if (!strcasecmp(lavc_param_vcodec, "flv")) |
999 mux_v->bih->biCompression = mmioFOURCC('F', 'L', 'V', '1'); | |
23288 | 1000 else if (!strcasecmp(lavc_param_vcodec, "dvvideo")) |
1001 mux_v->bih->biCompression = mmioFOURCC('d', 'v', 's', 'd'); | |
24004
73e5eb586eb6
make x264 work again after the h264-libx264 renaming
michael
parents:
23957
diff
changeset
|
1002 else if (!strcasecmp(lavc_param_vcodec, "libx264")) |
73e5eb586eb6
make x264 work again after the h264-libx264 renaming
michael
parents:
23957
diff
changeset
|
1003 mux_v->bih->biCompression = mmioFOURCC('h', '2', '6', '4'); |
27307
b9af28b39daf
Add Dirac video support via libdirac and libschroedinger in libavcodec.
diego
parents:
26754
diff
changeset
|
1004 else if (!strcasecmp(lavc_param_vcodec, "libschroedinger")) |
b9af28b39daf
Add Dirac video support via libdirac and libschroedinger in libavcodec.
diego
parents:
26754
diff
changeset
|
1005 mux_v->bih->biCompression = mmioFOURCC('d', 'r', 'a', 'c'); |
b9af28b39daf
Add Dirac video support via libdirac and libschroedinger in libavcodec.
diego
parents:
26754
diff
changeset
|
1006 else if (!strcasecmp(lavc_param_vcodec, "libdirac")) |
b9af28b39daf
Add Dirac video support via libdirac and libschroedinger in libavcodec.
diego
parents:
26754
diff
changeset
|
1007 mux_v->bih->biCompression = mmioFOURCC('d', 'r', 'a', 'c'); |
32943 | 1008 else if (!strcasecmp(lavc_param_vcodec, "libvpx")) |
1009 mux_v->bih->biCompression = mmioFOURCC('V', 'P', '8', '0'); | |
5550 | 1010 else |
1011 mux_v->bih->biCompression = mmioFOURCC(lavc_param_vcodec[0], | |
1012 lavc_param_vcodec[1], lavc_param_vcodec[2], lavc_param_vcodec[3]); /* FIXME!!! */ | |
1013 | |
31959
f957f330aa6d
Introduce init_avcodec function to avoid duplicated FFmpeg initializations.
diego
parents:
31589
diff
changeset
|
1014 init_avcodec(); |
5550 | 1015 |
34691 | 1016 vf->priv->codec = avcodec_find_encoder_by_name(lavc_param_vcodec); |
5550 | 1017 if (!vf->priv->codec) { |
1018 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_MissingLAVCcodec, lavc_param_vcodec); | |
1019 return 0; | |
1020 } | |
1021 | |
8413 | 1022 vf->priv->pic = avcodec_alloc_frame(); |
33935 | 1023 vf->priv->context = avcodec_alloc_context3(vf->priv->codec); |
29673
a3cc38ad5878
Set codec_type and codec_id in codec context for lavc encoders.
reimar
parents:
29263
diff
changeset
|
1024 vf->priv->context->codec_id = vf->priv->codec->id; |
7444 | 1025 |
5550 | 1026 return 1; |
1027 } | |
1028 | |
32033 | 1029 const vf_info_t ve_info_lavc = { |
5550 | 1030 "libavcodec encoder", |
1031 "lavc", | |
6673 | 1032 "A'rpi, Alex, Michael", |
5550 | 1033 "for internal use by mencoder", |
1034 vf_open | |
1035 }; | |
1036 | |
1037 //===========================================================================// |