Mercurial > mplayer.hg
annotate libmpcodecs/ve_lavc.c @ 33672:e576232a39d5
Prevent balance from hopping.
Only recalculate the balance if the balance has changed, not if just
the volume has changed.
Because (at least with my soundcard) not all volume values can be
stored, but seem to be mapped onto a discrete value set, recalculation
the balance from the volume isn't accurate enough.
author | ib |
---|---|
date | Tue, 28 Jun 2011 18:16:06 +0000 |
parents | 107d32318fa0 |
children | 30f5e5cd3676 |
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" |
31959
f957f330aa6d
Introduce init_avcodec function to avoid duplicated FFmpeg initializations.
diego
parents:
31589
diff
changeset
|
50 #include "vd_ffmpeg.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}, |
6228
ea6b20e70ac5
new options to support Michael's libavcodec patch, #ifdefed
arpi
parents:
5977
diff
changeset
|
217 {"vdpart", &lavc_param_data_partitioning, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PART, NULL}, |
5550 | 218 {"keyint", &lavc_param_keyint, CONF_TYPE_INT, 0, 0, 0, NULL}, |
26395 | 219 {"gray", &lavc_param_gray, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PART, 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 #ifdef CODEC_FLAG_AC_PRED |
ed8f8f58f855
Update libavcodec 'aic' flag define to match current FFmpeg.
diego
parents:
27516
diff
changeset
|
268 {"aic", &lavc_param_aic, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_AC_PRED, NULL}, |
9536 | 269 {"umv", &lavc_param_umv, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_UMV, NULL}, |
270 #endif | |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
271 #ifdef CODEC_FLAG_H263P_AIV |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
272 {"aiv", &lavc_param_aiv, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_AIV, NULL}, |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
273 #endif |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
274 #ifdef CODEC_FLAG_OBMC |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
275 {"obmc", &lavc_param_obmc, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_OBMC, NULL}, |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
276 #endif |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
277 #ifdef CODEC_FLAG_LOOP_FILTER |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
278 {"loop", &lavc_param_loop, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_LOOP_FILTER, NULL}, |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
279 #endif |
9645 | 280 {"ibias", &lavc_param_ibias, CONF_TYPE_INT, CONF_RANGE, -512, 512, NULL}, |
281 {"pbias", &lavc_param_pbias, CONF_TYPE_INT, CONF_RANGE, -512, 512, NULL}, | |
10291 | 282 {"coder", &lavc_param_coder, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL}, |
283 {"context", &lavc_param_context, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL}, | |
10779 | 284 {"intra_matrix", &lavc_param_intra_matrix, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
285 {"inter_matrix", &lavc_param_inter_matrix, CONF_TYPE_STRING, 0, 0, 0, NULL}, | |
10963 | 286 {"cbp", &lavc_param_cbp, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CBP_RD, NULL}, |
10974 | 287 {"mv0", &lavc_param_mv0, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_MV0, NULL}, |
11363 | 288 {"nr", &lavc_param_noise_reduction, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL}, |
11445 | 289 #ifdef CODEC_FLAG_QP_RD |
290 {"qprd", &lavc_param_qp_rd, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QP_RD, NULL}, | |
291 #endif | |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
292 #ifdef CODEC_FLAG_H263P_SLICE_STRUCT |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
293 {"ss", &lavc_param_ss, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_SLICE_STRUCT, NULL}, |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
294 #endif |
11702 | 295 #ifdef CODEC_FLAG_ALT_SCAN |
296 {"alt", &lavc_param_alt, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_ALT_SCAN, NULL}, | |
297 #endif | |
298 #ifdef CODEC_FLAG_INTERLACED_ME | |
299 {"ilme", &lavc_param_ilme, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_ME, NULL}, | |
300 #endif | |
12764
8109997eb7d3
dc precision and closed gop patch by (Nico Sabbi <nsabbi at tiscali dot it>)
michael
parents:
12760
diff
changeset
|
301 #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
|
302 {"cgop", &lavc_param_closed_gop, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CLOSED_GOP, NULL}, |
8109997eb7d3
dc precision and closed gop patch by (Nico Sabbi <nsabbi at tiscali dot it>)
michael
parents:
12760
diff
changeset
|
303 #endif |
28380
f521e54d47ee
Add support for libavcodec GMC flag, patch by Dave Baker, dbkr mxtelecom com.
diego
parents:
28360
diff
changeset
|
304 #ifdef CODEC_FLAG_GMC |
f521e54d47ee
Add support for libavcodec GMC flag, patch by Dave Baker, dbkr mxtelecom com.
diego
parents:
28360
diff
changeset
|
305 {"gmc", &lavc_param_gmc, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_GMC, NULL}, |
f521e54d47ee
Add support for libavcodec GMC flag, patch by Dave Baker, dbkr mxtelecom com.
diego
parents:
28360
diff
changeset
|
306 #endif |
12765 | 307 {"dc", &lavc_param_dc_precision, CONF_TYPE_INT, CONF_RANGE, 8, 11, NULL}, |
15368 | 308 {"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
|
309 {"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
|
310 {"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
|
311 {"top", &lavc_param_top, CONF_TYPE_INT, CONF_RANGE, -1, 1, NULL}, |
11910 | 312 {"qns", &lavc_param_qns, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL}, |
12542 | 313 {"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
|
314 {"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
|
315 {"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
|
316 {"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
|
317 {"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
|
318 {"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
|
319 {"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
|
320 {"bidir_refine", &lavc_param_bidir_refine, CONF_TYPE_INT, CONF_RANGE, 0, 4, NULL}, |
17464 | 321 {"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
|
322 {"vglobal", &lavc_param_video_global_header, CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL}, |
17842 | 323 {"aglobal", &lavc_param_audio_global_header, CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL}, |
18489 | 324 {"mv0_threshold", &lavc_param_mv0_threshold, CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL}, |
18569 | 325 {"refs", &lavc_param_refs, CONF_TYPE_INT, CONF_RANGE, 1, 16, NULL}, |
18572 | 326 {"b_sensitivity", &lavc_param_b_sensitivity, CONF_TYPE_INT, CONF_RANGE, 1, INT_MAX, NULL}, |
23209 | 327 {"level", &lavc_param_level, CONF_TYPE_INT, CONF_RANGE, INT_MIN, INT_MAX, NULL}, |
26693 | 328 {"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
|
329 {"audio_o", &lavc_param_audio_avopt, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
5550 | 330 {NULL, NULL, 0, 0, 0, 0, NULL} |
331 }; | |
332 | |
333 struct vf_priv_s { | |
8585 | 334 muxer_stream_t* mux; |
7444 | 335 AVCodecContext *context; |
8413 | 336 AVFrame *pic; |
5550 | 337 AVCodec *codec; |
7088 | 338 FILE *stats_file; |
5550 | 339 }; |
340 | |
7088 | 341 #define stats_file (vf->priv->stats_file) |
5550 | 342 #define mux_v (vf->priv->mux) |
343 #define lavc_venc_context (vf->priv->context) | |
344 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
345 static int encode_frame(struct vf_instance *vf, AVFrame *pic, double pts); |
14080 | 346 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
347 static int config(struct vf_instance *vf, |
5550 | 348 int width, int height, int d_width, int d_height, |
349 unsigned int flags, unsigned int outfmt){ | |
7088 | 350 int size, i; |
29674 | 351 char *p; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
352 |
5550 | 353 mux_v->bih->biWidth=width; |
354 mux_v->bih->biHeight=height; | |
355 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8); | |
356 | |
17355 | 357 mp_msg(MSGT_MENCODER, MSGL_INFO,"videocodec: libavcodec (%dx%d fourcc=%x [%.4s])\n", |
5550 | 358 mux_v->bih->biWidth, mux_v->bih->biHeight, mux_v->bih->biCompression, |
359 (char *)&mux_v->bih->biCompression); | |
360 | |
7444 | 361 lavc_venc_context->width = width; |
362 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
|
363 if (lavc_param_vbitrate > 16000) /* != -1 */ |
7444 | 364 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
|
365 else if (lavc_param_vbitrate >= 0) /* != -1 */ |
7444 | 366 lavc_venc_context->bit_rate = lavc_param_vbitrate*1000; |
5550 | 367 else |
7444 | 368 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
|
369 |
19360
d4d72e5eea07
pass average bitrate from encoder to (lavf) muxer
michael
parents:
19073
diff
changeset
|
370 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
|
371 |
7444 | 372 lavc_venc_context->bit_rate_tolerance= lavc_param_vrate_tolerance*1000; |
15307 | 373 lavc_venc_context->time_base= (AVRational){mux_v->h.dwScale, mux_v->h.dwRate}; |
7444 | 374 lavc_venc_context->qmin= lavc_param_vqmin; |
375 lavc_venc_context->qmax= lavc_param_vqmax; | |
11032 | 376 lavc_venc_context->lmin= (int)(FF_QP2LAMBDA * lavc_param_lmin + 0.5); |
377 lavc_venc_context->lmax= (int)(FF_QP2LAMBDA * lavc_param_lmax + 0.5); | |
20756 | 378 lavc_venc_context->mb_lmin= (int)(FF_QP2LAMBDA * lavc_param_mb_lmin + 0.5); |
379 lavc_venc_context->mb_lmax= (int)(FF_QP2LAMBDA * lavc_param_mb_lmax + 0.5); | |
7444 | 380 lavc_venc_context->max_qdiff= lavc_param_vqdiff; |
381 lavc_venc_context->qcompress= lavc_param_vqcompress; | |
382 lavc_venc_context->qblur= lavc_param_vqblur; | |
383 lavc_venc_context->max_b_frames= lavc_param_vmax_b_frames; | |
384 lavc_venc_context->b_quant_factor= lavc_param_vb_qfactor; | |
385 lavc_venc_context->rc_strategy= lavc_param_vrc_strategy; | |
386 lavc_venc_context->b_frame_strategy= lavc_param_vb_strategy; | |
14786 | 387 lavc_venc_context->b_quant_offset= (int)(FF_QP2LAMBDA * lavc_param_vb_qoffset + 0.5); |
7444 | 388 lavc_venc_context->luma_elim_threshold= lavc_param_luma_elim_threshold; |
389 lavc_venc_context->chroma_elim_threshold= lavc_param_chroma_elim_threshold; | |
390 lavc_venc_context->rtp_payload_size= lavc_param_packet_size; | |
391 lavc_venc_context->strict_std_compliance= lavc_param_strict; | |
392 lavc_venc_context->i_quant_factor= lavc_param_vi_qfactor; | |
14786 | 393 lavc_venc_context->i_quant_offset= (int)(FF_QP2LAMBDA * lavc_param_vi_qoffset + 0.5); |
7444 | 394 lavc_venc_context->rc_qsquish= lavc_param_rc_qsquish; |
395 lavc_venc_context->rc_qmod_amp= lavc_param_rc_qmod_amp; | |
396 lavc_venc_context->rc_qmod_freq= lavc_param_rc_qmod_freq; | |
397 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
|
398 |
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
|
399 mux_v->max_rate= |
7444 | 400 lavc_venc_context->rc_max_rate= lavc_param_rc_max_rate*1000; |
401 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
|
402 |
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
|
403 mux_v->vbv_size= |
7444 | 404 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
|
405 |
15781 | 406 lavc_venc_context->rc_initial_buffer_occupancy= |
407 lavc_venc_context->rc_buffer_size * | |
408 lavc_param_rc_initial_buffer_occupancy; | |
7444 | 409 lavc_venc_context->rc_buffer_aggressivity= lavc_param_rc_buffer_aggressivity; |
410 lavc_venc_context->rc_initial_cplx= lavc_param_rc_initial_cplx; | |
8341 | 411 lavc_venc_context->debug= lavc_param_debug; |
8695 | 412 lavc_venc_context->last_predictor_count= lavc_param_last_pred; |
8709 | 413 lavc_venc_context->pre_me= lavc_param_pre_me; |
8803 | 414 lavc_venc_context->me_pre_cmp= lavc_param_me_pre_cmp; |
415 lavc_venc_context->pre_dia_size= lavc_param_pre_dia_size; | |
416 lavc_venc_context->me_subpel_quality= lavc_param_me_subpel_quality; | |
9508 | 417 lavc_venc_context->me_range= lavc_param_me_range; |
9645 | 418 lavc_venc_context->intra_quant_bias= lavc_param_ibias; |
419 lavc_venc_context->inter_quant_bias= lavc_param_pbias; | |
10291 | 420 lavc_venc_context->coder_type= lavc_param_coder; |
421 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
|
422 lavc_venc_context->scenechange_threshold= lavc_param_sc_threshold; |
11363 | 423 lavc_venc_context->noise_reduction= lavc_param_noise_reduction; |
11910 | 424 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
|
425 lavc_venc_context->inter_threshold= lavc_param_inter_threshold; |
12542 | 426 lavc_venc_context->nsse_weight= lavc_param_nssew; |
23953
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
427 lavc_venc_context->frame_skip_threshold= lavc_param_skip_threshold; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
428 lavc_venc_context->frame_skip_factor= lavc_param_skip_factor; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
429 lavc_venc_context->frame_skip_exp= lavc_param_skip_exp; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
430 lavc_venc_context->frame_skip_cmp= lavc_param_skip_cmp; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
431 |
10779 | 432 if (lavc_param_intra_matrix) |
433 { | |
434 char *tmp; | |
435 | |
436 lavc_venc_context->intra_matrix = | |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
437 av_malloc(sizeof(*lavc_venc_context->intra_matrix)*64); |
10779 | 438 |
439 i = 0; | |
440 while ((tmp = strsep(&lavc_param_intra_matrix, ",")) && (i < 64)) | |
441 { | |
442 if (!tmp || (tmp && !strlen(tmp))) | |
443 break; | |
444 lavc_venc_context->intra_matrix[i++] = atoi(tmp); | |
445 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
446 |
10779 | 447 if (i != 64) |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
448 av_freep(&lavc_venc_context->intra_matrix); |
10779 | 449 else |
450 mp_msg(MSGT_MENCODER, MSGL_V, "Using user specified intra matrix\n"); | |
451 } | |
452 if (lavc_param_inter_matrix) | |
453 { | |
454 char *tmp; | |
455 | |
456 lavc_venc_context->inter_matrix = | |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
457 av_malloc(sizeof(*lavc_venc_context->inter_matrix)*64); |
10779 | 458 |
459 i = 0; | |
460 while ((tmp = strsep(&lavc_param_inter_matrix, ",")) && (i < 64)) | |
461 { | |
462 if (!tmp || (tmp && !strlen(tmp))) | |
463 break; | |
464 lavc_venc_context->inter_matrix[i++] = atoi(tmp); | |
465 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
466 |
10779 | 467 if (i != 64) |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
468 av_freep(&lavc_venc_context->inter_matrix); |
10779 | 469 else |
470 mp_msg(MSGT_MENCODER, MSGL_V, "Using user specified inter matrix\n"); | |
471 } | |
9508 | 472 |
7088 | 473 p= lavc_param_rc_override_string; |
474 for(i=0; p; i++){ | |
475 int start, end, q; | |
476 int e=sscanf(p, "%d,%d,%d", &start, &end, &q); | |
477 if(e!=3){ | |
478 mp_msg(MSGT_MENCODER,MSGL_ERR,"error parsing vrc_q\n"); | |
479 return 0; | |
480 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
481 lavc_venc_context->rc_override= |
7444 | 482 realloc(lavc_venc_context->rc_override, sizeof(RcOverride)*(i+1)); |
483 lavc_venc_context->rc_override[i].start_frame= start; | |
484 lavc_venc_context->rc_override[i].end_frame = end; | |
7088 | 485 if(q>0){ |
7444 | 486 lavc_venc_context->rc_override[i].qscale= q; |
487 lavc_venc_context->rc_override[i].quality_factor= 1.0; | |
7088 | 488 } |
489 else{ | |
7444 | 490 lavc_venc_context->rc_override[i].qscale= 0; |
491 lavc_venc_context->rc_override[i].quality_factor= -q/100.0; | |
7088 | 492 } |
493 p= strchr(p, '/'); | |
494 if(p) p++; | |
495 } | |
7444 | 496 lavc_venc_context->rc_override_count=i; |
7088 | 497 |
7444 | 498 lavc_venc_context->mpeg_quant=lavc_param_mpeg_quant; |
7152 | 499 |
7444 | 500 lavc_venc_context->dct_algo= lavc_param_fdct; |
7564 | 501 lavc_venc_context->idct_algo= lavc_param_idct; |
7152 | 502 |
7490 | 503 lavc_venc_context->lumi_masking= lavc_param_lumi_masking; |
504 lavc_venc_context->temporal_cplx_masking= lavc_param_temporal_cplx_masking; | |
505 lavc_venc_context->spatial_cplx_masking= lavc_param_spatial_cplx_masking; | |
506 lavc_venc_context->p_masking= lavc_param_p_masking; | |
7496 | 507 lavc_venc_context->dark_masking= lavc_param_dark_masking; |
15368 | 508 lavc_venc_context->border_masking = lavc_param_border_masking; |
7490 | 509 |
8237 | 510 if (lavc_param_aspect != NULL) |
7389
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
511 { |
8237 | 512 int par_width, par_height, e; |
513 float ratio=0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
514 |
8237 | 515 e= sscanf (lavc_param_aspect, "%d/%d", &par_width, &par_height); |
516 if(e==2){ | |
517 if(par_height) | |
518 ratio= (float)par_width / (float)par_height; | |
519 }else{ | |
520 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
|
521 } |
8237 | 522 |
523 if (e && ratio > 0.1 && ratio < 10.0) { | |
11195
9bfd1b5d38cd
mpeg4 has only 8bit per numerator and denominator ...
michael
parents:
11194
diff
changeset
|
524 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
|
525 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
|
526 lavc_venc_context->sample_aspect_ratio.num, |
9bfd1b5d38cd
mpeg4 has only 8bit per numerator and denominator ...
michael
parents:
11194
diff
changeset
|
527 lavc_venc_context->sample_aspect_ratio.den); |
12061 | 528 mux_v->aspect = ratio; |
8237 | 529 mp_dbg(MSGT_MENCODER, MSGL_DBG2, "aspect_ratio: %f\n", ratio); |
530 } else { | |
531 mp_dbg(MSGT_MENCODER, MSGL_ERR, "aspect ratio: cannot parse \"%s\"\n", lavc_param_aspect); | |
532 return 0; | |
7389
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
533 } |
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
534 } |
13669
8f12e583f50b
10l...autoaspect was always applied to muxer aspect if using newer libavcodec...hope this is ok
rfelker
parents:
13406
diff
changeset
|
535 else if (lavc_param_autoaspect) { |
11369 | 536 lavc_venc_context->sample_aspect_ratio = av_d2q((float)d_width/d_height*height / width, 255); |
12061 | 537 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
|
538 } |
7389
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
539 |
5550 | 540 /* keyframe interval */ |
541 if (lavc_param_keyint >= 0) /* != -1 */ | |
7444 | 542 lavc_venc_context->gop_size = lavc_param_keyint; |
5550 | 543 else |
7444 | 544 lavc_venc_context->gop_size = 250; /* default */ |
5550 | 545 |
10498 | 546 lavc_venc_context->flags = 0; |
547 if (lavc_param_mb_decision) | |
5550 | 548 { |
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
|
549 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_MPCODECS_HighQualityEncodingSelected); |
10498 | 550 lavc_venc_context->mb_decision= lavc_param_mb_decision; |
5550 | 551 } |
552 | |
8587 | 553 lavc_venc_context->me_cmp= lavc_param_me_cmp; |
554 lavc_venc_context->me_sub_cmp= lavc_param_me_sub_cmp; | |
555 lavc_venc_context->mb_cmp= lavc_param_mb_cmp; | |
11753 | 556 #ifdef FF_CMP_VSAD |
557 lavc_venc_context->ildct_cmp= lavc_param_ildct_cmp; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
558 #endif |
8587 | 559 lavc_venc_context->dia_size= lavc_param_dia_size; |
560 lavc_venc_context->flags|= lavc_param_qpel; | |
27516
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
561 lavc_venc_context->trellis = lavc_param_trell; |
24329 | 562 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
|
563 lavc_venc_context->flags|= lavc_param_bit_exact; |
9536 | 564 lavc_venc_context->flags|= lavc_param_aic; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
565 lavc_venc_context->flags|= lavc_param_aiv; |
9536 | 566 lavc_venc_context->flags|= lavc_param_umv; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
567 lavc_venc_context->flags|= lavc_param_obmc; |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
568 lavc_venc_context->flags|= lavc_param_loop; |
7444 | 569 lavc_venc_context->flags|= lavc_param_v4mv ? CODEC_FLAG_4MV : 0; |
570 lavc_venc_context->flags|= lavc_param_data_partitioning; | |
10963 | 571 lavc_venc_context->flags|= lavc_param_cbp; |
10974 | 572 lavc_venc_context->flags|= lavc_param_mv0; |
11445 | 573 lavc_venc_context->flags|= lavc_param_qp_rd; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
574 lavc_venc_context->flags|= lavc_param_ss; |
11702 | 575 lavc_venc_context->flags|= lavc_param_alt; |
576 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
|
577 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
|
578 #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
|
579 lavc_venc_context->flags|= lavc_param_closed_gop; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
580 #endif |
26395 | 581 if(lavc_param_gray) lavc_venc_context->flags|= CODEC_FLAG_GRAY; |
6461 | 582 |
7490 | 583 if(lavc_param_normalize_aqp) lavc_venc_context->flags|= CODEC_FLAG_NORMALIZE_AQP; |
7504 | 584 if(lavc_param_interlaced_dct) lavc_venc_context->flags|= CODEC_FLAG_INTERLACED_DCT; |
8347 | 585 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
|
586 lavc_venc_context->intra_dc_precision = lavc_param_dc_precision - 8; |
8190 | 587 lavc_venc_context->prediction_method= lavc_param_prediction_method; |
17243
67ce2e4206ea
support downscaling frames for dynamic b frame decission
gpoirier
parents:
17063
diff
changeset
|
588 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
|
589 lavc_venc_context->bidir_refine = lavc_param_bidir_refine; |
17464 | 590 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
|
591 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
|
592 /*|| (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
|
593 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
|
594 } |
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
|
595 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
|
596 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
|
597 } |
18489 | 598 lavc_venc_context->mv0_threshold = lavc_param_mv0_threshold; |
18569 | 599 lavc_venc_context->refs = lavc_param_refs; |
18572 | 600 lavc_venc_context->b_sensitivity = lavc_param_b_sensitivity; |
23209 | 601 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
|
602 |
26693 | 603 if(lavc_param_avopt){ |
604 if(parse_avopts(lavc_venc_context, lavc_param_avopt) < 0){ | |
605 mp_msg(MSGT_MENCODER,MSGL_ERR, "Your options /%s/ look like gibberish to me pal\n", lavc_param_avopt); | |
606 return 0; | |
607 } | |
608 } | |
609 | |
23309
af2f1099072f
Pass imgfmt from lavc encoder to lavf muxer (this is needed for dv).
corey
parents:
23288
diff
changeset
|
610 mux_v->imgfmt = lavc_param_format; |
30312
54e9eb2664a7
Reuse the fmt-conversion code instead of duplicating the functionality.
reimar
parents:
29793
diff
changeset
|
611 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
|
612 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
|
613 return 0; |
10302 | 614 |
10848
5844bf004dec
2pass stats curruption fix by ("Johannes E. Schindelin" <Johannes dot Schindelin at gmx dot de>)
michael
parents:
10779
diff
changeset
|
615 if(!stats_file) { |
5778 | 616 /* lavc internal 2pass bitrate control */ |
6673 | 617 switch(lavc_param_vpass){ |
7088 | 618 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
|
619 case 3: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
620 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
|
621 stats_file= fopen(passtmpfile, "rb"); |
7088 | 622 if(stats_file==NULL){ |
623 mp_msg(MSGT_MENCODER,MSGL_ERR,"2pass failed: filename=%s\n", passtmpfile); | |
624 return 0; | |
625 } | |
626 fseek(stats_file, 0, SEEK_END); | |
627 size= ftell(stats_file); | |
628 fseek(stats_file, 0, SEEK_SET); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
629 |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
630 lavc_venc_context->stats_in= av_malloc(size + 1); |
7444 | 631 lavc_venc_context->stats_in[size]=0; |
7088 | 632 |
7444 | 633 if(fread(lavc_venc_context->stats_in, size, 1, stats_file)<1){ |
7088 | 634 mp_msg(MSGT_MENCODER,MSGL_ERR,"2pass failed: reading from filename=%s\n", passtmpfile); |
635 return 0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
636 } |
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
|
637 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
|
638 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
|
639 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
|
640 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
|
641 /* fall through */ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
642 case 1: |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
643 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
|
644 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
|
645 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
|
646 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
|
647 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
|
648 } |
13406
2f69854dfbe4
10l: Make turbo mode compatible with 3-pass encoding
gpoirier
parents:
13386
diff
changeset
|
649 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
|
650 /* 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
|
651 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
|
652 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
|
653 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
|
654 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
|
655 |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
656 /* Disables diamond motion estimation */ |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
657 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
|
658 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
|
659 |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
660 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
|
661 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
|
662 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
|
663 |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
664 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
|
665 lavc_venc_context->flags &= ~CODEC_FLAG_4MV; |
27516
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
666 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
|
667 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
|
668 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
|
669 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
|
670 } |
7088 | 671 break; |
6673 | 672 } |
10848
5844bf004dec
2pass stats curruption fix by ("Johannes E. Schindelin" <Johannes dot Schindelin at gmx dot de>)
michael
parents:
10779
diff
changeset
|
673 } |
5778 | 674 |
7444 | 675 lavc_venc_context->me_method = ME_ZERO+lavc_param_vme; |
5550 | 676 |
677 /* fixed qscale :p */ | |
18569 | 678 if (lavc_param_vqscale >= 0.0) |
5550 | 679 { |
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
|
680 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_MPCODECS_UsingConstantQscale, lavc_param_vqscale); |
7444 | 681 lavc_venc_context->flags |= CODEC_FLAG_QSCALE; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
682 lavc_venc_context->global_quality= |
11032 | 683 vf->priv->pic->quality = (int)(FF_QP2LAMBDA * lavc_param_vqscale + 0.5); |
5550 | 684 } |
19073
8b52dad54b1d
Remove #if LIBAVCODEC_BUILD >= XXX and #if LIBAVFORMAT_BUILD >= XXX jungle.
diego
parents:
18976
diff
changeset
|
685 |
33027
55de45e1d943
Do not use deprecated avcodec_thread_init, it is broken and does nothing currently.
reimar
parents:
32943
diff
changeset
|
686 lavc_venc_context->thread_count = lavc_param_threads; |
33028 | 687 lavc_venc_context->thread_type = FF_THREAD_FRAME | FF_THREAD_SLICE; |
5550 | 688 |
7444 | 689 if (avcodec_open(lavc_venc_context, vf->priv->codec) != 0) { |
5550 | 690 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CantOpenCodec); |
691 return 0; | |
692 } | |
693 | |
7444 | 694 if (lavc_venc_context->codec->encode == NULL) { |
5550 | 695 mp_msg(MSGT_MENCODER,MSGL_ERR,"avcodec init failed (ctx->codec->encode == NULL)!\n"); |
696 return 0; | |
697 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
698 |
7088 | 699 /* free second pass buffer, its not needed anymore */ |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
700 av_freep(&lavc_venc_context->stats_in); |
27516
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
701 if(lavc_venc_context->bits_per_coded_sample) |
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
702 mux_v->bih->biBitCount= lavc_venc_context->bits_per_coded_sample; |
8190 | 703 if(lavc_venc_context->extradata_size){ |
32105 | 704 mux_v->bih= realloc(mux_v->bih, sizeof(*mux_v->bih) + lavc_venc_context->extradata_size); |
8190 | 705 memcpy(mux_v->bih + 1, lavc_venc_context->extradata, lavc_venc_context->extradata_size); |
32105 | 706 mux_v->bih->biSize= sizeof(*mux_v->bih) + lavc_venc_context->extradata_size; |
8190 | 707 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
708 |
17659 | 709 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
|
710 |
5550 | 711 return 1; |
712 } | |
713 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
714 static int control(struct vf_instance *vf, int request, void* data){ |
5550 | 715 |
14080 | 716 switch(request){ |
717 case VFCTRL_FLUSH_FRAMES: | |
718 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
|
719 while(encode_frame(vf, NULL, MP_NOPTS_VALUE) > 0); |
14080 | 720 return CONTROL_TRUE; |
721 default: | |
722 return CONTROL_UNKNOWN; | |
723 } | |
5550 | 724 } |
725 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
726 static int query_format(struct vf_instance *vf, unsigned int fmt){ |
5550 | 727 switch(fmt){ |
728 case IMGFMT_YV12: | |
729 case IMGFMT_IYUV: | |
730 case IMGFMT_I420: | |
10778 | 731 if(lavc_param_format == IMGFMT_YV12) |
8190 | 732 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
733 break; | |
10293 | 734 case IMGFMT_411P: |
10778 | 735 if(lavc_param_format == IMGFMT_411P) |
10293 | 736 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
737 break; | |
8190 | 738 case IMGFMT_422P: |
10778 | 739 if(lavc_param_format == IMGFMT_422P) |
8190 | 740 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
741 break; | |
10293 | 742 case IMGFMT_444P: |
10778 | 743 if(lavc_param_format == IMGFMT_444P) |
10293 | 744 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
745 break; | |
746 case IMGFMT_YVU9: | |
10778 | 747 if(lavc_param_format == IMGFMT_YVU9) |
10293 | 748 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
749 break; | |
10302 | 750 case IMGFMT_BGR32: |
10778 | 751 if(lavc_param_format == IMGFMT_BGR32) |
10302 | 752 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
753 break; | |
5550 | 754 } |
755 return 0; | |
756 } | |
757 | |
8347 | 758 static double psnr(double d){ |
759 if(d==0) return INFINITY; | |
760 return -10.0*log(d)/log(10); | |
761 } | |
762 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
763 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){ |
8413 | 764 AVFrame *pic= vf->priv->pic; |
5550 | 765 |
8339 | 766 pic->data[0]=mpi->planes[0]; |
767 pic->data[1]=mpi->planes[1]; | |
768 pic->data[2]=mpi->planes[2]; | |
769 pic->linesize[0]=mpi->stride[0]; | |
770 pic->linesize[1]=mpi->stride[1]; | |
771 pic->linesize[2]=mpi->stride[2]; | |
32477 | 772 pic->pict_type = is_forced_key_frame(pts) ? FF_I_TYPE : 0; |
5550 | 773 |
11672
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
774 if(lavc_param_interlaced_dct){ |
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
775 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
|
776 pic->top_field_first= !!(mpi->fields & MP_IMGFIELD_TOP_FIRST); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
777 else |
11672
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
778 pic->top_field_first= 1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
779 |
11672
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
780 if(lavc_param_top!=-1) |
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
781 pic->top_field_first= lavc_param_top; |
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
782 } |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
783 |
26754
63630c09e237
cosmetics: Remove pointless parentheses from return calls.
diego
parents:
26693
diff
changeset
|
784 return encode_frame(vf, pic, pts) >= 0; |
14080 | 785 } |
786 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
787 static int encode_frame(struct vf_instance *vf, AVFrame *pic, double pts){ |
14080 | 788 const char pict_type_char[5]= {'?', 'I', 'P', 'B', 'S'}; |
789 int out_size; | |
17907 | 790 double dts; |
14080 | 791 |
23954 | 792 if(pts == MP_NOPTS_VALUE) |
793 pts= lavc_venc_context->frame_number * av_q2d(lavc_venc_context->time_base); | |
794 | |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17886
diff
changeset
|
795 if(pic){ |
17909 | 796 #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
|
797 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
|
798 memcpy(pic->opaque, &pts, sizeof(pts)); |
17909 | 799 #else |
800 if(pts != MP_NOPTS_VALUE) | |
801 pic->pts= floor(pts / av_q2d(lavc_venc_context->time_base) + 0.5); | |
802 else | |
803 pic->pts= MP_NOPTS_VALUE; | |
804 #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
|
805 } |
7444 | 806 out_size = avcodec_encode_video(lavc_venc_context, mux_v->buffer, mux_v->buffer_size, |
8339 | 807 pic); |
5550 | 808 |
32841
f698af71f514
For codecs that produce no data on the first pass, e.g.
ranma
parents:
32768
diff
changeset
|
809 /* 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
|
810 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
|
811 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
|
812 /* 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
|
813 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
|
814 } |
32841
f698af71f514
For codecs that produce no data on the first pass, e.g.
ranma
parents:
32768
diff
changeset
|
815 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
816 if(pts != MP_NOPTS_VALUE) |
17907 | 817 dts= pts - lavc_venc_context->delay * av_q2d(lavc_venc_context->time_base); |
818 else | |
819 dts= MP_NOPTS_VALUE; | |
17909 | 820 #if 0 |
17907 | 821 pts= lavc_venc_context->coded_frame->opaque ? |
822 *(double*)lavc_venc_context->coded_frame->opaque | |
823 : MP_NOPTS_VALUE; | |
17909 | 824 #else |
825 if(lavc_venc_context->coded_frame->pts != MP_NOPTS_VALUE) | |
826 pts= lavc_venc_context->coded_frame->pts * av_q2d(lavc_venc_context->time_base); | |
827 else | |
828 pts= MP_NOPTS_VALUE; | |
829 assert(MP_NOPTS_VALUE == AV_NOPTS_VALUE); | |
830 #endif | |
831 //fprintf(stderr, "ve_lavc %f/%f\n", dts, pts); | |
23953
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
832 if(out_size == 0 && lavc_param_skip_threshold==0 && lavc_param_skip_factor==0){ |
17659 | 833 ++mux_v->encoder_delay; |
14080 | 834 return 0; |
17659 | 835 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
836 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
837 muxer_write_chunk(mux_v,out_size,lavc_venc_context->coded_frame->key_frame?0x10:0, |
17907 | 838 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
|
839 free(lavc_venc_context->coded_frame->opaque); |
17907 | 840 lavc_venc_context->coded_frame->opaque= NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
841 |
8347 | 842 /* store psnr / pict size / type / qscale */ |
843 if(lavc_param_psnr){ | |
844 static FILE *fvstats=NULL; | |
845 char filename[20]; | |
846 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
|
847 double quality=0.0; |
9868 | 848 int8_t *q; |
8347 | 849 |
850 if(!fvstats) { | |
851 time_t today2; | |
852 struct tm *today; | |
853 today2 = time(NULL); | |
854 today = localtime(&today2); | |
855 sprintf(filename, "psnr_%02d%02d%02d.log", today->tm_hour, | |
856 today->tm_min, today->tm_sec); | |
857 fvstats = fopen(filename,"w"); | |
858 if(!fvstats) { | |
859 perror("fopen"); | |
860 lavc_param_psnr=0; // disable block | |
12983 | 861 mp_msg(MSGT_MENCODER,MSGL_ERR,"Can't open %s for writing. Check its permissions.\n",filename); |
14080 | 862 return -1; |
8347 | 863 /*exit(1);*/ |
864 } | |
865 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
866 |
9865
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
867 // average MB quantizer |
9868 | 868 q = lavc_venc_context->coded_frame->qscale_table; |
869 if(q) { | |
9865
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
870 int x, y; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
871 int w = (lavc_venc_context->width+15) >> 4; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
872 int h = (lavc_venc_context->height+15) >> 4; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
873 for( y = 0; y < h; y++ ) { |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
874 for( x = 0; x < w; x++ ) |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
875 quality += (double)*(q+x); |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
876 q += lavc_venc_context->coded_frame->qstride; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
877 } |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
878 quality /= w * h; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
879 } else |
11032 | 880 quality = lavc_venc_context->coded_frame->quality / (float)FF_QP2LAMBDA; |
8347 | 881 |
882 fprintf(fvstats, "%6d, %2.2f, %6d, %2.2f, %2.2f, %2.2f, %2.2f %c\n", | |
8413 | 883 lavc_venc_context->coded_frame->coded_picture_number, |
9865
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
884 quality, |
8347 | 885 out_size, |
8413 | 886 psnr(lavc_venc_context->coded_frame->error[0]/f), |
887 psnr(lavc_venc_context->coded_frame->error[1]*4/f), | |
888 psnr(lavc_venc_context->coded_frame->error[2]*4/f), | |
889 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)), | |
890 pict_type_char[lavc_venc_context->coded_frame->pict_type] | |
8347 | 891 ); |
892 } | |
14080 | 893 return out_size; |
5550 | 894 } |
895 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
896 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
|
897 |
8347 | 898 if(lavc_param_psnr){ |
899 double f= lavc_venc_context->width*lavc_venc_context->height*255.0*255.0; | |
8413 | 900 f*= lavc_venc_context->coded_frame->coded_picture_number; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
901 |
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
|
902 mp_msg(MSGT_MENCODER, MSGL_INFO, "PSNR: Y:%2.2f, Cb:%2.2f, Cr:%2.2f, All:%2.2f\n", |
8347 | 903 psnr(lavc_venc_context->error[0]/f), |
904 psnr(lavc_venc_context->error[1]*4/f), | |
905 psnr(lavc_venc_context->error[2]*4/f), | |
906 psnr((lavc_venc_context->error[0]+lavc_venc_context->error[1]+lavc_venc_context->error[2])/(f*1.5)) | |
907 ); | |
908 } | |
909 | |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
910 av_freep(&lavc_venc_context->intra_matrix); |
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
911 av_freep(&lavc_venc_context->inter_matrix); |
10779 | 912 |
29793
e19b989877c6
Only call avcodec_close if the open succeeded before, otherwise avcodec_close
reimar
parents:
29674
diff
changeset
|
913 if (lavc_venc_context->codec) |
e19b989877c6
Only call avcodec_close if the open succeeded before, otherwise avcodec_close
reimar
parents:
29674
diff
changeset
|
914 avcodec_close(lavc_venc_context); |
7088 | 915 |
916 if(stats_file) fclose(stats_file); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
917 |
7088 | 918 /* free rc_override */ |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
919 av_freep(&lavc_venc_context->rc_override); |
7444 | 920 |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
921 av_freep(&vf->priv->context); |
5551 | 922 } |
923 | |
5550 | 924 //===========================================================================// |
925 | |
926 static int vf_open(vf_instance_t *vf, char* args){ | |
5551 | 927 vf->uninit=uninit; |
5550 | 928 vf->config=config; |
14878 | 929 vf->default_caps=VFCAP_CONSTANT; |
5550 | 930 vf->control=control; |
931 vf->query_format=query_format; | |
932 vf->put_image=put_image; | |
32103 | 933 vf->priv=calloc(1, sizeof(struct vf_priv_s)); |
8585 | 934 vf->priv->mux=(muxer_stream_t*)args; |
5550 | 935 |
5977
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
936 /* 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
|
937 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
|
938 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
|
939 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
|
940 { |
32105 | 941 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+28); |
942 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
|
943 } |
14057 | 944 else if (lavc_param_vcodec && (!strcasecmp(lavc_param_vcodec, "huffyuv") |
945 || !strcasecmp(lavc_param_vcodec, "ffvhuff"))) | |
8190 | 946 { |
947 /* XXX: hack: huffyuv needs to store huffman tables (allthough we dunno the size yet ...) */ | |
32105 | 948 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+1000); |
949 mux_v->bih->biSize=sizeof(*mux_v->bih)+1000; | |
8190 | 950 } |
10131 | 951 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "asv1")) |
952 { | |
32105 | 953 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+8); |
954 mux_v->bih->biSize=sizeof(*mux_v->bih)+8; | |
10131 | 955 } |
10777 | 956 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "asv2")) |
957 { | |
32105 | 958 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+8); |
959 mux_v->bih->biSize=sizeof(*mux_v->bih)+8; | |
10777 | 960 } |
8587 | 961 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "wmv2")) |
962 { | |
32105 | 963 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+4); |
964 mux_v->bih->biSize=sizeof(*mux_v->bih)+4; | |
8587 | 965 } |
5977
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
966 else |
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
967 { |
32105 | 968 mux_v->bih=calloc(1, sizeof(*mux_v->bih)); |
969 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
|
970 } |
5550 | 971 mux_v->bih->biWidth=0; |
972 mux_v->bih->biHeight=0; | |
973 mux_v->bih->biPlanes=1; | |
974 mux_v->bih->biBitCount=24; | |
975 if (!lavc_param_vcodec) | |
976 { | |
5977
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
977 printf("No libavcodec codec specified! It's required!\n"); |
5550 | 978 return 0; |
979 } | |
980 | |
981 if (!strcasecmp(lavc_param_vcodec, "mpeg1") || !strcasecmp(lavc_param_vcodec, "mpeg1video")) | |
982 mux_v->bih->biCompression = mmioFOURCC('m', 'p', 'g', '1'); | |
10699 | 983 else if (!strcasecmp(lavc_param_vcodec, "mpeg2") || !strcasecmp(lavc_param_vcodec, "mpeg2video")) |
984 mux_v->bih->biCompression = mmioFOURCC('m', 'p', 'g', '2'); | |
5550 | 985 else if (!strcasecmp(lavc_param_vcodec, "h263") || !strcasecmp(lavc_param_vcodec, "h263p")) |
986 mux_v->bih->biCompression = mmioFOURCC('h', '2', '6', '3'); | |
987 else if (!strcasecmp(lavc_param_vcodec, "rv10")) | |
988 mux_v->bih->biCompression = mmioFOURCC('R', 'V', '1', '0'); | |
989 else if (!strcasecmp(lavc_param_vcodec, "mjpeg")) | |
990 mux_v->bih->biCompression = mmioFOURCC('M', 'J', 'P', 'G'); | |
10302 | 991 else if (!strcasecmp(lavc_param_vcodec, "ljpeg")) |
992 mux_v->bih->biCompression = mmioFOURCC('L', 'J', 'P', 'G'); | |
5550 | 993 else if (!strcasecmp(lavc_param_vcodec, "mpeg4")) |
14766 | 994 mux_v->bih->biCompression = mmioFOURCC('F', 'M', 'P', '4'); |
5550 | 995 else if (!strcasecmp(lavc_param_vcodec, "msmpeg4")) |
996 mux_v->bih->biCompression = mmioFOURCC('d', 'i', 'v', '3'); | |
5972 | 997 else if (!strcasecmp(lavc_param_vcodec, "msmpeg4v2")) |
998 mux_v->bih->biCompression = mmioFOURCC('M', 'P', '4', '2'); | |
6461 | 999 else if (!strcasecmp(lavc_param_vcodec, "wmv1")) |
1000 mux_v->bih->biCompression = mmioFOURCC('W', 'M', 'V', '1'); | |
8587 | 1001 else if (!strcasecmp(lavc_param_vcodec, "wmv2")) |
1002 mux_v->bih->biCompression = mmioFOURCC('W', 'M', 'V', '2'); | |
8190 | 1003 else if (!strcasecmp(lavc_param_vcodec, "huffyuv")) |
1004 mux_v->bih->biCompression = mmioFOURCC('H', 'F', 'Y', 'U'); | |
14057 | 1005 else if (!strcasecmp(lavc_param_vcodec, "ffvhuff")) |
1006 mux_v->bih->biCompression = mmioFOURCC('F', 'F', 'V', 'H'); | |
10131 | 1007 else if (!strcasecmp(lavc_param_vcodec, "asv1")) |
1008 mux_v->bih->biCompression = mmioFOURCC('A', 'S', 'V', '1'); | |
10777 | 1009 else if (!strcasecmp(lavc_param_vcodec, "asv2")) |
1010 mux_v->bih->biCompression = mmioFOURCC('A', 'S', 'V', '2'); | |
10264 | 1011 else if (!strcasecmp(lavc_param_vcodec, "ffv1")) |
1012 mux_v->bih->biCompression = mmioFOURCC('F', 'F', 'V', '1'); | |
13074 | 1013 else if (!strcasecmp(lavc_param_vcodec, "snow")) |
1014 mux_v->bih->biCompression = mmioFOURCC('S', 'N', 'O', 'W'); | |
20419 | 1015 else if (!strcasecmp(lavc_param_vcodec, "flv")) |
1016 mux_v->bih->biCompression = mmioFOURCC('F', 'L', 'V', '1'); | |
23288 | 1017 else if (!strcasecmp(lavc_param_vcodec, "dvvideo")) |
1018 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
|
1019 else if (!strcasecmp(lavc_param_vcodec, "libx264")) |
73e5eb586eb6
make x264 work again after the h264-libx264 renaming
michael
parents:
23957
diff
changeset
|
1020 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
|
1021 else if (!strcasecmp(lavc_param_vcodec, "libschroedinger")) |
b9af28b39daf
Add Dirac video support via libdirac and libschroedinger in libavcodec.
diego
parents:
26754
diff
changeset
|
1022 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
|
1023 else if (!strcasecmp(lavc_param_vcodec, "libdirac")) |
b9af28b39daf
Add Dirac video support via libdirac and libschroedinger in libavcodec.
diego
parents:
26754
diff
changeset
|
1024 mux_v->bih->biCompression = mmioFOURCC('d', 'r', 'a', 'c'); |
32943 | 1025 else if (!strcasecmp(lavc_param_vcodec, "libvpx")) |
1026 mux_v->bih->biCompression = mmioFOURCC('V', 'P', '8', '0'); | |
5550 | 1027 else |
1028 mux_v->bih->biCompression = mmioFOURCC(lavc_param_vcodec[0], | |
1029 lavc_param_vcodec[1], lavc_param_vcodec[2], lavc_param_vcodec[3]); /* FIXME!!! */ | |
1030 | |
31959
f957f330aa6d
Introduce init_avcodec function to avoid duplicated FFmpeg initializations.
diego
parents:
31589
diff
changeset
|
1031 init_avcodec(); |
5550 | 1032 |
1033 vf->priv->codec = (AVCodec *)avcodec_find_encoder_by_name(lavc_param_vcodec); | |
1034 if (!vf->priv->codec) { | |
1035 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_MissingLAVCcodec, lavc_param_vcodec); | |
1036 return 0; | |
1037 } | |
1038 | |
8413 | 1039 vf->priv->pic = avcodec_alloc_frame(); |
7444 | 1040 vf->priv->context = avcodec_alloc_context(); |
32768
3544ba7244bf
Change deprecated PKT_FLAG_KEY, CODEC_TYPE_* and SAMPLE_FMT_* to their
reimar
parents:
32678
diff
changeset
|
1041 vf->priv->context->codec_type = AVMEDIA_TYPE_VIDEO; |
29673
a3cc38ad5878
Set codec_type and codec_id in codec context for lavc encoders.
reimar
parents:
29263
diff
changeset
|
1042 vf->priv->context->codec_id = vf->priv->codec->id; |
7444 | 1043 |
5550 | 1044 return 1; |
1045 } | |
1046 | |
32033 | 1047 const vf_info_t ve_info_lavc = { |
5550 | 1048 "libavcodec encoder", |
1049 "lavc", | |
6673 | 1050 "A'rpi, Alex, Michael", |
5550 | 1051 "for internal use by mencoder", |
1052 vf_open | |
1053 }; | |
1054 | |
1055 //===========================================================================// |