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