Mercurial > mplayer.hg
annotate libmpcodecs/ve_lavc.c @ 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.
I've verified that this is necessary, without it at normally at least the last stats line is duplicated, it could also happen when we call encode_video more often due to encoder delay as Reimar noted.
Sample encode was with default -ovc lavc -lavcopts vpass=1:
--- pass1stats.log 2011-02-21 15:44:42.314259000 +0100
+++ pass1stats.log.dedup_patch 2011-02-21 15:41:51.262778000 +0100
@@ -6421,4 +6421,3 @@
in:6420 out:6420 type:2 q:239 itex:0 ptex:15905 mv:441 misc:1911 fcode:1 bcode:1 mc-var:989 var:350603 icount:0 skipcount:373 hbits:55;
in:6421 out:6421 type:2 q:247 itex:0 ptex:13020 mv:422 misc:1863 fcode:1 bcode:1 mc-var:953 var:352607 icount:0 skipcount:379 hbits:55;
in:6422 out:6422 type:2 q:252 itex:0 ptex:3162 mv:258 misc:1293 fcode:1 bcode:1 mc-var:837 var:352872 icount:0 skipcount:449 hbits:55;
-in:6422 out:6422 type:2 q:252 itex:0 ptex:3162 mv:258 misc:1293 fcode:1 bcode:1 mc-var:837 var:352872 icount:0 skipcount:449 hbits:55;
author | ranma |
---|---|
date | Mon, 21 Feb 2011 14:52:25 +0000 |
parents | f698af71f514 |
children | d1c2c8899ec1 |
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; | |
8492 | 67 static int lavc_param_mb_qmin = 2; |
68 static int lavc_param_mb_qmax = 31; | |
11032 | 69 static float lavc_param_lmin = 2; |
70 static float lavc_param_lmax = 31; | |
20756 | 71 static float lavc_param_mb_lmin = 2; |
72 static float lavc_param_mb_lmax = 31; | |
5550 | 73 static int lavc_param_vqdiff = 3; |
74 static float lavc_param_vqcompress = 0.5; | |
75 static float lavc_param_vqblur = 0.5; | |
7088 | 76 static float lavc_param_vb_qfactor = 1.25; |
77 static float lavc_param_vb_qoffset = 1.25; | |
78 static float lavc_param_vi_qfactor = 0.8; | |
79 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
|
80 static int lavc_param_vmax_b_frames = 0; |
5550 | 81 static int lavc_param_keyint = -1; |
5778 | 82 static int lavc_param_vpass = 0; |
17886
d526e19c56c3
Support libavcodec vrc_strategy=1 (XviD ratecontrol).
corey
parents:
17842
diff
changeset
|
83 static int lavc_param_vrc_strategy = 0; |
5778 | 84 static int lavc_param_vb_strategy = 0; |
6255
140e94c4c89b
single coefficient elimination disabled by default
michael
parents:
6228
diff
changeset
|
85 static int lavc_param_luma_elim_threshold = 0; |
140e94c4c89b
single coefficient elimination disabled by default
michael
parents:
6228
diff
changeset
|
86 static int lavc_param_chroma_elim_threshold = 0; |
6228
ea6b20e70ac5
new options to support Michael's libavcodec patch, #ifdefed
arpi
parents:
5977
diff
changeset
|
87 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
|
88 static int lavc_param_strict= -1; |
6228
ea6b20e70ac5
new options to support Michael's libavcodec patch, #ifdefed
arpi
parents:
5977
diff
changeset
|
89 static int lavc_param_data_partitioning= 0; |
26395 | 90 static int lavc_param_gray=0; |
7088 | 91 static float lavc_param_rc_qsquish=1.0; |
92 static float lavc_param_rc_qmod_amp=0; | |
93 static int lavc_param_rc_qmod_freq=0; | |
94 static char *lavc_param_rc_override_string=NULL; | |
95 static char *lavc_param_rc_eq="tex^qComp"; | |
96 static int lavc_param_rc_buffer_size=0; | |
97 static float lavc_param_rc_buffer_aggressivity=1.0; | |
98 static int lavc_param_rc_max_rate=0; | |
99 static int lavc_param_rc_min_rate=0; | |
100 static float lavc_param_rc_initial_cplx=0; | |
15988 | 101 static float lavc_param_rc_initial_buffer_occupancy=0.9; |
6944 | 102 static int lavc_param_mpeg_quant=0; |
7152 | 103 static int lavc_param_fdct=0; |
7564 | 104 static int lavc_param_idct=0; |
8237 | 105 static char* lavc_param_aspect = NULL; |
9993
6e7f3643bee6
optional automatic aspect encoding based on d_width and d_height
rfelker
parents:
9868
diff
changeset
|
106 static int lavc_param_autoaspect = 0; |
7490 | 107 static float lavc_param_lumi_masking= 0.0; |
7496 | 108 static float lavc_param_dark_masking= 0.0; |
7490 | 109 static float lavc_param_temporal_cplx_masking= 0.0; |
110 static float lavc_param_spatial_cplx_masking= 0.0; | |
111 static float lavc_param_p_masking= 0.0; | |
15368 | 112 static float lavc_param_border_masking= 0.0; |
7490 | 113 static int lavc_param_normalize_aqp= 0; |
7504 | 114 static int lavc_param_interlaced_dct= 0; |
8190 | 115 static int lavc_param_prediction_method= FF_PRED_LEFT; |
10778 | 116 static int lavc_param_format= IMGFMT_YV12; |
8341 | 117 static int lavc_param_debug= 0; |
8347 | 118 static int lavc_param_psnr= 0; |
8803 | 119 static int lavc_param_me_pre_cmp= 0; |
8587 | 120 static int lavc_param_me_cmp= 0; |
121 static int lavc_param_me_sub_cmp= 0; | |
122 static int lavc_param_mb_cmp= 0; | |
11753 | 123 #ifdef FF_CMP_VSAD |
124 static int lavc_param_ildct_cmp= FF_CMP_VSAD; | |
125 #endif | |
8803 | 126 static int lavc_param_pre_dia_size= 0; |
8587 | 127 static int lavc_param_dia_size= 0; |
128 static int lavc_param_qpel= 0; | |
8684 | 129 static int lavc_param_trell= 0; |
24329 | 130 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
|
131 static int lavc_param_bit_exact = 0; |
9536 | 132 static int lavc_param_aic= 0; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
133 static int lavc_param_aiv= 0; |
9536 | 134 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
|
135 static int lavc_param_gmc= 0; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
136 static int lavc_param_obmc= 0; |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
137 static int lavc_param_loop= 0; |
8695 | 138 static int lavc_param_last_pred= 0; |
8709 | 139 static int lavc_param_pre_me= 1; |
8803 | 140 static int lavc_param_me_subpel_quality= 8; |
9508 | 141 static int lavc_param_me_range= 0; |
9645 | 142 static int lavc_param_ibias= FF_DEFAULT_QUANT_BIAS; |
143 static int lavc_param_pbias= FF_DEFAULT_QUANT_BIAS; | |
10291 | 144 static int lavc_param_coder= 0; |
145 static int lavc_param_context= 0; | |
10779 | 146 static char *lavc_param_intra_matrix = NULL; |
147 static char *lavc_param_inter_matrix = NULL; | |
10963 | 148 static int lavc_param_cbp= 0; |
10974 | 149 static int lavc_param_mv0= 0; |
11363 | 150 static int lavc_param_noise_reduction= 0; |
11910 | 151 static int lavc_param_qns= 0; |
11445 | 152 static int lavc_param_qp_rd= 0; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
153 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
|
154 static int lavc_param_sc_threshold= 0; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
155 static int lavc_param_ss= 0; |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
156 static int lavc_param_top= -1; |
11702 | 157 static int lavc_param_alt= 0; |
158 static int lavc_param_ilme= 0; | |
12542 | 159 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
|
160 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
|
161 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
|
162 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
|
163 static int lavc_param_turbo = 0; |
23953
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
164 static int lavc_param_skip_threshold=0; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
165 static int lavc_param_skip_factor=0; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
166 static int lavc_param_skip_exp=0; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
167 static int lavc_param_skip_cmp=0; |
17243
67ce2e4206ea
support downscaling frames for dynamic b frame decission
gpoirier
parents:
17063
diff
changeset
|
168 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
|
169 static int lavc_param_bidir_refine = 0; |
17464 | 170 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
|
171 static int lavc_param_video_global_header= 0; |
18489 | 172 static int lavc_param_mv0_threshold = 256; |
18569 | 173 static int lavc_param_refs = 1; |
18572 | 174 static int lavc_param_b_sensitivity = 40; |
23209 | 175 static int lavc_param_level = FF_LEVEL_UNKNOWN; |
5550 | 176 |
11375 | 177 char *lavc_param_acodec = "mp2"; |
178 int lavc_param_atag = 0; | |
179 int lavc_param_abitrate = 224; | |
17842 | 180 int lavc_param_audio_global_header= 0; |
26693 | 181 static char *lavc_param_avopt = NULL; |
31589
ef92321146a1
Make it possible to set all options for lavc audio encoder.
reimar
parents:
30955
diff
changeset
|
182 char *lavc_param_audio_avopt = NULL; |
11375 | 183 |
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
|
184 #include "m_option.h" |
5550 | 185 |
32678 | 186 #define MAX_BITRATE 100000000 /* 100Mbit */ |
187 | |
30955
4e59a7aebadb
Mark encoder-related m_option_t struct arrays as const.
diego
parents:
30948
diff
changeset
|
188 const m_option_t lavcopts_conf[]={ |
11375 | 189 {"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
|
190 {"abitrate", &lavc_param_abitrate, CONF_TYPE_INT, CONF_RANGE, 1, 1000000, NULL}, |
11375 | 191 {"atag", &lavc_param_atag, CONF_TYPE_INT, CONF_RANGE, 0, 0xffff, NULL}, |
5550 | 192 {"vcodec", &lavc_param_vcodec, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
32678 | 193 {"vbitrate", &lavc_param_vbitrate, CONF_TYPE_INT, CONF_RANGE, 4, MAX_BITRATE, NULL}, |
194 {"vratetol", &lavc_param_vrate_tolerance, CONF_TYPE_INT, CONF_RANGE, 4, MAX_BITRATE, NULL}, | |
10498 | 195 {"vhq", &lavc_param_mb_decision, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
196 {"mbd", &lavc_param_mb_decision, CONF_TYPE_INT, CONF_RANGE, 0, 9, NULL}, | |
5550 | 197 {"v4mv", &lavc_param_v4mv, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
17261 | 198 {"vme", &lavc_param_vme, CONF_TYPE_INT, CONF_RANGE, 0, 8, NULL}, |
18569 | 199 {"vqscale", &lavc_param_vqscale, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 255.0, NULL}, |
5550 | 200 {"vqmin", &lavc_param_vqmin, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, |
201 {"vqmax", &lavc_param_vqmax, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, | |
8492 | 202 {"mbqmin", &lavc_param_mb_qmin, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, |
203 {"mbqmax", &lavc_param_mb_qmax, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, | |
11032 | 204 {"lmin", &lavc_param_lmin, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL}, |
205 {"lmax", &lavc_param_lmax, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL}, | |
20756 | 206 {"mblmin", &lavc_param_mb_lmin, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL}, |
207 {"mblmax", &lavc_param_mb_lmax, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL}, | |
5550 | 208 {"vqdiff", &lavc_param_vqdiff, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, |
209 {"vqcomp", &lavc_param_vqcompress, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL}, | |
210 {"vqblur", &lavc_param_vqblur, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL}, | |
7088 | 211 {"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
|
212 {"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
|
213 {"vpass", &lavc_param_vpass, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL}, |
5778 | 214 {"vrc_strategy", &lavc_param_vrc_strategy, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL}, |
8413 | 215 {"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
|
216 {"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
|
217 {"vlelim", &lavc_param_luma_elim_threshold, CONF_TYPE_INT, CONF_RANGE, -99, 99, NULL}, |
7038 | 218 {"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
|
219 {"vpsize", &lavc_param_packet_size, CONF_TYPE_INT, CONF_RANGE, 0, 100000000, NULL}, |
8195 | 220 {"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
|
221 {"vdpart", &lavc_param_data_partitioning, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PART, NULL}, |
5550 | 222 {"keyint", &lavc_param_keyint, CONF_TYPE_INT, 0, 0, 0, NULL}, |
26395 | 223 {"gray", &lavc_param_gray, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PART, NULL}, |
6944 | 224 {"mpeg_quant", &lavc_param_mpeg_quant, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
7088 | 225 {"vi_qfactor", &lavc_param_vi_qfactor, CONF_TYPE_FLOAT, CONF_RANGE, -31.0, 31.0, NULL}, |
226 {"vi_qoffset", &lavc_param_vi_qoffset, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 31.0, NULL}, | |
227 {"vqsquish", &lavc_param_rc_qsquish, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 99.0, NULL}, | |
228 {"vqmod_amp", &lavc_param_rc_qmod_amp, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 99.0, NULL}, | |
229 {"vqmod_freq", &lavc_param_rc_qmod_freq, CONF_TYPE_INT, 0, 0, 0, NULL}, | |
230 {"vrc_eq", &lavc_param_rc_eq, CONF_TYPE_STRING, 0, 0, 0, NULL}, | |
231 {"vrc_override", &lavc_param_rc_override_string, CONF_TYPE_STRING, 0, 0, 0, NULL}, | |
32678 | 232 {"vrc_maxrate", &lavc_param_rc_max_rate, CONF_TYPE_INT, CONF_RANGE, 0, MAX_BITRATE, NULL}, |
233 {"vrc_minrate", &lavc_param_rc_min_rate, CONF_TYPE_INT, CONF_RANGE, 0, MAX_BITRATE, NULL}, | |
234 {"vrc_buf_size", &lavc_param_rc_buffer_size, CONF_TYPE_INT, CONF_RANGE, 4, MAX_BITRATE, NULL}, | |
7088 | 235 {"vrc_buf_aggressivity", &lavc_param_rc_buffer_aggressivity, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 99.0, NULL}, |
236 {"vrc_init_cplx", &lavc_param_rc_initial_cplx, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 9999999.0, NULL}, | |
15781 | 237 {"vrc_init_occupancy", &lavc_param_rc_initial_buffer_occupancy, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL}, |
7152 | 238 {"vfdct", &lavc_param_fdct, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL}, |
8237 | 239 {"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
|
240 {"autoaspect", &lavc_param_autoaspect, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
7490 | 241 {"lumi_mask", &lavc_param_lumi_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL}, |
242 {"tcplx_mask", &lavc_param_temporal_cplx_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL}, | |
243 {"scplx_mask", &lavc_param_spatial_cplx_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL}, | |
244 {"p_mask", &lavc_param_p_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL}, | |
245 {"naq", &lavc_param_normalize_aqp, CONF_TYPE_FLAG, 0, 0, 1, NULL}, | |
7496 | 246 {"dark_mask", &lavc_param_dark_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL}, |
7504 | 247 {"ildct", &lavc_param_interlaced_dct, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
7564 | 248 {"idct", &lavc_param_idct, CONF_TYPE_INT, CONF_RANGE, 0, 20, NULL}, |
8190 | 249 {"pred", &lavc_param_prediction_method, CONF_TYPE_INT, CONF_RANGE, 0, 20, NULL}, |
10778 | 250 {"format", &lavc_param_format, CONF_TYPE_IMGFMT, 0, 0, 0, NULL}, |
8341 | 251 {"debug", &lavc_param_debug, CONF_TYPE_INT, CONF_RANGE, 0, 100000000, NULL}, |
8347 | 252 {"psnr", &lavc_param_psnr, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PSNR, NULL}, |
8803 | 253 {"precmp", &lavc_param_me_pre_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, |
8587 | 254 {"cmp", &lavc_param_me_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, |
255 {"subcmp", &lavc_param_me_sub_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, | |
256 {"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
|
257 {"skipcmp", &lavc_param_skip_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, |
11753 | 258 #ifdef FF_CMP_VSAD |
259 {"ildctcmp", &lavc_param_ildct_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, | |
260 #endif | |
11930
f2a503cb70ba
bit_exact patch by ("Steven M. Schultz" <sms at 2BSD dot COM>)
michael
parents:
11910
diff
changeset
|
261 {"bit_exact", &lavc_param_bit_exact, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_BITEXACT, NULL}, |
8803 | 262 {"predia", &lavc_param_pre_dia_size, CONF_TYPE_INT, CONF_RANGE, -2000, 2000, NULL}, |
8684 | 263 {"dia", &lavc_param_dia_size, CONF_TYPE_INT, CONF_RANGE, -2000, 2000, NULL}, |
8587 | 264 {"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
|
265 {"trell", &lavc_param_trell, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
24329 | 266 {"lowdelay", &lavc_param_lowdelay, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_LOW_DELAY, NULL}, |
8695 | 267 {"last_pred", &lavc_param_last_pred, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, |
8709 | 268 {"preme", &lavc_param_pre_me, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, |
8803 | 269 {"subq", &lavc_param_me_subpel_quality, CONF_TYPE_INT, CONF_RANGE, 0, 8, NULL}, |
9508 | 270 {"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
|
271 #ifdef CODEC_FLAG_AC_PRED |
ed8f8f58f855
Update libavcodec 'aic' flag define to match current FFmpeg.
diego
parents:
27516
diff
changeset
|
272 {"aic", &lavc_param_aic, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_AC_PRED, NULL}, |
9536 | 273 {"umv", &lavc_param_umv, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_UMV, NULL}, |
274 #endif | |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
275 #ifdef CODEC_FLAG_H263P_AIV |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
276 {"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
|
277 #endif |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
278 #ifdef CODEC_FLAG_OBMC |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
279 {"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
|
280 #endif |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
281 #ifdef CODEC_FLAG_LOOP_FILTER |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
282 {"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
|
283 #endif |
9645 | 284 {"ibias", &lavc_param_ibias, CONF_TYPE_INT, CONF_RANGE, -512, 512, NULL}, |
285 {"pbias", &lavc_param_pbias, CONF_TYPE_INT, CONF_RANGE, -512, 512, NULL}, | |
10291 | 286 {"coder", &lavc_param_coder, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL}, |
287 {"context", &lavc_param_context, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL}, | |
10779 | 288 {"intra_matrix", &lavc_param_intra_matrix, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
289 {"inter_matrix", &lavc_param_inter_matrix, CONF_TYPE_STRING, 0, 0, 0, NULL}, | |
10963 | 290 {"cbp", &lavc_param_cbp, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CBP_RD, NULL}, |
10974 | 291 {"mv0", &lavc_param_mv0, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_MV0, NULL}, |
11363 | 292 {"nr", &lavc_param_noise_reduction, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL}, |
11445 | 293 #ifdef CODEC_FLAG_QP_RD |
294 {"qprd", &lavc_param_qp_rd, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QP_RD, NULL}, | |
295 #endif | |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
296 #ifdef CODEC_FLAG_H263P_SLICE_STRUCT |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
297 {"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
|
298 #endif |
11702 | 299 #ifdef CODEC_FLAG_ALT_SCAN |
300 {"alt", &lavc_param_alt, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_ALT_SCAN, NULL}, | |
301 #endif | |
302 #ifdef CODEC_FLAG_INTERLACED_ME | |
303 {"ilme", &lavc_param_ilme, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_ME, NULL}, | |
304 #endif | |
12764
8109997eb7d3
dc precision and closed gop patch by (Nico Sabbi <nsabbi at tiscali dot it>)
michael
parents:
12760
diff
changeset
|
305 #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
|
306 {"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
|
307 #endif |
28380
f521e54d47ee
Add support for libavcodec GMC flag, patch by Dave Baker, dbkr mxtelecom com.
diego
parents:
28360
diff
changeset
|
308 #ifdef CODEC_FLAG_GMC |
f521e54d47ee
Add support for libavcodec GMC flag, patch by Dave Baker, dbkr mxtelecom com.
diego
parents:
28360
diff
changeset
|
309 {"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
|
310 #endif |
12765 | 311 {"dc", &lavc_param_dc_precision, CONF_TYPE_INT, CONF_RANGE, 8, 11, NULL}, |
15368 | 312 {"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
|
313 {"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
|
314 {"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
|
315 {"top", &lavc_param_top, CONF_TYPE_INT, CONF_RANGE, -1, 1, NULL}, |
11910 | 316 {"qns", &lavc_param_qns, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL}, |
12542 | 317 {"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
|
318 {"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
|
319 {"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
|
320 {"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
|
321 {"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
|
322 {"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
|
323 {"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
|
324 {"bidir_refine", &lavc_param_bidir_refine, CONF_TYPE_INT, CONF_RANGE, 0, 4, NULL}, |
17464 | 325 {"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
|
326 {"vglobal", &lavc_param_video_global_header, CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL}, |
17842 | 327 {"aglobal", &lavc_param_audio_global_header, CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL}, |
18489 | 328 {"mv0_threshold", &lavc_param_mv0_threshold, CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL}, |
18569 | 329 {"refs", &lavc_param_refs, CONF_TYPE_INT, CONF_RANGE, 1, 16, NULL}, |
18572 | 330 {"b_sensitivity", &lavc_param_b_sensitivity, CONF_TYPE_INT, CONF_RANGE, 1, INT_MAX, NULL}, |
23209 | 331 {"level", &lavc_param_level, CONF_TYPE_INT, CONF_RANGE, INT_MIN, INT_MAX, NULL}, |
26693 | 332 {"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
|
333 {"audio_o", &lavc_param_audio_avopt, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
5550 | 334 {NULL, NULL, 0, 0, 0, 0, NULL} |
335 }; | |
336 | |
337 struct vf_priv_s { | |
8585 | 338 muxer_stream_t* mux; |
7444 | 339 AVCodecContext *context; |
8413 | 340 AVFrame *pic; |
5550 | 341 AVCodec *codec; |
7088 | 342 FILE *stats_file; |
5550 | 343 }; |
344 | |
7088 | 345 #define stats_file (vf->priv->stats_file) |
5550 | 346 #define mux_v (vf->priv->mux) |
347 #define lavc_venc_context (vf->priv->context) | |
348 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
349 static int encode_frame(struct vf_instance *vf, AVFrame *pic, double pts); |
14080 | 350 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
351 static int config(struct vf_instance *vf, |
5550 | 352 int width, int height, int d_width, int d_height, |
353 unsigned int flags, unsigned int outfmt){ | |
7088 | 354 int size, i; |
29674 | 355 char *p; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
356 |
5550 | 357 mux_v->bih->biWidth=width; |
358 mux_v->bih->biHeight=height; | |
359 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8); | |
360 | |
17355 | 361 mp_msg(MSGT_MENCODER, MSGL_INFO,"videocodec: libavcodec (%dx%d fourcc=%x [%.4s])\n", |
5550 | 362 mux_v->bih->biWidth, mux_v->bih->biHeight, mux_v->bih->biCompression, |
363 (char *)&mux_v->bih->biCompression); | |
364 | |
7444 | 365 lavc_venc_context->width = width; |
366 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
|
367 if (lavc_param_vbitrate > 16000) /* != -1 */ |
7444 | 368 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
|
369 else if (lavc_param_vbitrate >= 0) /* != -1 */ |
7444 | 370 lavc_venc_context->bit_rate = lavc_param_vbitrate*1000; |
5550 | 371 else |
7444 | 372 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
|
373 |
19360
d4d72e5eea07
pass average bitrate from encoder to (lavf) muxer
michael
parents:
19073
diff
changeset
|
374 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
|
375 |
7444 | 376 lavc_venc_context->bit_rate_tolerance= lavc_param_vrate_tolerance*1000; |
15307 | 377 lavc_venc_context->time_base= (AVRational){mux_v->h.dwScale, mux_v->h.dwRate}; |
7444 | 378 lavc_venc_context->qmin= lavc_param_vqmin; |
379 lavc_venc_context->qmax= lavc_param_vqmax; | |
8492 | 380 lavc_venc_context->mb_qmin= lavc_param_mb_qmin; |
381 lavc_venc_context->mb_qmax= lavc_param_mb_qmax; | |
11032 | 382 lavc_venc_context->lmin= (int)(FF_QP2LAMBDA * lavc_param_lmin + 0.5); |
383 lavc_venc_context->lmax= (int)(FF_QP2LAMBDA * lavc_param_lmax + 0.5); | |
20756 | 384 lavc_venc_context->mb_lmin= (int)(FF_QP2LAMBDA * lavc_param_mb_lmin + 0.5); |
385 lavc_venc_context->mb_lmax= (int)(FF_QP2LAMBDA * lavc_param_mb_lmax + 0.5); | |
7444 | 386 lavc_venc_context->max_qdiff= lavc_param_vqdiff; |
387 lavc_venc_context->qcompress= lavc_param_vqcompress; | |
388 lavc_venc_context->qblur= lavc_param_vqblur; | |
389 lavc_venc_context->max_b_frames= lavc_param_vmax_b_frames; | |
390 lavc_venc_context->b_quant_factor= lavc_param_vb_qfactor; | |
391 lavc_venc_context->rc_strategy= lavc_param_vrc_strategy; | |
392 lavc_venc_context->b_frame_strategy= lavc_param_vb_strategy; | |
14786 | 393 lavc_venc_context->b_quant_offset= (int)(FF_QP2LAMBDA * lavc_param_vb_qoffset + 0.5); |
7444 | 394 lavc_venc_context->luma_elim_threshold= lavc_param_luma_elim_threshold; |
395 lavc_venc_context->chroma_elim_threshold= lavc_param_chroma_elim_threshold; | |
396 lavc_venc_context->rtp_payload_size= lavc_param_packet_size; | |
397 lavc_venc_context->strict_std_compliance= lavc_param_strict; | |
398 lavc_venc_context->i_quant_factor= lavc_param_vi_qfactor; | |
14786 | 399 lavc_venc_context->i_quant_offset= (int)(FF_QP2LAMBDA * lavc_param_vi_qoffset + 0.5); |
7444 | 400 lavc_venc_context->rc_qsquish= lavc_param_rc_qsquish; |
401 lavc_venc_context->rc_qmod_amp= lavc_param_rc_qmod_amp; | |
402 lavc_venc_context->rc_qmod_freq= lavc_param_rc_qmod_freq; | |
403 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
|
404 |
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 mux_v->max_rate= |
7444 | 406 lavc_venc_context->rc_max_rate= lavc_param_rc_max_rate*1000; |
407 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
|
408 |
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
|
409 mux_v->vbv_size= |
7444 | 410 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
|
411 |
15781 | 412 lavc_venc_context->rc_initial_buffer_occupancy= |
413 lavc_venc_context->rc_buffer_size * | |
414 lavc_param_rc_initial_buffer_occupancy; | |
7444 | 415 lavc_venc_context->rc_buffer_aggressivity= lavc_param_rc_buffer_aggressivity; |
416 lavc_venc_context->rc_initial_cplx= lavc_param_rc_initial_cplx; | |
8341 | 417 lavc_venc_context->debug= lavc_param_debug; |
8695 | 418 lavc_venc_context->last_predictor_count= lavc_param_last_pred; |
8709 | 419 lavc_venc_context->pre_me= lavc_param_pre_me; |
8803 | 420 lavc_venc_context->me_pre_cmp= lavc_param_me_pre_cmp; |
421 lavc_venc_context->pre_dia_size= lavc_param_pre_dia_size; | |
422 lavc_venc_context->me_subpel_quality= lavc_param_me_subpel_quality; | |
9508 | 423 lavc_venc_context->me_range= lavc_param_me_range; |
9645 | 424 lavc_venc_context->intra_quant_bias= lavc_param_ibias; |
425 lavc_venc_context->inter_quant_bias= lavc_param_pbias; | |
10291 | 426 lavc_venc_context->coder_type= lavc_param_coder; |
427 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
|
428 lavc_venc_context->scenechange_threshold= lavc_param_sc_threshold; |
11363 | 429 lavc_venc_context->noise_reduction= lavc_param_noise_reduction; |
11910 | 430 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
|
431 lavc_venc_context->inter_threshold= lavc_param_inter_threshold; |
12542 | 432 lavc_venc_context->nsse_weight= lavc_param_nssew; |
23953
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
433 lavc_venc_context->frame_skip_threshold= lavc_param_skip_threshold; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
434 lavc_venc_context->frame_skip_factor= lavc_param_skip_factor; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
435 lavc_venc_context->frame_skip_exp= lavc_param_skip_exp; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
436 lavc_venc_context->frame_skip_cmp= lavc_param_skip_cmp; |
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
437 |
10779 | 438 if (lavc_param_intra_matrix) |
439 { | |
440 char *tmp; | |
441 | |
442 lavc_venc_context->intra_matrix = | |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
443 av_malloc(sizeof(*lavc_venc_context->intra_matrix)*64); |
10779 | 444 |
445 i = 0; | |
446 while ((tmp = strsep(&lavc_param_intra_matrix, ",")) && (i < 64)) | |
447 { | |
448 if (!tmp || (tmp && !strlen(tmp))) | |
449 break; | |
450 lavc_venc_context->intra_matrix[i++] = atoi(tmp); | |
451 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
452 |
10779 | 453 if (i != 64) |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
454 av_freep(&lavc_venc_context->intra_matrix); |
10779 | 455 else |
456 mp_msg(MSGT_MENCODER, MSGL_V, "Using user specified intra matrix\n"); | |
457 } | |
458 if (lavc_param_inter_matrix) | |
459 { | |
460 char *tmp; | |
461 | |
462 lavc_venc_context->inter_matrix = | |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
463 av_malloc(sizeof(*lavc_venc_context->inter_matrix)*64); |
10779 | 464 |
465 i = 0; | |
466 while ((tmp = strsep(&lavc_param_inter_matrix, ",")) && (i < 64)) | |
467 { | |
468 if (!tmp || (tmp && !strlen(tmp))) | |
469 break; | |
470 lavc_venc_context->inter_matrix[i++] = atoi(tmp); | |
471 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
472 |
10779 | 473 if (i != 64) |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
474 av_freep(&lavc_venc_context->inter_matrix); |
10779 | 475 else |
476 mp_msg(MSGT_MENCODER, MSGL_V, "Using user specified inter matrix\n"); | |
477 } | |
9508 | 478 |
7088 | 479 p= lavc_param_rc_override_string; |
480 for(i=0; p; i++){ | |
481 int start, end, q; | |
482 int e=sscanf(p, "%d,%d,%d", &start, &end, &q); | |
483 if(e!=3){ | |
484 mp_msg(MSGT_MENCODER,MSGL_ERR,"error parsing vrc_q\n"); | |
485 return 0; | |
486 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
487 lavc_venc_context->rc_override= |
7444 | 488 realloc(lavc_venc_context->rc_override, sizeof(RcOverride)*(i+1)); |
489 lavc_venc_context->rc_override[i].start_frame= start; | |
490 lavc_venc_context->rc_override[i].end_frame = end; | |
7088 | 491 if(q>0){ |
7444 | 492 lavc_venc_context->rc_override[i].qscale= q; |
493 lavc_venc_context->rc_override[i].quality_factor= 1.0; | |
7088 | 494 } |
495 else{ | |
7444 | 496 lavc_venc_context->rc_override[i].qscale= 0; |
497 lavc_venc_context->rc_override[i].quality_factor= -q/100.0; | |
7088 | 498 } |
499 p= strchr(p, '/'); | |
500 if(p) p++; | |
501 } | |
7444 | 502 lavc_venc_context->rc_override_count=i; |
7088 | 503 |
7444 | 504 lavc_venc_context->mpeg_quant=lavc_param_mpeg_quant; |
7152 | 505 |
7444 | 506 lavc_venc_context->dct_algo= lavc_param_fdct; |
7564 | 507 lavc_venc_context->idct_algo= lavc_param_idct; |
7152 | 508 |
7490 | 509 lavc_venc_context->lumi_masking= lavc_param_lumi_masking; |
510 lavc_venc_context->temporal_cplx_masking= lavc_param_temporal_cplx_masking; | |
511 lavc_venc_context->spatial_cplx_masking= lavc_param_spatial_cplx_masking; | |
512 lavc_venc_context->p_masking= lavc_param_p_masking; | |
7496 | 513 lavc_venc_context->dark_masking= lavc_param_dark_masking; |
15368 | 514 lavc_venc_context->border_masking = lavc_param_border_masking; |
7490 | 515 |
8237 | 516 if (lavc_param_aspect != NULL) |
7389
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
517 { |
8237 | 518 int par_width, par_height, e; |
519 float ratio=0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
520 |
8237 | 521 e= sscanf (lavc_param_aspect, "%d/%d", &par_width, &par_height); |
522 if(e==2){ | |
523 if(par_height) | |
524 ratio= (float)par_width / (float)par_height; | |
525 }else{ | |
526 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
|
527 } |
8237 | 528 |
529 if (e && ratio > 0.1 && ratio < 10.0) { | |
11195
9bfd1b5d38cd
mpeg4 has only 8bit per numerator and denominator ...
michael
parents:
11194
diff
changeset
|
530 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
|
531 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
|
532 lavc_venc_context->sample_aspect_ratio.num, |
9bfd1b5d38cd
mpeg4 has only 8bit per numerator and denominator ...
michael
parents:
11194
diff
changeset
|
533 lavc_venc_context->sample_aspect_ratio.den); |
12061 | 534 mux_v->aspect = ratio; |
8237 | 535 mp_dbg(MSGT_MENCODER, MSGL_DBG2, "aspect_ratio: %f\n", ratio); |
536 } else { | |
537 mp_dbg(MSGT_MENCODER, MSGL_ERR, "aspect ratio: cannot parse \"%s\"\n", lavc_param_aspect); | |
538 return 0; | |
7389
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
539 } |
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
540 } |
13669
8f12e583f50b
10l...autoaspect was always applied to muxer aspect if using newer libavcodec...hope this is ok
rfelker
parents:
13406
diff
changeset
|
541 else if (lavc_param_autoaspect) { |
11369 | 542 lavc_venc_context->sample_aspect_ratio = av_d2q((float)d_width/d_height*height / width, 255); |
12061 | 543 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
|
544 } |
7389
6f3dd9df2cc2
aspect ratio support by encoding (currently only with mpeg4 and h263p)
alex
parents:
7368
diff
changeset
|
545 |
5550 | 546 /* keyframe interval */ |
547 if (lavc_param_keyint >= 0) /* != -1 */ | |
7444 | 548 lavc_venc_context->gop_size = lavc_param_keyint; |
5550 | 549 else |
7444 | 550 lavc_venc_context->gop_size = 250; /* default */ |
5550 | 551 |
10498 | 552 lavc_venc_context->flags = 0; |
553 if (lavc_param_mb_decision) | |
5550 | 554 { |
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
|
555 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_MPCODECS_HighQualityEncodingSelected); |
10498 | 556 lavc_venc_context->mb_decision= lavc_param_mb_decision; |
5550 | 557 } |
558 | |
8587 | 559 lavc_venc_context->me_cmp= lavc_param_me_cmp; |
560 lavc_venc_context->me_sub_cmp= lavc_param_me_sub_cmp; | |
561 lavc_venc_context->mb_cmp= lavc_param_mb_cmp; | |
11753 | 562 #ifdef FF_CMP_VSAD |
563 lavc_venc_context->ildct_cmp= lavc_param_ildct_cmp; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
564 #endif |
8587 | 565 lavc_venc_context->dia_size= lavc_param_dia_size; |
566 lavc_venc_context->flags|= lavc_param_qpel; | |
27516
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
567 lavc_venc_context->trellis = lavc_param_trell; |
24329 | 568 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
|
569 lavc_venc_context->flags|= lavc_param_bit_exact; |
9536 | 570 lavc_venc_context->flags|= lavc_param_aic; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
571 lavc_venc_context->flags|= lavc_param_aiv; |
9536 | 572 lavc_venc_context->flags|= lavc_param_umv; |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
573 lavc_venc_context->flags|= lavc_param_obmc; |
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
574 lavc_venc_context->flags|= lavc_param_loop; |
7444 | 575 lavc_venc_context->flags|= lavc_param_v4mv ? CODEC_FLAG_4MV : 0; |
576 lavc_venc_context->flags|= lavc_param_data_partitioning; | |
10963 | 577 lavc_venc_context->flags|= lavc_param_cbp; |
10974 | 578 lavc_venc_context->flags|= lavc_param_mv0; |
11445 | 579 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
|
580 lavc_venc_context->flags|= lavc_param_ss; |
11702 | 581 lavc_venc_context->flags|= lavc_param_alt; |
582 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
|
583 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
|
584 #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
|
585 lavc_venc_context->flags|= lavc_param_closed_gop; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
586 #endif |
26395 | 587 if(lavc_param_gray) lavc_venc_context->flags|= CODEC_FLAG_GRAY; |
6461 | 588 |
7490 | 589 if(lavc_param_normalize_aqp) lavc_venc_context->flags|= CODEC_FLAG_NORMALIZE_AQP; |
7504 | 590 if(lavc_param_interlaced_dct) lavc_venc_context->flags|= CODEC_FLAG_INTERLACED_DCT; |
8347 | 591 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
|
592 lavc_venc_context->intra_dc_precision = lavc_param_dc_precision - 8; |
8190 | 593 lavc_venc_context->prediction_method= lavc_param_prediction_method; |
17243
67ce2e4206ea
support downscaling frames for dynamic b frame decission
gpoirier
parents:
17063
diff
changeset
|
594 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
|
595 lavc_venc_context->bidir_refine = lavc_param_bidir_refine; |
17464 | 596 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
|
597 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
|
598 /*|| (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
|
599 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
|
600 } |
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
|
601 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
|
602 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
|
603 } |
18489 | 604 lavc_venc_context->mv0_threshold = lavc_param_mv0_threshold; |
18569 | 605 lavc_venc_context->refs = lavc_param_refs; |
18572 | 606 lavc_venc_context->b_sensitivity = lavc_param_b_sensitivity; |
23209 | 607 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
|
608 |
26693 | 609 if(lavc_param_avopt){ |
610 if(parse_avopts(lavc_venc_context, lavc_param_avopt) < 0){ | |
611 mp_msg(MSGT_MENCODER,MSGL_ERR, "Your options /%s/ look like gibberish to me pal\n", lavc_param_avopt); | |
612 return 0; | |
613 } | |
614 } | |
615 | |
23309
af2f1099072f
Pass imgfmt from lavc encoder to lavf muxer (this is needed for dv).
corey
parents:
23288
diff
changeset
|
616 mux_v->imgfmt = lavc_param_format; |
30312
54e9eb2664a7
Reuse the fmt-conversion code instead of duplicating the functionality.
reimar
parents:
29793
diff
changeset
|
617 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
|
618 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
|
619 return 0; |
10302 | 620 |
10848
5844bf004dec
2pass stats curruption fix by ("Johannes E. Schindelin" <Johannes dot Schindelin at gmx dot de>)
michael
parents:
10779
diff
changeset
|
621 if(!stats_file) { |
5778 | 622 /* lavc internal 2pass bitrate control */ |
6673 | 623 switch(lavc_param_vpass){ |
7088 | 624 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
|
625 case 3: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
626 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
|
627 stats_file= fopen(passtmpfile, "rb"); |
7088 | 628 if(stats_file==NULL){ |
629 mp_msg(MSGT_MENCODER,MSGL_ERR,"2pass failed: filename=%s\n", passtmpfile); | |
630 return 0; | |
631 } | |
632 fseek(stats_file, 0, SEEK_END); | |
633 size= ftell(stats_file); | |
634 fseek(stats_file, 0, SEEK_SET); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
635 |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
636 lavc_venc_context->stats_in= av_malloc(size + 1); |
7444 | 637 lavc_venc_context->stats_in[size]=0; |
7088 | 638 |
7444 | 639 if(fread(lavc_venc_context->stats_in, size, 1, stats_file)<1){ |
7088 | 640 mp_msg(MSGT_MENCODER,MSGL_ERR,"2pass failed: reading from filename=%s\n", passtmpfile); |
641 return 0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
642 } |
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
|
643 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
|
644 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
|
645 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
|
646 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
|
647 /* fall through */ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
648 case 1: |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
649 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
|
650 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
|
651 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
|
652 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
|
653 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
|
654 } |
13406
2f69854dfbe4
10l: Make turbo mode compatible with 3-pass encoding
gpoirier
parents:
13386
diff
changeset
|
655 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
|
656 /* 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
|
657 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
|
658 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
|
659 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
|
660 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
|
661 |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
662 /* Disables diamond motion estimation */ |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
663 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
|
664 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
|
665 |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
666 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
|
667 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
|
668 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
|
669 |
d8ba5b72fc6c
New lavc flag: "turbo" mode which is supposed to speed up 2-pass encoding
gpoirier
parents:
13385
diff
changeset
|
670 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
|
671 lavc_venc_context->flags &= ~CODEC_FLAG_4MV; |
27516
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
672 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
|
673 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
|
674 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
|
675 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
|
676 } |
7088 | 677 break; |
6673 | 678 } |
10848
5844bf004dec
2pass stats curruption fix by ("Johannes E. Schindelin" <Johannes dot Schindelin at gmx dot de>)
michael
parents:
10779
diff
changeset
|
679 } |
5778 | 680 |
7444 | 681 lavc_venc_context->me_method = ME_ZERO+lavc_param_vme; |
5550 | 682 |
683 /* fixed qscale :p */ | |
18569 | 684 if (lavc_param_vqscale >= 0.0) |
5550 | 685 { |
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
|
686 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_MPCODECS_UsingConstantQscale, lavc_param_vqscale); |
7444 | 687 lavc_venc_context->flags |= CODEC_FLAG_QSCALE; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
688 lavc_venc_context->global_quality= |
11032 | 689 vf->priv->pic->quality = (int)(FF_QP2LAMBDA * lavc_param_vqscale + 0.5); |
5550 | 690 } |
19073
8b52dad54b1d
Remove #if LIBAVCODEC_BUILD >= XXX and #if LIBAVFORMAT_BUILD >= XXX jungle.
diego
parents:
18976
diff
changeset
|
691 |
12760
787a1ce375df
multi-threaded lavc patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
12542
diff
changeset
|
692 if(lavc_param_threads > 1) |
787a1ce375df
multi-threaded lavc patch by (Loren Merritt <lorenm at u dot washington dot edu>)
michael
parents:
12542
diff
changeset
|
693 avcodec_thread_init(lavc_venc_context, lavc_param_threads); |
5550 | 694 |
7444 | 695 if (avcodec_open(lavc_venc_context, vf->priv->codec) != 0) { |
5550 | 696 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CantOpenCodec); |
697 return 0; | |
698 } | |
699 | |
7444 | 700 if (lavc_venc_context->codec->encode == NULL) { |
5550 | 701 mp_msg(MSGT_MENCODER,MSGL_ERR,"avcodec init failed (ctx->codec->encode == NULL)!\n"); |
702 return 0; | |
703 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
704 |
7088 | 705 /* free second pass buffer, its not needed anymore */ |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
706 av_freep(&lavc_venc_context->stats_in); |
27516
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
707 if(lavc_venc_context->bits_per_coded_sample) |
3364aef9a988
Fix compilation after libavcodec major version 52 changes
uau
parents:
27341
diff
changeset
|
708 mux_v->bih->biBitCount= lavc_venc_context->bits_per_coded_sample; |
8190 | 709 if(lavc_venc_context->extradata_size){ |
32105 | 710 mux_v->bih= realloc(mux_v->bih, sizeof(*mux_v->bih) + lavc_venc_context->extradata_size); |
8190 | 711 memcpy(mux_v->bih + 1, lavc_venc_context->extradata, lavc_venc_context->extradata_size); |
32105 | 712 mux_v->bih->biSize= sizeof(*mux_v->bih) + lavc_venc_context->extradata_size; |
8190 | 713 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
714 |
17659 | 715 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
|
716 |
5550 | 717 return 1; |
718 } | |
719 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
720 static int control(struct vf_instance *vf, int request, void* data){ |
5550 | 721 |
14080 | 722 switch(request){ |
723 case VFCTRL_FLUSH_FRAMES: | |
724 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
|
725 while(encode_frame(vf, NULL, MP_NOPTS_VALUE) > 0); |
14080 | 726 return CONTROL_TRUE; |
727 default: | |
728 return CONTROL_UNKNOWN; | |
729 } | |
5550 | 730 } |
731 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
732 static int query_format(struct vf_instance *vf, unsigned int fmt){ |
5550 | 733 switch(fmt){ |
734 case IMGFMT_YV12: | |
735 case IMGFMT_IYUV: | |
736 case IMGFMT_I420: | |
10778 | 737 if(lavc_param_format == IMGFMT_YV12) |
8190 | 738 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
739 break; | |
10293 | 740 case IMGFMT_411P: |
10778 | 741 if(lavc_param_format == IMGFMT_411P) |
10293 | 742 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
743 break; | |
8190 | 744 case IMGFMT_422P: |
10778 | 745 if(lavc_param_format == IMGFMT_422P) |
8190 | 746 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
747 break; | |
10293 | 748 case IMGFMT_444P: |
10778 | 749 if(lavc_param_format == IMGFMT_444P) |
10293 | 750 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
751 break; | |
752 case IMGFMT_YVU9: | |
10778 | 753 if(lavc_param_format == IMGFMT_YVU9) |
10293 | 754 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
755 break; | |
10302 | 756 case IMGFMT_BGR32: |
10778 | 757 if(lavc_param_format == IMGFMT_BGR32) |
10302 | 758 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE; |
759 break; | |
5550 | 760 } |
761 return 0; | |
762 } | |
763 | |
8347 | 764 static double psnr(double d){ |
765 if(d==0) return INFINITY; | |
766 return -10.0*log(d)/log(10); | |
767 } | |
768 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
769 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){ |
8413 | 770 AVFrame *pic= vf->priv->pic; |
5550 | 771 |
8339 | 772 pic->data[0]=mpi->planes[0]; |
773 pic->data[1]=mpi->planes[1]; | |
774 pic->data[2]=mpi->planes[2]; | |
775 pic->linesize[0]=mpi->stride[0]; | |
776 pic->linesize[1]=mpi->stride[1]; | |
777 pic->linesize[2]=mpi->stride[2]; | |
32477 | 778 pic->pict_type = is_forced_key_frame(pts) ? FF_I_TYPE : 0; |
5550 | 779 |
11672
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
780 if(lavc_param_interlaced_dct){ |
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
781 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
|
782 pic->top_field_first= !!(mpi->fields & MP_IMGFIELD_TOP_FIRST); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
783 else |
11672
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
784 pic->top_field_first= 1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
785 |
11672
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
786 if(lavc_param_top!=-1) |
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
787 pic->top_field_first= lavc_param_top; |
62ca7e82de82
better top_field_first behaviour (mostly what rich suggested)
michael
parents:
11670
diff
changeset
|
788 } |
11670
ffca211f32f9
using top_field_first from mpi, and support overriding it
michael
parents:
11445
diff
changeset
|
789 |
26754
63630c09e237
cosmetics: Remove pointless parentheses from return calls.
diego
parents:
26693
diff
changeset
|
790 return encode_frame(vf, pic, pts) >= 0; |
14080 | 791 } |
792 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
793 static int encode_frame(struct vf_instance *vf, AVFrame *pic, double pts){ |
14080 | 794 const char pict_type_char[5]= {'?', 'I', 'P', 'B', 'S'}; |
795 int out_size; | |
17907 | 796 double dts; |
14080 | 797 |
23954 | 798 if(pts == MP_NOPTS_VALUE) |
799 pts= lavc_venc_context->frame_number * av_q2d(lavc_venc_context->time_base); | |
800 | |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17886
diff
changeset
|
801 if(pic){ |
17909 | 802 #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
|
803 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
|
804 memcpy(pic->opaque, &pts, sizeof(pts)); |
17909 | 805 #else |
806 if(pts != MP_NOPTS_VALUE) | |
807 pic->pts= floor(pts / av_q2d(lavc_venc_context->time_base) + 0.5); | |
808 else | |
809 pic->pts= MP_NOPTS_VALUE; | |
810 #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
|
811 } |
7444 | 812 out_size = avcodec_encode_video(lavc_venc_context, mux_v->buffer, mux_v->buffer_size, |
8339 | 813 pic); |
5550 | 814 |
32841
f698af71f514
For codecs that produce no data on the first pass, e.g.
ranma
parents:
32768
diff
changeset
|
815 /* 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
|
816 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
|
817 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
|
818 /* 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
|
819 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
|
820 } |
32841
f698af71f514
For codecs that produce no data on the first pass, e.g.
ranma
parents:
32768
diff
changeset
|
821 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
822 if(pts != MP_NOPTS_VALUE) |
17907 | 823 dts= pts - lavc_venc_context->delay * av_q2d(lavc_venc_context->time_base); |
824 else | |
825 dts= MP_NOPTS_VALUE; | |
17909 | 826 #if 0 |
17907 | 827 pts= lavc_venc_context->coded_frame->opaque ? |
828 *(double*)lavc_venc_context->coded_frame->opaque | |
829 : MP_NOPTS_VALUE; | |
17909 | 830 #else |
831 if(lavc_venc_context->coded_frame->pts != MP_NOPTS_VALUE) | |
832 pts= lavc_venc_context->coded_frame->pts * av_q2d(lavc_venc_context->time_base); | |
833 else | |
834 pts= MP_NOPTS_VALUE; | |
835 assert(MP_NOPTS_VALUE == AV_NOPTS_VALUE); | |
836 #endif | |
837 //fprintf(stderr, "ve_lavc %f/%f\n", dts, pts); | |
23953
5f3a46b4fb64
make a few more parameters accessable from mplayer
michael
parents:
23309
diff
changeset
|
838 if(out_size == 0 && lavc_param_skip_threshold==0 && lavc_param_skip_factor==0){ |
17659 | 839 ++mux_v->encoder_delay; |
14080 | 840 return 0; |
17659 | 841 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
842 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
843 muxer_write_chunk(mux_v,out_size,lavc_venc_context->coded_frame->key_frame?0x10:0, |
17907 | 844 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
|
845 free(lavc_venc_context->coded_frame->opaque); |
17907 | 846 lavc_venc_context->coded_frame->opaque= NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
847 |
8347 | 848 /* store psnr / pict size / type / qscale */ |
849 if(lavc_param_psnr){ | |
850 static FILE *fvstats=NULL; | |
851 char filename[20]; | |
852 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
|
853 double quality=0.0; |
9868 | 854 int8_t *q; |
8347 | 855 |
856 if(!fvstats) { | |
857 time_t today2; | |
858 struct tm *today; | |
859 today2 = time(NULL); | |
860 today = localtime(&today2); | |
861 sprintf(filename, "psnr_%02d%02d%02d.log", today->tm_hour, | |
862 today->tm_min, today->tm_sec); | |
863 fvstats = fopen(filename,"w"); | |
864 if(!fvstats) { | |
865 perror("fopen"); | |
866 lavc_param_psnr=0; // disable block | |
12983 | 867 mp_msg(MSGT_MENCODER,MSGL_ERR,"Can't open %s for writing. Check its permissions.\n",filename); |
14080 | 868 return -1; |
8347 | 869 /*exit(1);*/ |
870 } | |
871 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
872 |
9865
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
873 // average MB quantizer |
9868 | 874 q = lavc_venc_context->coded_frame->qscale_table; |
875 if(q) { | |
9865
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
876 int x, y; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
877 int w = (lavc_venc_context->width+15) >> 4; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
878 int h = (lavc_venc_context->height+15) >> 4; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
879 for( y = 0; y < h; y++ ) { |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
880 for( x = 0; x < w; x++ ) |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
881 quality += (double)*(q+x); |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
882 q += lavc_venc_context->coded_frame->qstride; |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
883 } |
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
884 quality /= w * h; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
885 } else |
11032 | 886 quality = lavc_venc_context->coded_frame->quality / (float)FF_QP2LAMBDA; |
8347 | 887 |
888 fprintf(fvstats, "%6d, %2.2f, %6d, %2.2f, %2.2f, %2.2f, %2.2f %c\n", | |
8413 | 889 lavc_venc_context->coded_frame->coded_picture_number, |
9865
30893b593947
Adaptive quantization support for "-lavcopts psnr" and "-lavdopts vstats".
rguyom
parents:
9645
diff
changeset
|
890 quality, |
8347 | 891 out_size, |
8413 | 892 psnr(lavc_venc_context->coded_frame->error[0]/f), |
893 psnr(lavc_venc_context->coded_frame->error[1]*4/f), | |
894 psnr(lavc_venc_context->coded_frame->error[2]*4/f), | |
895 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)), | |
896 pict_type_char[lavc_venc_context->coded_frame->pict_type] | |
8347 | 897 ); |
898 } | |
14080 | 899 return out_size; |
5550 | 900 } |
901 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30421
diff
changeset
|
902 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
|
903 |
8347 | 904 if(lavc_param_psnr){ |
905 double f= lavc_venc_context->width*lavc_venc_context->height*255.0*255.0; | |
8413 | 906 f*= lavc_venc_context->coded_frame->coded_picture_number; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
907 |
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
|
908 mp_msg(MSGT_MENCODER, MSGL_INFO, "PSNR: Y:%2.2f, Cb:%2.2f, Cr:%2.2f, All:%2.2f\n", |
8347 | 909 psnr(lavc_venc_context->error[0]/f), |
910 psnr(lavc_venc_context->error[1]*4/f), | |
911 psnr(lavc_venc_context->error[2]*4/f), | |
912 psnr((lavc_venc_context->error[0]+lavc_venc_context->error[1]+lavc_venc_context->error[2])/(f*1.5)) | |
913 ); | |
914 } | |
915 | |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
916 av_freep(&lavc_venc_context->intra_matrix); |
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
917 av_freep(&lavc_venc_context->inter_matrix); |
10779 | 918 |
29793
e19b989877c6
Only call avcodec_close if the open succeeded before, otherwise avcodec_close
reimar
parents:
29674
diff
changeset
|
919 if (lavc_venc_context->codec) |
e19b989877c6
Only call avcodec_close if the open succeeded before, otherwise avcodec_close
reimar
parents:
29674
diff
changeset
|
920 avcodec_close(lavc_venc_context); |
7088 | 921 |
922 if(stats_file) fclose(stats_file); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28380
diff
changeset
|
923 |
7088 | 924 /* free rc_override */ |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
925 av_freep(&lavc_venc_context->rc_override); |
7444 | 926 |
14431
0c10f923746e
change malloc and free to av_ variants where needed.
reimar
parents:
14080
diff
changeset
|
927 av_freep(&vf->priv->context); |
5551 | 928 } |
929 | |
5550 | 930 //===========================================================================// |
931 | |
932 static int vf_open(vf_instance_t *vf, char* args){ | |
5551 | 933 vf->uninit=uninit; |
5550 | 934 vf->config=config; |
14878 | 935 vf->default_caps=VFCAP_CONSTANT; |
5550 | 936 vf->control=control; |
937 vf->query_format=query_format; | |
938 vf->put_image=put_image; | |
32103 | 939 vf->priv=calloc(1, sizeof(struct vf_priv_s)); |
8585 | 940 vf->priv->mux=(muxer_stream_t*)args; |
5550 | 941 |
5977
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
942 /* 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
|
943 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
|
944 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
|
945 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
|
946 { |
32105 | 947 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+28); |
948 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
|
949 } |
14057 | 950 else if (lavc_param_vcodec && (!strcasecmp(lavc_param_vcodec, "huffyuv") |
951 || !strcasecmp(lavc_param_vcodec, "ffvhuff"))) | |
8190 | 952 { |
953 /* XXX: hack: huffyuv needs to store huffman tables (allthough we dunno the size yet ...) */ | |
32105 | 954 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+1000); |
955 mux_v->bih->biSize=sizeof(*mux_v->bih)+1000; | |
8190 | 956 } |
10131 | 957 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "asv1")) |
958 { | |
32105 | 959 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+8); |
960 mux_v->bih->biSize=sizeof(*mux_v->bih)+8; | |
10131 | 961 } |
10777 | 962 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "asv2")) |
963 { | |
32105 | 964 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+8); |
965 mux_v->bih->biSize=sizeof(*mux_v->bih)+8; | |
10777 | 966 } |
8587 | 967 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "wmv2")) |
968 { | |
32105 | 969 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+4); |
970 mux_v->bih->biSize=sizeof(*mux_v->bih)+4; | |
8587 | 971 } |
5977
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
972 else |
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
973 { |
32105 | 974 mux_v->bih=calloc(1, sizeof(*mux_v->bih)); |
975 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
|
976 } |
5550 | 977 mux_v->bih->biWidth=0; |
978 mux_v->bih->biHeight=0; | |
979 mux_v->bih->biPlanes=1; | |
980 mux_v->bih->biBitCount=24; | |
981 if (!lavc_param_vcodec) | |
982 { | |
5977
e8f6f477aad0
a hack to make ffmjpeg created files viewable with windows dlls too
alex
parents:
5972
diff
changeset
|
983 printf("No libavcodec codec specified! It's required!\n"); |
5550 | 984 return 0; |
985 } | |
986 | |
987 if (!strcasecmp(lavc_param_vcodec, "mpeg1") || !strcasecmp(lavc_param_vcodec, "mpeg1video")) | |
988 mux_v->bih->biCompression = mmioFOURCC('m', 'p', 'g', '1'); | |
10699 | 989 else if (!strcasecmp(lavc_param_vcodec, "mpeg2") || !strcasecmp(lavc_param_vcodec, "mpeg2video")) |
990 mux_v->bih->biCompression = mmioFOURCC('m', 'p', 'g', '2'); | |
5550 | 991 else if (!strcasecmp(lavc_param_vcodec, "h263") || !strcasecmp(lavc_param_vcodec, "h263p")) |
992 mux_v->bih->biCompression = mmioFOURCC('h', '2', '6', '3'); | |
993 else if (!strcasecmp(lavc_param_vcodec, "rv10")) | |
994 mux_v->bih->biCompression = mmioFOURCC('R', 'V', '1', '0'); | |
995 else if (!strcasecmp(lavc_param_vcodec, "mjpeg")) | |
996 mux_v->bih->biCompression = mmioFOURCC('M', 'J', 'P', 'G'); | |
10302 | 997 else if (!strcasecmp(lavc_param_vcodec, "ljpeg")) |
998 mux_v->bih->biCompression = mmioFOURCC('L', 'J', 'P', 'G'); | |
5550 | 999 else if (!strcasecmp(lavc_param_vcodec, "mpeg4")) |
14766 | 1000 mux_v->bih->biCompression = mmioFOURCC('F', 'M', 'P', '4'); |
5550 | 1001 else if (!strcasecmp(lavc_param_vcodec, "msmpeg4")) |
1002 mux_v->bih->biCompression = mmioFOURCC('d', 'i', 'v', '3'); | |
5972 | 1003 else if (!strcasecmp(lavc_param_vcodec, "msmpeg4v2")) |
1004 mux_v->bih->biCompression = mmioFOURCC('M', 'P', '4', '2'); | |
6461 | 1005 else if (!strcasecmp(lavc_param_vcodec, "wmv1")) |
1006 mux_v->bih->biCompression = mmioFOURCC('W', 'M', 'V', '1'); | |
8587 | 1007 else if (!strcasecmp(lavc_param_vcodec, "wmv2")) |
1008 mux_v->bih->biCompression = mmioFOURCC('W', 'M', 'V', '2'); | |
8190 | 1009 else if (!strcasecmp(lavc_param_vcodec, "huffyuv")) |
1010 mux_v->bih->biCompression = mmioFOURCC('H', 'F', 'Y', 'U'); | |
14057 | 1011 else if (!strcasecmp(lavc_param_vcodec, "ffvhuff")) |
1012 mux_v->bih->biCompression = mmioFOURCC('F', 'F', 'V', 'H'); | |
10131 | 1013 else if (!strcasecmp(lavc_param_vcodec, "asv1")) |
1014 mux_v->bih->biCompression = mmioFOURCC('A', 'S', 'V', '1'); | |
10777 | 1015 else if (!strcasecmp(lavc_param_vcodec, "asv2")) |
1016 mux_v->bih->biCompression = mmioFOURCC('A', 'S', 'V', '2'); | |
10264 | 1017 else if (!strcasecmp(lavc_param_vcodec, "ffv1")) |
1018 mux_v->bih->biCompression = mmioFOURCC('F', 'F', 'V', '1'); | |
13074 | 1019 else if (!strcasecmp(lavc_param_vcodec, "snow")) |
1020 mux_v->bih->biCompression = mmioFOURCC('S', 'N', 'O', 'W'); | |
20419 | 1021 else if (!strcasecmp(lavc_param_vcodec, "flv")) |
1022 mux_v->bih->biCompression = mmioFOURCC('F', 'L', 'V', '1'); | |
23288 | 1023 else if (!strcasecmp(lavc_param_vcodec, "dvvideo")) |
1024 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
|
1025 else if (!strcasecmp(lavc_param_vcodec, "libx264")) |
73e5eb586eb6
make x264 work again after the h264-libx264 renaming
michael
parents:
23957
diff
changeset
|
1026 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
|
1027 else if (!strcasecmp(lavc_param_vcodec, "libschroedinger")) |
b9af28b39daf
Add Dirac video support via libdirac and libschroedinger in libavcodec.
diego
parents:
26754
diff
changeset
|
1028 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
|
1029 else if (!strcasecmp(lavc_param_vcodec, "libdirac")) |
b9af28b39daf
Add Dirac video support via libdirac and libschroedinger in libavcodec.
diego
parents:
26754
diff
changeset
|
1030 mux_v->bih->biCompression = mmioFOURCC('d', 'r', 'a', 'c'); |
5550 | 1031 else |
1032 mux_v->bih->biCompression = mmioFOURCC(lavc_param_vcodec[0], | |
1033 lavc_param_vcodec[1], lavc_param_vcodec[2], lavc_param_vcodec[3]); /* FIXME!!! */ | |
1034 | |
31959
f957f330aa6d
Introduce init_avcodec function to avoid duplicated FFmpeg initializations.
diego
parents:
31589
diff
changeset
|
1035 init_avcodec(); |
5550 | 1036 |
1037 vf->priv->codec = (AVCodec *)avcodec_find_encoder_by_name(lavc_param_vcodec); | |
1038 if (!vf->priv->codec) { | |
1039 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_MissingLAVCcodec, lavc_param_vcodec); | |
1040 return 0; | |
1041 } | |
1042 | |
8413 | 1043 vf->priv->pic = avcodec_alloc_frame(); |
7444 | 1044 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
|
1045 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
|
1046 vf->priv->context->codec_id = vf->priv->codec->id; |
7444 | 1047 |
5550 | 1048 return 1; |
1049 } | |
1050 | |
32033 | 1051 const vf_info_t ve_info_lavc = { |
5550 | 1052 "libavcodec encoder", |
1053 "lavc", | |
6673 | 1054 "A'rpi, Alex, Michael", |
5550 | 1055 "for internal use by mencoder", |
1056 vf_open | |
1057 }; | |
1058 | |
1059 //===========================================================================// |