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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
19 #include <stdio.h>
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
20 #include <stdlib.h>
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
21 #include <string.h>
8237
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
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
michael
parents: 8341
diff changeset
24 #include <time.h>
17909
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
25 #include <assert.h>
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15989
diff changeset
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
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15989
diff changeset
33 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15989
diff changeset
34 #include "help_mp.h"
26693
64bb979316d3 AVOption support for video encoders.
michael
parents: 26395
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
37
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
42
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
43 #include "libmpdemux/muxer.h"
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
44
5607
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
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
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
47 #include "mp_image.h"
32477
2f95644eb8cb Support for -force-key-frames for ve_lavc.
cigaes
parents: 32105
diff changeset
48 #include "ve.h"
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
51
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
52 //===========================================================================//
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
53
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
54 #include "libavcodec/avcodec.h"
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
55
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
56
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
57 /* video options */
7555
534ff1aab0db vcodec=mpeg4 set as default
arpi
parents: 7504
diff changeset
58 static char *lavc_param_vcodec = "mpeg4";
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
59 static int lavc_param_vbitrate = -1;
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
60 static int lavc_param_vrate_tolerance = 1000*8;
10498
17391ba6c53b mb decision stuff
michael
parents: 10302
diff changeset
61 static int lavc_param_mb_decision = 0; /* default is realtime encoding */
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
62 static int lavc_param_v4mv = 0;
5556
4016b44a1230 vme default changed 3->4
arpi
parents: 5551
diff changeset
63 static int lavc_param_vme = 4;
18569
d8605d22bf62 document the recent changes in Snow.
lorenm
parents: 18489
diff changeset
64 static float lavc_param_vqscale = -1;
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
65 static int lavc_param_vqmin = 2;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
66 static int lavc_param_vqmax = 31;
8492
81f01b7b3f6d mb qp limits
michael
parents: 8413
diff changeset
67 static int lavc_param_mb_qmin = 2;
81f01b7b3f6d mb qp limits
michael
parents: 8413
diff changeset
68 static int lavc_param_mb_qmax = 31;
11032
a3c8c02e78a5 use lagrange multipler instead of qscale
michael
parents: 11000
diff changeset
69 static float lavc_param_lmin = 2;
a3c8c02e78a5 use lagrange multipler instead of qscale
michael
parents: 11000
diff changeset
70 static float lavc_param_lmax = 31;
20756
ce57eb3e9b81 support lavc mblmin and mblmax
corey
parents: 20419
diff changeset
71 static float lavc_param_mb_lmin = 2;
ce57eb3e9b81 support lavc mblmin and mblmax
corey
parents: 20419
diff changeset
72 static float lavc_param_mb_lmax = 31;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
73 static int lavc_param_vqdiff = 3;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
74 static float lavc_param_vqcompress = 0.5;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
75 static float lavc_param_vqblur = 0.5;
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
76 static float lavc_param_vb_qfactor = 1.25;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
77 static float lavc_param_vb_qoffset = 1.25;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
78 static float lavc_param_vi_qfactor = 0.8;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
81 static int lavc_param_keyint = -1;
5778
f2586f1a3a96 support for new stuff (lavc internal 2pass, ...)
michael
parents: 5677
diff changeset
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
f2586f1a3a96 support for new stuff (lavc internal 2pass, ...)
michael
parents: 5677
diff changeset
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
71bd93e71a97 Restore grayscale decoding support with FFmpeg.
diego
parents: 26166
diff changeset
90 static int lavc_param_gray=0;
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
91 static float lavc_param_rc_qsquish=1.0;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
92 static float lavc_param_rc_qmod_amp=0;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
93 static int lavc_param_rc_qmod_freq=0;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
94 static char *lavc_param_rc_override_string=NULL;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
95 static char *lavc_param_rc_eq="tex^qComp";
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
96 static int lavc_param_rc_buffer_size=0;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
97 static float lavc_param_rc_buffer_aggressivity=1.0;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
98 static int lavc_param_rc_max_rate=0;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
99 static int lavc_param_rc_min_rate=0;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
100 static float lavc_param_rc_initial_cplx=0;
15988
e5013e6b6450 10l for me
ranma
parents: 15781
diff changeset
101 static float lavc_param_rc_initial_buffer_occupancy=0.9;
6944
c72555c4bc63 mpeg4 mpeg quantizer encoding
michael
parents: 6673
diff changeset
102 static int lavc_param_mpeg_quant=0;
7152
5d8f64646cb5 dct selection support
michael
parents: 7127
diff changeset
103 static int lavc_param_fdct=0;
7564
24165f770c0d idct algo selection support
michael
parents: 7555
diff changeset
104 static int lavc_param_idct=0;
8237
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
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
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
107 static float lavc_param_lumi_masking= 0.0;
7496
3d35a56799fc darkmasking & docs
michael
parents: 7490
diff changeset
108 static float lavc_param_dark_masking= 0.0;
7490
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
109 static float lavc_param_temporal_cplx_masking= 0.0;
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
110 static float lavc_param_spatial_cplx_masking= 0.0;
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
111 static float lavc_param_p_masking= 0.0;
15368
f2109e48a3c1 Add border masking support for lavc
gpoirier
parents: 15364
diff changeset
112 static float lavc_param_border_masking= 0.0;
7490
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
113 static int lavc_param_normalize_aqp= 0;
7504
568a1a0b4bec interlaced dct
michael
parents: 7496
diff changeset
114 static int lavc_param_interlaced_dct= 0;
8190
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
115 static int lavc_param_prediction_method= FF_PRED_LEFT;
10778
c554ca1115de switched lavc_param_format to CONF_TYPE_IMGFMT
alex
parents: 10777
diff changeset
116 static int lavc_param_format= IMGFMT_YV12;
8341
fd670708f87f specific debug output support
michael
parents: 8340
diff changeset
117 static int lavc_param_debug= 0;
8347
michael
parents: 8341
diff changeset
118 static int lavc_param_psnr= 0;
8803
324afc962aee qpel & pre ME improvements
michael
parents: 8709
diff changeset
119 static int lavc_param_me_pre_cmp= 0;
8587
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
120 static int lavc_param_me_cmp= 0;
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
121 static int lavc_param_me_sub_cmp= 0;
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
122 static int lavc_param_mb_cmp= 0;
11753
ce75cb364b19 ildctcmp, VSAD, VSSE
michael
parents: 11702
diff changeset
123 #ifdef FF_CMP_VSAD
ce75cb364b19 ildctcmp, VSAD, VSSE
michael
parents: 11702
diff changeset
124 static int lavc_param_ildct_cmp= FF_CMP_VSAD;
ce75cb364b19 ildctcmp, VSAD, VSSE
michael
parents: 11702
diff changeset
125 #endif
8803
324afc962aee qpel & pre ME improvements
michael
parents: 8709
diff changeset
126 static int lavc_param_pre_dia_size= 0;
8587
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
127 static int lavc_param_dia_size= 0;
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
128 static int lavc_param_qpel= 0;
8684
961e0c1e6e60 trellis quantization
michael
parents: 8587
diff changeset
129 static int lavc_param_trell= 0;
24329
9ecc80a7e56f Support lowdelay flag
reimar
parents: 24004
diff changeset
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
4521b6b6348e aic & umv
michael
parents: 9508
diff changeset
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
4521b6b6348e aic & umv
michael
parents: 9508
diff changeset
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
e74e46ba03cc lavc 4649
michael
parents: 8684
diff changeset
138 static int lavc_param_last_pred= 0;
8709
5ed237f98f82 motion estimation pre pass
michael
parents: 8695
diff changeset
139 static int lavc_param_pre_me= 1;
8803
324afc962aee qpel & pre ME improvements
michael
parents: 8709
diff changeset
140 static int lavc_param_me_subpel_quality= 8;
9508
40572852a933 motion estimation range limit
michael
parents: 9014
diff changeset
141 static int lavc_param_me_range= 0;
9645
687eed75ac9c lavc 4663 / quantizer bias
michael
parents: 9571
diff changeset
142 static int lavc_param_ibias= FF_DEFAULT_QUANT_BIAS;
687eed75ac9c lavc 4663 / quantizer bias
michael
parents: 9571
diff changeset
143 static int lavc_param_pbias= FF_DEFAULT_QUANT_BIAS;
10291
bdb465bbf1f6 context model size & coder type options for FFV1
michael
parents: 10264
diff changeset
144 static int lavc_param_coder= 0;
bdb465bbf1f6 context model size & coder type options for FFV1
michael
parents: 10264
diff changeset
145 static int lavc_param_context= 0;
10779
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
146 static char *lavc_param_intra_matrix = NULL;
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
147 static char *lavc_param_inter_matrix = NULL;
10963
michael
parents: 10881
diff changeset
148 static int lavc_param_cbp= 0;
10974
michael
parents: 10963
diff changeset
149 static int lavc_param_mv0= 0;
11363
222d2661f373 noise reduction
michael
parents: 11245
diff changeset
150 static int lavc_param_noise_reduction= 0;
11910
2f54892f0598 quantizer noise shaping
michael
parents: 11753
diff changeset
151 static int lavc_param_qns= 0;
11445
36bbf719cfa6 RD optimal lambda->qp support
michael
parents: 11375
diff changeset
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
e4c043ebf3a6 vismv, alt, ilme options
michael
parents: 11699
diff changeset
157 static int lavc_param_alt= 0;
e4c043ebf3a6 vismv, alt, ilme options
michael
parents: 11699
diff changeset
158 static int lavc_param_ilme= 0;
12542
51212c1c6143 nsse weight
michael
parents: 12061
diff changeset
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
6770c410f4f3 support libavcodec's new sc_factor parameter
corey
parents: 17355
diff changeset
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
adfadb4a26b5 support lavc mv0_threshold
corey
parents: 18004
diff changeset
172 static int lavc_param_mv0_threshold = 256;
18569
d8605d22bf62 document the recent changes in Snow.
lorenm
parents: 18489
diff changeset
173 static int lavc_param_refs = 1;
18572
c1d5652c1654 Support and document lavc b_sensitivity option.
corey
parents: 18569
diff changeset
174 static int lavc_param_b_sensitivity = 40;
23209
c8908f1c609f add "level" as lavc option
cehoyos
parents: 22601
diff changeset
175 static int lavc_param_level = FF_LEVEL_UNKNOWN;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
176
11375
3544f1823f6b mencoder lavc audio encoding support
ranma
parents: 11369
diff changeset
177 char *lavc_param_acodec = "mp2";
3544f1823f6b mencoder lavc audio encoding support
ranma
parents: 11369
diff changeset
178 int lavc_param_atag = 0;
3544f1823f6b mencoder lavc audio encoding support
ranma
parents: 11369
diff changeset
179 int lavc_param_abitrate = 224;
17842
7d5343254436 -lavcopts aglobal
michael
parents: 17659
diff changeset
180 int lavc_param_audio_global_header= 0;
26693
64bb979316d3 AVOption support for video encoders.
michael
parents: 26395
diff changeset
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
3544f1823f6b mencoder lavc audio encoding support
ranma
parents: 11369
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
185
32678
c48020f894a2 Increase the bitrate range maximum value.
ranma
parents: 32477
diff changeset
186 #define MAX_BITRATE 100000000 /* 100Mbit */
c48020f894a2 Increase the bitrate range maximum value.
ranma
parents: 32477
diff changeset
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
3544f1823f6b mencoder lavc audio encoding support
ranma
parents: 11369
diff changeset
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
3544f1823f6b mencoder lavc audio encoding support
ranma
parents: 11369
diff changeset
191 {"atag", &lavc_param_atag, CONF_TYPE_INT, CONF_RANGE, 0, 0xffff, NULL},
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
192 {"vcodec", &lavc_param_vcodec, CONF_TYPE_STRING, 0, 0, 0, NULL},
32678
c48020f894a2 Increase the bitrate range maximum value.
ranma
parents: 32477
diff changeset
193 {"vbitrate", &lavc_param_vbitrate, CONF_TYPE_INT, CONF_RANGE, 4, MAX_BITRATE, NULL},
c48020f894a2 Increase the bitrate range maximum value.
ranma
parents: 32477
diff changeset
194 {"vratetol", &lavc_param_vrate_tolerance, CONF_TYPE_INT, CONF_RANGE, 4, MAX_BITRATE, NULL},
10498
17391ba6c53b mb decision stuff
michael
parents: 10302
diff changeset
195 {"vhq", &lavc_param_mb_decision, CONF_TYPE_FLAG, 0, 0, 1, NULL},
17391ba6c53b mb decision stuff
michael
parents: 10302
diff changeset
196 {"mbd", &lavc_param_mb_decision, CONF_TYPE_INT, CONF_RANGE, 0, 9, NULL},
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
197 {"v4mv", &lavc_param_v4mv, CONF_TYPE_FLAG, 0, 0, 1, NULL},
17261
74bb811dc95d Support vme=8 (iterative overlapped block).
diego
parents: 17256
diff changeset
198 {"vme", &lavc_param_vme, CONF_TYPE_INT, CONF_RANGE, 0, 8, NULL},
18569
d8605d22bf62 document the recent changes in Snow.
lorenm
parents: 18489
diff changeset
199 {"vqscale", &lavc_param_vqscale, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 255.0, NULL},
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
200 {"vqmin", &lavc_param_vqmin, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL},
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
201 {"vqmax", &lavc_param_vqmax, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL},
8492
81f01b7b3f6d mb qp limits
michael
parents: 8413
diff changeset
202 {"mbqmin", &lavc_param_mb_qmin, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL},
81f01b7b3f6d mb qp limits
michael
parents: 8413
diff changeset
203 {"mbqmax", &lavc_param_mb_qmax, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL},
11032
a3c8c02e78a5 use lagrange multipler instead of qscale
michael
parents: 11000
diff changeset
204 {"lmin", &lavc_param_lmin, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL},
a3c8c02e78a5 use lagrange multipler instead of qscale
michael
parents: 11000
diff changeset
205 {"lmax", &lavc_param_lmax, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL},
20756
ce57eb3e9b81 support lavc mblmin and mblmax
corey
parents: 20419
diff changeset
206 {"mblmin", &lavc_param_mb_lmin, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL},
ce57eb3e9b81 support lavc mblmin and mblmax
corey
parents: 20419
diff changeset
207 {"mblmax", &lavc_param_mb_lmax, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL},
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
208 {"vqdiff", &lavc_param_vqdiff, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL},
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
209 {"vqcomp", &lavc_param_vqcompress, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL},
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
210 {"vqblur", &lavc_param_vqblur, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL},
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
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
f2586f1a3a96 support for new stuff (lavc internal 2pass, ...)
michael
parents: 5677
diff changeset
214 {"vrc_strategy", &lavc_param_vrc_strategy, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL},
8413
2670aec42989 AVVideoFrame -> AVFrame
michael
parents: 8371
diff changeset
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
bfb03691fb4b skip blocks with small chroma dc support
michael
parents: 7004
diff changeset
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
49783c38014e vstrict is no flag
michael
parents: 8190
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
222 {"keyint", &lavc_param_keyint, CONF_TYPE_INT, 0, 0, 0, NULL},
26395
71bd93e71a97 Restore grayscale decoding support with FFmpeg.
diego
parents: 26166
diff changeset
223 {"gray", &lavc_param_gray, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PART, NULL},
6944
c72555c4bc63 mpeg4 mpeg quantizer encoding
michael
parents: 6673
diff changeset
224 {"mpeg_quant", &lavc_param_mpeg_quant, CONF_TYPE_FLAG, 0, 0, 1, NULL},
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
225 {"vi_qfactor", &lavc_param_vi_qfactor, CONF_TYPE_FLOAT, CONF_RANGE, -31.0, 31.0, NULL},
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
226 {"vi_qoffset", &lavc_param_vi_qoffset, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 31.0, NULL},
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
227 {"vqsquish", &lavc_param_rc_qsquish, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 99.0, NULL},
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
228 {"vqmod_amp", &lavc_param_rc_qmod_amp, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 99.0, NULL},
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
229 {"vqmod_freq", &lavc_param_rc_qmod_freq, CONF_TYPE_INT, 0, 0, 0, NULL},
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
230 {"vrc_eq", &lavc_param_rc_eq, CONF_TYPE_STRING, 0, 0, 0, NULL},
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
231 {"vrc_override", &lavc_param_rc_override_string, CONF_TYPE_STRING, 0, 0, 0, NULL},
32678
c48020f894a2 Increase the bitrate range maximum value.
ranma
parents: 32477
diff changeset
232 {"vrc_maxrate", &lavc_param_rc_max_rate, CONF_TYPE_INT, CONF_RANGE, 0, MAX_BITRATE, NULL},
c48020f894a2 Increase the bitrate range maximum value.
ranma
parents: 32477
diff changeset
233 {"vrc_minrate", &lavc_param_rc_min_rate, CONF_TYPE_INT, CONF_RANGE, 0, MAX_BITRATE, NULL},
c48020f894a2 Increase the bitrate range maximum value.
ranma
parents: 32477
diff changeset
234 {"vrc_buf_size", &lavc_param_rc_buffer_size, CONF_TYPE_INT, CONF_RANGE, 4, MAX_BITRATE, NULL},
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
235 {"vrc_buf_aggressivity", &lavc_param_rc_buffer_aggressivity, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 99.0, NULL},
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
236 {"vrc_init_cplx", &lavc_param_rc_initial_cplx, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 9999999.0, NULL},
15781
051bd310f04c Add vrc_init_occupancy to lavcopts
ranma
parents: 15385
diff changeset
237 {"vrc_init_occupancy", &lavc_param_rc_initial_buffer_occupancy, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL},
7152
5d8f64646cb5 dct selection support
michael
parents: 7127
diff changeset
238 {"vfdct", &lavc_param_fdct, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL},
8237
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
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
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
241 {"lumi_mask", &lavc_param_lumi_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL},
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
242 {"tcplx_mask", &lavc_param_temporal_cplx_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL},
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
243 {"scplx_mask", &lavc_param_spatial_cplx_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL},
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
244 {"p_mask", &lavc_param_p_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL},
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
245 {"naq", &lavc_param_normalize_aqp, CONF_TYPE_FLAG, 0, 0, 1, NULL},
7496
3d35a56799fc darkmasking & docs
michael
parents: 7490
diff changeset
246 {"dark_mask", &lavc_param_dark_masking, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL},
7504
568a1a0b4bec interlaced dct
michael
parents: 7496
diff changeset
247 {"ildct", &lavc_param_interlaced_dct, CONF_TYPE_FLAG, 0, 0, 1, NULL},
7564
24165f770c0d idct algo selection support
michael
parents: 7555
diff changeset
248 {"idct", &lavc_param_idct, CONF_TYPE_INT, CONF_RANGE, 0, 20, NULL},
8190
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
249 {"pred", &lavc_param_prediction_method, CONF_TYPE_INT, CONF_RANGE, 0, 20, NULL},
10778
c554ca1115de switched lavc_param_format to CONF_TYPE_IMGFMT
alex
parents: 10777
diff changeset
250 {"format", &lavc_param_format, CONF_TYPE_IMGFMT, 0, 0, 0, NULL},
8341
fd670708f87f specific debug output support
michael
parents: 8340
diff changeset
251 {"debug", &lavc_param_debug, CONF_TYPE_INT, CONF_RANGE, 0, 100000000, NULL},
8347
michael
parents: 8341
diff changeset
252 {"psnr", &lavc_param_psnr, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PSNR, NULL},
8803
324afc962aee qpel & pre ME improvements
michael
parents: 8709
diff changeset
253 {"precmp", &lavc_param_me_pre_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL},
8587
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
254 {"cmp", &lavc_param_me_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL},
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
255 {"subcmp", &lavc_param_me_sub_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL},
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
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
ce75cb364b19 ildctcmp, VSAD, VSSE
michael
parents: 11702
diff changeset
258 #ifdef FF_CMP_VSAD
ce75cb364b19 ildctcmp, VSAD, VSSE
michael
parents: 11702
diff changeset
259 {"ildctcmp", &lavc_param_ildct_cmp, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL},
ce75cb364b19 ildctcmp, VSAD, VSSE
michael
parents: 11702
diff changeset
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
324afc962aee qpel & pre ME improvements
michael
parents: 8709
diff changeset
262 {"predia", &lavc_param_pre_dia_size, CONF_TYPE_INT, CONF_RANGE, -2000, 2000, NULL},
8684
961e0c1e6e60 trellis quantization
michael
parents: 8587
diff changeset
263 {"dia", &lavc_param_dia_size, CONF_TYPE_INT, CONF_RANGE, -2000, 2000, NULL},
8587
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
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
9ecc80a7e56f Support lowdelay flag
reimar
parents: 24004
diff changeset
266 {"lowdelay", &lavc_param_lowdelay, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_LOW_DELAY, NULL},
8695
e74e46ba03cc lavc 4649
michael
parents: 8684
diff changeset
267 {"last_pred", &lavc_param_last_pred, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL},
8709
5ed237f98f82 motion estimation pre pass
michael
parents: 8695
diff changeset
268 {"preme", &lavc_param_pre_me, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL},
8803
324afc962aee qpel & pre ME improvements
michael
parents: 8709
diff changeset
269 {"subq", &lavc_param_me_subpel_quality, CONF_TYPE_INT, CONF_RANGE, 0, 8, NULL},
9508
40572852a933 motion estimation range limit
michael
parents: 9014
diff changeset
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
4521b6b6348e aic & umv
michael
parents: 9508
diff changeset
273 {"umv", &lavc_param_umv, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_UMV, NULL},
4521b6b6348e aic & umv
michael
parents: 9508
diff changeset
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
687eed75ac9c lavc 4663 / quantizer bias
michael
parents: 9571
diff changeset
284 {"ibias", &lavc_param_ibias, CONF_TYPE_INT, CONF_RANGE, -512, 512, NULL},
687eed75ac9c lavc 4663 / quantizer bias
michael
parents: 9571
diff changeset
285 {"pbias", &lavc_param_pbias, CONF_TYPE_INT, CONF_RANGE, -512, 512, NULL},
10291
bdb465bbf1f6 context model size & coder type options for FFV1
michael
parents: 10264
diff changeset
286 {"coder", &lavc_param_coder, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL},
bdb465bbf1f6 context model size & coder type options for FFV1
michael
parents: 10264
diff changeset
287 {"context", &lavc_param_context, CONF_TYPE_INT, CONF_RANGE, 0, 10, NULL},
10779
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
288 {"intra_matrix", &lavc_param_intra_matrix, CONF_TYPE_STRING, 0, 0, 0, NULL},
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
289 {"inter_matrix", &lavc_param_inter_matrix, CONF_TYPE_STRING, 0, 0, 0, NULL},
10963
michael
parents: 10881
diff changeset
290 {"cbp", &lavc_param_cbp, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CBP_RD, NULL},
10974
michael
parents: 10963
diff changeset
291 {"mv0", &lavc_param_mv0, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_MV0, NULL},
11363
222d2661f373 noise reduction
michael
parents: 11245
diff changeset
292 {"nr", &lavc_param_noise_reduction, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL},
11445
36bbf719cfa6 RD optimal lambda->qp support
michael
parents: 11375
diff changeset
293 #ifdef CODEC_FLAG_QP_RD
36bbf719cfa6 RD optimal lambda->qp support
michael
parents: 11375
diff changeset
294 {"qprd", &lavc_param_qp_rd, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QP_RD, NULL},
36bbf719cfa6 RD optimal lambda->qp support
michael
parents: 11375
diff changeset
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
e4c043ebf3a6 vismv, alt, ilme options
michael
parents: 11699
diff changeset
299 #ifdef CODEC_FLAG_ALT_SCAN
e4c043ebf3a6 vismv, alt, ilme options
michael
parents: 11699
diff changeset
300 {"alt", &lavc_param_alt, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_ALT_SCAN, NULL},
e4c043ebf3a6 vismv, alt, ilme options
michael
parents: 11699
diff changeset
301 #endif
e4c043ebf3a6 vismv, alt, ilme options
michael
parents: 11699
diff changeset
302 #ifdef CODEC_FLAG_INTERLACED_ME
e4c043ebf3a6 vismv, alt, ilme options
michael
parents: 11699
diff changeset
303 {"ilme", &lavc_param_ilme, CONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_ME, NULL},
e4c043ebf3a6 vismv, alt, ilme options
michael
parents: 11699
diff changeset
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
d04f65418a8e dc=11 fixed
michael
parents: 12764
diff changeset
311 {"dc", &lavc_param_dc_precision, CONF_TYPE_INT, CONF_RANGE, 8, 11, NULL},
15368
f2109e48a3c1 Add border masking support for lavc
gpoirier
parents: 15364
diff changeset
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
2f54892f0598 quantizer noise shaping
michael
parents: 11753
diff changeset
316 {"qns", &lavc_param_qns, CONF_TYPE_INT, CONF_RANGE, 0, 1000000, NULL},
12542
51212c1c6143 nsse weight
michael
parents: 12061
diff changeset
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
6770c410f4f3 support libavcodec's new sc_factor parameter
corey
parents: 17355
diff changeset
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
7d5343254436 -lavcopts aglobal
michael
parents: 17659
diff changeset
327 {"aglobal", &lavc_param_audio_global_header, CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL},
18489
adfadb4a26b5 support lavc mv0_threshold
corey
parents: 18004
diff changeset
328 {"mv0_threshold", &lavc_param_mv0_threshold, CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL},
18569
d8605d22bf62 document the recent changes in Snow.
lorenm
parents: 18489
diff changeset
329 {"refs", &lavc_param_refs, CONF_TYPE_INT, CONF_RANGE, 1, 16, NULL},
18572
c1d5652c1654 Support and document lavc b_sensitivity option.
corey
parents: 18569
diff changeset
330 {"b_sensitivity", &lavc_param_b_sensitivity, CONF_TYPE_INT, CONF_RANGE, 1, INT_MAX, NULL},
23209
c8908f1c609f add "level" as lavc option
cehoyos
parents: 22601
diff changeset
331 {"level", &lavc_param_level, CONF_TYPE_INT, CONF_RANGE, INT_MIN, INT_MAX, NULL},
26693
64bb979316d3 AVOption support for video encoders.
michael
parents: 26395
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
334 {NULL, NULL, 0, 0, 0, 0, NULL}
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
335 };
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
336
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
337 struct vf_priv_s {
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 8492
diff changeset
338 muxer_stream_t* mux;
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
339 AVCodecContext *context;
8413
2670aec42989 AVVideoFrame -> AVFrame
michael
parents: 8371
diff changeset
340 AVFrame *pic;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
341 AVCodec *codec;
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
342 FILE *stats_file;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
343 };
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
344
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
345 #define stats_file (vf->priv->stats_file)
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
346 #define mux_v (vf->priv->mux)
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
347 #define lavc_venc_context (vf->priv->context)
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
352 int width, int height, int d_width, int d_height,
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
353 unsigned int flags, unsigned int outfmt){
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
354 int size, i;
29674
10982a0eac1f Change type to avoid void * arithmetic.
reimar
parents: 29673
diff changeset
355 char *p;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28380
diff changeset
356
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
357 mux_v->bih->biWidth=width;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
358 mux_v->bih->biHeight=height;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
359 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8);
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
360
17355
7a99d216c6b7 convert some printfs to mp_msg
rathann
parents: 17261
diff changeset
361 mp_msg(MSGT_MENCODER, MSGL_INFO,"videocodec: libavcodec (%dx%d fourcc=%x [%.4s])\n",
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
362 mux_v->bih->biWidth, mux_v->bih->biHeight, mux_v->bih->biCompression,
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
363 (char *)&mux_v->bih->biCompression);
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
364
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
365 lavc_venc_context->width = width;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
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
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
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
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
370 lavc_venc_context->bit_rate = lavc_param_vbitrate*1000;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
371 else
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
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
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
376 lavc_venc_context->bit_rate_tolerance= lavc_param_vrate_tolerance*1000;
15307
58bd9c33864c LIBAVCODEC_BUILD >= 4754
michael
parents: 14892
diff changeset
377 lavc_venc_context->time_base= (AVRational){mux_v->h.dwScale, mux_v->h.dwRate};
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
378 lavc_venc_context->qmin= lavc_param_vqmin;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
379 lavc_venc_context->qmax= lavc_param_vqmax;
8492
81f01b7b3f6d mb qp limits
michael
parents: 8413
diff changeset
380 lavc_venc_context->mb_qmin= lavc_param_mb_qmin;
81f01b7b3f6d mb qp limits
michael
parents: 8413
diff changeset
381 lavc_venc_context->mb_qmax= lavc_param_mb_qmax;
11032
a3c8c02e78a5 use lagrange multipler instead of qscale
michael
parents: 11000
diff changeset
382 lavc_venc_context->lmin= (int)(FF_QP2LAMBDA * lavc_param_lmin + 0.5);
a3c8c02e78a5 use lagrange multipler instead of qscale
michael
parents: 11000
diff changeset
383 lavc_venc_context->lmax= (int)(FF_QP2LAMBDA * lavc_param_lmax + 0.5);
20756
ce57eb3e9b81 support lavc mblmin and mblmax
corey
parents: 20419
diff changeset
384 lavc_venc_context->mb_lmin= (int)(FF_QP2LAMBDA * lavc_param_mb_lmin + 0.5);
ce57eb3e9b81 support lavc mblmin and mblmax
corey
parents: 20419
diff changeset
385 lavc_venc_context->mb_lmax= (int)(FF_QP2LAMBDA * lavc_param_mb_lmax + 0.5);
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
386 lavc_venc_context->max_qdiff= lavc_param_vqdiff;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
387 lavc_venc_context->qcompress= lavc_param_vqcompress;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
388 lavc_venc_context->qblur= lavc_param_vqblur;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
389 lavc_venc_context->max_b_frames= lavc_param_vmax_b_frames;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
390 lavc_venc_context->b_quant_factor= lavc_param_vb_qfactor;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
391 lavc_venc_context->rc_strategy= lavc_param_vrc_strategy;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
392 lavc_venc_context->b_frame_strategy= lavc_param_vb_strategy;
14786
e1bf5e07962f 100l to michael :))))
rfelker
parents: 14775
diff changeset
393 lavc_venc_context->b_quant_offset= (int)(FF_QP2LAMBDA * lavc_param_vb_qoffset + 0.5);
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
394 lavc_venc_context->luma_elim_threshold= lavc_param_luma_elim_threshold;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
395 lavc_venc_context->chroma_elim_threshold= lavc_param_chroma_elim_threshold;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
396 lavc_venc_context->rtp_payload_size= lavc_param_packet_size;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
397 lavc_venc_context->strict_std_compliance= lavc_param_strict;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
398 lavc_venc_context->i_quant_factor= lavc_param_vi_qfactor;
14786
e1bf5e07962f 100l to michael :))))
rfelker
parents: 14775
diff changeset
399 lavc_venc_context->i_quant_offset= (int)(FF_QP2LAMBDA * lavc_param_vi_qoffset + 0.5);
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
400 lavc_venc_context->rc_qsquish= lavc_param_rc_qsquish;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
401 lavc_venc_context->rc_qmod_amp= lavc_param_rc_qmod_amp;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
402 lavc_venc_context->rc_qmod_freq= lavc_param_rc_qmod_freq;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
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
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
406 lavc_venc_context->rc_max_rate= lavc_param_rc_max_rate*1000;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
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
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
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
051bd310f04c Add vrc_init_occupancy to lavcopts
ranma
parents: 15385
diff changeset
412 lavc_venc_context->rc_initial_buffer_occupancy=
051bd310f04c Add vrc_init_occupancy to lavcopts
ranma
parents: 15385
diff changeset
413 lavc_venc_context->rc_buffer_size *
051bd310f04c Add vrc_init_occupancy to lavcopts
ranma
parents: 15385
diff changeset
414 lavc_param_rc_initial_buffer_occupancy;
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
415 lavc_venc_context->rc_buffer_aggressivity= lavc_param_rc_buffer_aggressivity;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
416 lavc_venc_context->rc_initial_cplx= lavc_param_rc_initial_cplx;
8341
fd670708f87f specific debug output support
michael
parents: 8340
diff changeset
417 lavc_venc_context->debug= lavc_param_debug;
8695
e74e46ba03cc lavc 4649
michael
parents: 8684
diff changeset
418 lavc_venc_context->last_predictor_count= lavc_param_last_pred;
8709
5ed237f98f82 motion estimation pre pass
michael
parents: 8695
diff changeset
419 lavc_venc_context->pre_me= lavc_param_pre_me;
8803
324afc962aee qpel & pre ME improvements
michael
parents: 8709
diff changeset
420 lavc_venc_context->me_pre_cmp= lavc_param_me_pre_cmp;
324afc962aee qpel & pre ME improvements
michael
parents: 8709
diff changeset
421 lavc_venc_context->pre_dia_size= lavc_param_pre_dia_size;
324afc962aee qpel & pre ME improvements
michael
parents: 8709
diff changeset
422 lavc_venc_context->me_subpel_quality= lavc_param_me_subpel_quality;
9508
40572852a933 motion estimation range limit
michael
parents: 9014
diff changeset
423 lavc_venc_context->me_range= lavc_param_me_range;
9645
687eed75ac9c lavc 4663 / quantizer bias
michael
parents: 9571
diff changeset
424 lavc_venc_context->intra_quant_bias= lavc_param_ibias;
687eed75ac9c lavc 4663 / quantizer bias
michael
parents: 9571
diff changeset
425 lavc_venc_context->inter_quant_bias= lavc_param_pbias;
10291
bdb465bbf1f6 context model size & coder type options for FFV1
michael
parents: 10264
diff changeset
426 lavc_venc_context->coder_type= lavc_param_coder;
bdb465bbf1f6 context model size & coder type options for FFV1
michael
parents: 10264
diff changeset
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
222d2661f373 noise reduction
michael
parents: 11245
diff changeset
429 lavc_venc_context->noise_reduction= lavc_param_noise_reduction;
11910
2f54892f0598 quantizer noise shaping
michael
parents: 11753
diff changeset
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
51212c1c6143 nsse weight
michael
parents: 12061
diff changeset
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
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
438 if (lavc_param_intra_matrix)
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
439 {
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
440 char *tmp;
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
441
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
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
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
444
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
445 i = 0;
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
446 while ((tmp = strsep(&lavc_param_intra_matrix, ",")) && (i < 64))
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
447 {
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
448 if (!tmp || (tmp && !strlen(tmp)))
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
449 break;
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
450 lavc_venc_context->intra_matrix[i++] = atoi(tmp);
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
451 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28380
diff changeset
452
10779
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
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
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
455 else
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
456 mp_msg(MSGT_MENCODER, MSGL_V, "Using user specified intra matrix\n");
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
457 }
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
458 if (lavc_param_inter_matrix)
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
459 {
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
460 char *tmp;
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
461
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
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
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
464
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
465 i = 0;
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
466 while ((tmp = strsep(&lavc_param_inter_matrix, ",")) && (i < 64))
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
467 {
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
468 if (!tmp || (tmp && !strlen(tmp)))
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
469 break;
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
470 lavc_venc_context->inter_matrix[i++] = atoi(tmp);
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
471 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28380
diff changeset
472
10779
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
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
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
475 else
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
476 mp_msg(MSGT_MENCODER, MSGL_V, "Using user specified inter matrix\n");
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
477 }
9508
40572852a933 motion estimation range limit
michael
parents: 9014
diff changeset
478
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
479 p= lavc_param_rc_override_string;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
480 for(i=0; p; i++){
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
481 int start, end, q;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
482 int e=sscanf(p, "%d,%d,%d", &start, &end, &q);
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
483 if(e!=3){
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
484 mp_msg(MSGT_MENCODER,MSGL_ERR,"error parsing vrc_q\n");
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
485 return 0;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
486 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28380
diff changeset
487 lavc_venc_context->rc_override=
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
488 realloc(lavc_venc_context->rc_override, sizeof(RcOverride)*(i+1));
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
489 lavc_venc_context->rc_override[i].start_frame= start;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
490 lavc_venc_context->rc_override[i].end_frame = end;
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
491 if(q>0){
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
492 lavc_venc_context->rc_override[i].qscale= q;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
493 lavc_venc_context->rc_override[i].quality_factor= 1.0;
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
494 }
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
495 else{
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
496 lavc_venc_context->rc_override[i].qscale= 0;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
497 lavc_venc_context->rc_override[i].quality_factor= -q/100.0;
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
498 }
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
499 p= strchr(p, '/');
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
500 if(p) p++;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
501 }
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
502 lavc_venc_context->rc_override_count=i;
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
503
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
504 lavc_venc_context->mpeg_quant=lavc_param_mpeg_quant;
7152
5d8f64646cb5 dct selection support
michael
parents: 7127
diff changeset
505
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
506 lavc_venc_context->dct_algo= lavc_param_fdct;
7564
24165f770c0d idct algo selection support
michael
parents: 7555
diff changeset
507 lavc_venc_context->idct_algo= lavc_param_idct;
7152
5d8f64646cb5 dct selection support
michael
parents: 7127
diff changeset
508
7490
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
509 lavc_venc_context->lumi_masking= lavc_param_lumi_masking;
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
510 lavc_venc_context->temporal_cplx_masking= lavc_param_temporal_cplx_masking;
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
511 lavc_venc_context->spatial_cplx_masking= lavc_param_spatial_cplx_masking;
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
512 lavc_venc_context->p_masking= lavc_param_p_masking;
7496
3d35a56799fc darkmasking & docs
michael
parents: 7490
diff changeset
513 lavc_venc_context->dark_masking= lavc_param_dark_masking;
15368
f2109e48a3c1 Add border masking support for lavc
gpoirier
parents: 15364
diff changeset
514 lavc_venc_context->border_masking = lavc_param_border_masking;
7490
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
515
8237
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
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
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
518 int par_width, par_height, e;
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
519 float ratio=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28380
diff changeset
520
8237
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
521 e= sscanf (lavc_param_aspect, "%d/%d", &par_width, &par_height);
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
522 if(e==2){
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
523 if(par_height)
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
524 ratio= (float)par_width / (float)par_height;
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
525 }else{
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
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
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
528
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
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
656a1b45b309 Use aspect from encoder for AVI vprp header
ranma
parents: 11930
diff changeset
534 mux_v->aspect = ratio;
8237
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
535 mp_dbg(MSGT_MENCODER, MSGL_DBG2, "aspect_ratio: %f\n", ratio);
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
536 } else {
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
537 mp_dbg(MSGT_MENCODER, MSGL_ERR, "aspect ratio: cannot parse \"%s\"\n", lavc_param_aspect);
d7bc284a2b4a aspect ratio clenaup
michael
parents: 8195
diff changeset
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
michael
parents: 11363
diff changeset
542 lavc_venc_context->sample_aspect_ratio = av_d2q((float)d_width/d_height*height / width, 255);
12061
656a1b45b309 Use aspect from encoder for AVI vprp header
ranma
parents: 11930
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
546 /* keyframe interval */
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
547 if (lavc_param_keyint >= 0) /* != -1 */
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
548 lavc_venc_context->gop_size = lavc_param_keyint;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
549 else
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
550 lavc_venc_context->gop_size = 250; /* default */
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
551
10498
17391ba6c53b mb decision stuff
michael
parents: 10302
diff changeset
552 lavc_venc_context->flags = 0;
17391ba6c53b mb decision stuff
michael
parents: 10302
diff changeset
553 if (lavc_param_mb_decision)
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
17391ba6c53b mb decision stuff
michael
parents: 10302
diff changeset
556 lavc_venc_context->mb_decision= lavc_param_mb_decision;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
557 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
558
8587
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
559 lavc_venc_context->me_cmp= lavc_param_me_cmp;
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
560 lavc_venc_context->me_sub_cmp= lavc_param_me_sub_cmp;
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
561 lavc_venc_context->mb_cmp= lavc_param_mb_cmp;
11753
ce75cb364b19 ildctcmp, VSAD, VSSE
michael
parents: 11702
diff changeset
562 #ifdef FF_CMP_VSAD
ce75cb364b19 ildctcmp, VSAD, VSSE
michael
parents: 11702
diff changeset
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
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
565 lavc_venc_context->dia_size= lavc_param_dia_size;
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
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
9ecc80a7e56f Support lowdelay flag
reimar
parents: 24004
diff changeset
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
4521b6b6348e aic & umv
michael
parents: 9508
diff changeset
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
4521b6b6348e aic & umv
michael
parents: 9508
diff changeset
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
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
575 lavc_venc_context->flags|= lavc_param_v4mv ? CODEC_FLAG_4MV : 0;
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
576 lavc_venc_context->flags|= lavc_param_data_partitioning;
10963
michael
parents: 10881
diff changeset
577 lavc_venc_context->flags|= lavc_param_cbp;
10974
michael
parents: 10963
diff changeset
578 lavc_venc_context->flags|= lavc_param_mv0;
11445
36bbf719cfa6 RD optimal lambda->qp support
michael
parents: 11375
diff changeset
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
e4c043ebf3a6 vismv, alt, ilme options
michael
parents: 11699
diff changeset
581 lavc_venc_context->flags|= lavc_param_alt;
e4c043ebf3a6 vismv, alt, ilme options
michael
parents: 11699
diff changeset
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
71bd93e71a97 Restore grayscale decoding support with FFmpeg.
diego
parents: 26166
diff changeset
587 if(lavc_param_gray) lavc_venc_context->flags|= CODEC_FLAG_GRAY;
6461
michael
parents: 6255
diff changeset
588
7490
ca3aa049c9d4 adaptive quant support ...
michael
parents: 7444
diff changeset
589 if(lavc_param_normalize_aqp) lavc_venc_context->flags|= CODEC_FLAG_NORMALIZE_AQP;
7504
568a1a0b4bec interlaced dct
michael
parents: 7496
diff changeset
590 if(lavc_param_interlaced_dct) lavc_venc_context->flags|= CODEC_FLAG_INTERLACED_DCT;
8347
michael
parents: 8341
diff changeset
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
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
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
6770c410f4f3 support libavcodec's new sc_factor parameter
corey
parents: 17355
diff changeset
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
adfadb4a26b5 support lavc mv0_threshold
corey
parents: 18004
diff changeset
604 lavc_venc_context->mv0_threshold = lavc_param_mv0_threshold;
18569
d8605d22bf62 document the recent changes in Snow.
lorenm
parents: 18489
diff changeset
605 lavc_venc_context->refs = lavc_param_refs;
18572
c1d5652c1654 Support and document lavc b_sensitivity option.
corey
parents: 18569
diff changeset
606 lavc_venc_context->b_sensitivity = lavc_param_b_sensitivity;
23209
c8908f1c609f add "level" as lavc option
cehoyos
parents: 22601
diff changeset
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
64bb979316d3 AVOption support for video encoders.
michael
parents: 26395
diff changeset
609 if(lavc_param_avopt){
64bb979316d3 AVOption support for video encoders.
michael
parents: 26395
diff changeset
610 if(parse_avopts(lavc_venc_context, lavc_param_avopt) < 0){
64bb979316d3 AVOption support for video encoders.
michael
parents: 26395
diff changeset
611 mp_msg(MSGT_MENCODER,MSGL_ERR, "Your options /%s/ look like gibberish to me pal\n", lavc_param_avopt);
64bb979316d3 AVOption support for video encoders.
michael
parents: 26395
diff changeset
612 return 0;
64bb979316d3 AVOption support for video encoders.
michael
parents: 26395
diff changeset
613 }
64bb979316d3 AVOption support for video encoders.
michael
parents: 26395
diff changeset
614 }
64bb979316d3 AVOption support for video encoders.
michael
parents: 26395
diff changeset
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
f8b0d1d14d39 lossless ff mjpeg encoding
michael
parents: 10293
diff changeset
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
f2586f1a3a96 support for new stuff (lavc internal 2pass, ...)
michael
parents: 5677
diff changeset
622 /* lavc internal 2pass bitrate control */
6673
d6adae1af0e3 #ifdef'ed divx4 2pass code - idea by Diego
arpi
parents: 6461
diff changeset
623 switch(lavc_param_vpass){
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
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
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
628 if(stats_file==NULL){
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
629 mp_msg(MSGT_MENCODER,MSGL_ERR,"2pass failed: filename=%s\n", passtmpfile);
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
630 return 0;
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
631 }
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
632 fseek(stats_file, 0, SEEK_END);
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
633 size= ftell(stats_file);
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
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
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
637 lavc_venc_context->stats_in[size]=0;
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
638
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
639 if(fread(lavc_venc_context->stats_in, size, 1, stats_file)<1){
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
640 mp_msg(MSGT_MENCODER,MSGL_ERR,"2pass failed: reading from filename=%s\n", passtmpfile);
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
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
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
677 break;
6673
d6adae1af0e3 #ifdef'ed divx4 2pass code - idea by Diego
arpi
parents: 6461
diff changeset
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
f2586f1a3a96 support for new stuff (lavc internal 2pass, ...)
michael
parents: 5677
diff changeset
680
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
681 lavc_venc_context->me_method = ME_ZERO+lavc_param_vme;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
682
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
683 /* fixed qscale :p */
18569
d8605d22bf62 document the recent changes in Snow.
lorenm
parents: 18489
diff changeset
684 if (lavc_param_vqscale >= 0.0)
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
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
a3c8c02e78a5 use lagrange multipler instead of qscale
michael
parents: 11000
diff changeset
689 vf->priv->pic->quality = (int)(FF_QP2LAMBDA * lavc_param_vqscale + 0.5);
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
694
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
695 if (avcodec_open(lavc_venc_context, vf->priv->codec) != 0) {
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
696 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CantOpenCodec);
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
697 return 0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
698 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
699
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
700 if (lavc_venc_context->codec->encode == NULL) {
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
701 mp_msg(MSGT_MENCODER,MSGL_ERR,"avcodec init failed (ctx->codec->encode == NULL)!\n");
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
702 return 0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
703 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28380
diff changeset
704
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
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
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
709 if(lavc_venc_context->extradata_size){
32105
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
710 mux_v->bih= realloc(mux_v->bih, sizeof(*mux_v->bih) + lavc_venc_context->extradata_size);
8190
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
711 memcpy(mux_v->bih + 1, lavc_venc_context->extradata, lavc_venc_context->extradata_size);
32105
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
712 mux_v->bih->biSize= sizeof(*mux_v->bih) + lavc_venc_context->extradata_size;
8190
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
713 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28380
diff changeset
714
17659
92ac78a93625 Fix video delay when encoding with B-frames.
corey
parents: 17523
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
717 return 1;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
718 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
721
14080
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
722 switch(request){
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
723 case VFCTRL_FLUSH_FRAMES:
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
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
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
726 return CONTROL_TRUE;
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
727 default:
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
728 return CONTROL_UNKNOWN;
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
729 }
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
730 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
733 switch(fmt){
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
734 case IMGFMT_YV12:
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
735 case IMGFMT_IYUV:
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
736 case IMGFMT_I420:
10778
c554ca1115de switched lavc_param_format to CONF_TYPE_IMGFMT
alex
parents: 10777
diff changeset
737 if(lavc_param_format == IMGFMT_YV12)
8190
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
738 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE;
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
739 break;
10293
f9db7d9680ba YUV 444 411 410 support
michael
parents: 10291
diff changeset
740 case IMGFMT_411P:
10778
c554ca1115de switched lavc_param_format to CONF_TYPE_IMGFMT
alex
parents: 10777
diff changeset
741 if(lavc_param_format == IMGFMT_411P)
10293
f9db7d9680ba YUV 444 411 410 support
michael
parents: 10291
diff changeset
742 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE;
f9db7d9680ba YUV 444 411 410 support
michael
parents: 10291
diff changeset
743 break;
8190
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
744 case IMGFMT_422P:
10778
c554ca1115de switched lavc_param_format to CONF_TYPE_IMGFMT
alex
parents: 10777
diff changeset
745 if(lavc_param_format == IMGFMT_422P)
8190
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
746 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE;
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
747 break;
10293
f9db7d9680ba YUV 444 411 410 support
michael
parents: 10291
diff changeset
748 case IMGFMT_444P:
10778
c554ca1115de switched lavc_param_format to CONF_TYPE_IMGFMT
alex
parents: 10777
diff changeset
749 if(lavc_param_format == IMGFMT_444P)
10293
f9db7d9680ba YUV 444 411 410 support
michael
parents: 10291
diff changeset
750 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE;
f9db7d9680ba YUV 444 411 410 support
michael
parents: 10291
diff changeset
751 break;
f9db7d9680ba YUV 444 411 410 support
michael
parents: 10291
diff changeset
752 case IMGFMT_YVU9:
10778
c554ca1115de switched lavc_param_format to CONF_TYPE_IMGFMT
alex
parents: 10777
diff changeset
753 if(lavc_param_format == IMGFMT_YVU9)
10293
f9db7d9680ba YUV 444 411 410 support
michael
parents: 10291
diff changeset
754 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE;
f9db7d9680ba YUV 444 411 410 support
michael
parents: 10291
diff changeset
755 break;
10302
f8b0d1d14d39 lossless ff mjpeg encoding
michael
parents: 10293
diff changeset
756 case IMGFMT_BGR32:
10778
c554ca1115de switched lavc_param_format to CONF_TYPE_IMGFMT
alex
parents: 10777
diff changeset
757 if(lavc_param_format == IMGFMT_BGR32)
10302
f8b0d1d14d39 lossless ff mjpeg encoding
michael
parents: 10293
diff changeset
758 return VFCAP_CSP_SUPPORTED | VFCAP_ACCEPT_STRIDE;
f8b0d1d14d39 lossless ff mjpeg encoding
michael
parents: 10293
diff changeset
759 break;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
760 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
761 return 0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
762 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
763
8347
michael
parents: 8341
diff changeset
764 static double psnr(double d){
michael
parents: 8341
diff changeset
765 if(d==0) return INFINITY;
michael
parents: 8341
diff changeset
766 return -10.0*log(d)/log(10);
michael
parents: 8341
diff changeset
767 }
michael
parents: 8341
diff changeset
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
2670aec42989 AVVideoFrame -> AVFrame
michael
parents: 8371
diff changeset
770 AVFrame *pic= vf->priv->pic;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
771
8339
ff0bddb59e81 support for lavc build 4641
michael
parents: 8237
diff changeset
772 pic->data[0]=mpi->planes[0];
ff0bddb59e81 support for lavc build 4641
michael
parents: 8237
diff changeset
773 pic->data[1]=mpi->planes[1];
ff0bddb59e81 support for lavc build 4641
michael
parents: 8237
diff changeset
774 pic->data[2]=mpi->planes[2];
ff0bddb59e81 support for lavc build 4641
michael
parents: 8237
diff changeset
775 pic->linesize[0]=mpi->stride[0];
ff0bddb59e81 support for lavc build 4641
michael
parents: 8237
diff changeset
776 pic->linesize[1]=mpi->stride[1];
ff0bddb59e81 support for lavc build 4641
michael
parents: 8237
diff changeset
777 pic->linesize[2]=mpi->stride[2];
32477
2f95644eb8cb Support for -force-key-frames for ve_lavc.
cigaes
parents: 32105
diff changeset
778 pic->pict_type = is_forced_key_frame(pts) ? FF_I_TYPE : 0;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
791 }
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
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
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
794 const char pict_type_char[5]= {'?', 'I', 'P', 'B', 'S'};
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
795 int out_size;
17907
d8a6e0c22f0c 10l (null pointer dereference)
michael
parents: 17906
diff changeset
796 double dts;
14080
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
797
23954
7d7f0c707be4 make timestamps out of hot air
michael
parents: 23953
diff changeset
798 if(pts == MP_NOPTS_VALUE)
7d7f0c707be4 make timestamps out of hot air
michael
parents: 23953
diff changeset
799 pts= lavc_venc_context->frame_number * av_q2d(lavc_venc_context->time_base);
7d7f0c707be4 make timestamps out of hot air
michael
parents: 23953
diff changeset
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
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
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
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
805 #else
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
806 if(pts != MP_NOPTS_VALUE)
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
807 pic->pts= floor(pts / av_q2d(lavc_venc_context->time_base) + 0.5);
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
808 else
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
809 pic->pts= MP_NOPTS_VALUE;
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
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
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
812 out_size = avcodec_encode_video(lavc_venc_context, mux_v->buffer, mux_v->buffer_size,
8339
ff0bddb59e81 support for lavc build 4641
michael
parents: 8237
diff changeset
813 pic);
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
d8a6e0c22f0c 10l (null pointer dereference)
michael
parents: 17906
diff changeset
823 dts= pts - lavc_venc_context->delay * av_q2d(lavc_venc_context->time_base);
d8a6e0c22f0c 10l (null pointer dereference)
michael
parents: 17906
diff changeset
824 else
d8a6e0c22f0c 10l (null pointer dereference)
michael
parents: 17906
diff changeset
825 dts= MP_NOPTS_VALUE;
17909
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
826 #if 0
17907
d8a6e0c22f0c 10l (null pointer dereference)
michael
parents: 17906
diff changeset
827 pts= lavc_venc_context->coded_frame->opaque ?
d8a6e0c22f0c 10l (null pointer dereference)
michael
parents: 17906
diff changeset
828 *(double*)lavc_venc_context->coded_frame->opaque
d8a6e0c22f0c 10l (null pointer dereference)
michael
parents: 17906
diff changeset
829 : MP_NOPTS_VALUE;
17909
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
830 #else
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
831 if(lavc_venc_context->coded_frame->pts != MP_NOPTS_VALUE)
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
832 pts= lavc_venc_context->coded_frame->pts * av_q2d(lavc_venc_context->time_base);
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
833 else
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
834 pts= MP_NOPTS_VALUE;
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
835 assert(MP_NOPTS_VALUE == AV_NOPTS_VALUE);
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
836 #endif
f7048eaffa85 lavc doesnt pass AVFrame.opaque around :/
michael
parents: 17907
diff changeset
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
92ac78a93625 Fix video delay when encoding with B-frames.
corey
parents: 17523
diff changeset
839 ++mux_v->encoder_delay;
14080
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
840 return 0;
17659
92ac78a93625 Fix video delay when encoding with B-frames.
corey
parents: 17523
diff changeset
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
d8a6e0c22f0c 10l (null pointer dereference)
michael
parents: 17906
diff changeset
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
d8a6e0c22f0c 10l (null pointer dereference)
michael
parents: 17906
diff changeset
846 lavc_venc_context->coded_frame->opaque= NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28380
diff changeset
847
8347
michael
parents: 8341
diff changeset
848 /* store psnr / pict size / type / qscale */
michael
parents: 8341
diff changeset
849 if(lavc_param_psnr){
michael
parents: 8341
diff changeset
850 static FILE *fvstats=NULL;
michael
parents: 8341
diff changeset
851 char filename[20];
michael
parents: 8341
diff changeset
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
98ae45a0d03a Fix serious breakage, 10000l !
rguyom
parents: 9865
diff changeset
854 int8_t *q;
8347
michael
parents: 8341
diff changeset
855
michael
parents: 8341
diff changeset
856 if(!fvstats) {
michael
parents: 8341
diff changeset
857 time_t today2;
michael
parents: 8341
diff changeset
858 struct tm *today;
michael
parents: 8341
diff changeset
859 today2 = time(NULL);
michael
parents: 8341
diff changeset
860 today = localtime(&today2);
michael
parents: 8341
diff changeset
861 sprintf(filename, "psnr_%02d%02d%02d.log", today->tm_hour,
michael
parents: 8341
diff changeset
862 today->tm_min, today->tm_sec);
michael
parents: 8341
diff changeset
863 fvstats = fopen(filename,"w");
michael
parents: 8341
diff changeset
864 if(!fvstats) {
michael
parents: 8341
diff changeset
865 perror("fopen");
michael
parents: 8341
diff changeset
866 lavc_param_psnr=0; // disable block
12983
697af08200c4 more precise wording
diego
parents: 12871
diff changeset
867 mp_msg(MSGT_MENCODER,MSGL_ERR,"Can't open %s for writing. Check its permissions.\n",filename);
14080
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
868 return -1;
8347
michael
parents: 8341
diff changeset
869 /*exit(1);*/
michael
parents: 8341
diff changeset
870 }
michael
parents: 8341
diff changeset
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
98ae45a0d03a Fix serious breakage, 10000l !
rguyom
parents: 9865
diff changeset
874 q = lavc_venc_context->coded_frame->qscale_table;
98ae45a0d03a Fix serious breakage, 10000l !
rguyom
parents: 9865
diff changeset
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
a3c8c02e78a5 use lagrange multipler instead of qscale
michael
parents: 11000
diff changeset
886 quality = lavc_venc_context->coded_frame->quality / (float)FF_QP2LAMBDA;
8347
michael
parents: 8341
diff changeset
887
michael
parents: 8341
diff changeset
888 fprintf(fvstats, "%6d, %2.2f, %6d, %2.2f, %2.2f, %2.2f, %2.2f %c\n",
8413
2670aec42989 AVVideoFrame -> AVFrame
michael
parents: 8371
diff changeset
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
michael
parents: 8341
diff changeset
891 out_size,
8413
2670aec42989 AVVideoFrame -> AVFrame
michael
parents: 8371
diff changeset
892 psnr(lavc_venc_context->coded_frame->error[0]/f),
2670aec42989 AVVideoFrame -> AVFrame
michael
parents: 8371
diff changeset
893 psnr(lavc_venc_context->coded_frame->error[1]*4/f),
2670aec42989 AVVideoFrame -> AVFrame
michael
parents: 8371
diff changeset
894 psnr(lavc_venc_context->coded_frame->error[2]*4/f),
2670aec42989 AVVideoFrame -> AVFrame
michael
parents: 8371
diff changeset
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)),
2670aec42989 AVVideoFrame -> AVFrame
michael
parents: 8371
diff changeset
896 pict_type_char[lavc_venc_context->coded_frame->pict_type]
8347
michael
parents: 8341
diff changeset
897 );
michael
parents: 8341
diff changeset
898 }
14080
b4532e84bb4d suppress dummy frames due to B-frame delay.
lorenm
parents: 14057
diff changeset
899 return out_size;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
900 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
michael
parents: 8341
diff changeset
904 if(lavc_param_psnr){
michael
parents: 8341
diff changeset
905 double f= lavc_venc_context->width*lavc_venc_context->height*255.0*255.0;
8413
2670aec42989 AVVideoFrame -> AVFrame
michael
parents: 8371
diff changeset
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
michael
parents: 8341
diff changeset
909 psnr(lavc_venc_context->error[0]/f),
michael
parents: 8341
diff changeset
910 psnr(lavc_venc_context->error[1]*4/f),
michael
parents: 8341
diff changeset
911 psnr(lavc_venc_context->error[2]*4/f),
michael
parents: 8341
diff changeset
912 psnr((lavc_venc_context->error[0]+lavc_venc_context->error[1]+lavc_venc_context->error[2])/(f*1.5))
michael
parents: 8341
diff changeset
913 );
michael
parents: 8341
diff changeset
914 }
michael
parents: 8341
diff changeset
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
1590742cf1c4 support for user specified intra/inter matrices
alex
parents: 10778
diff changeset
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
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
921
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
922 if(stats_file) fclose(stats_file);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28380
diff changeset
923
7088
9a0017ee11aa support for the new ratecontrol code
michael
parents: 7039
diff changeset
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
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
926
14431
0c10f923746e change malloc and free to av_ variants where needed.
reimar
parents: 14080
diff changeset
927 av_freep(&vf->priv->context);
5551
73978162b6a1 soem fixes
arpi
parents: 5550
diff changeset
928 }
73978162b6a1 soem fixes
arpi
parents: 5550
diff changeset
929
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
930 //===========================================================================//
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
931
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
932 static int vf_open(vf_instance_t *vf, char* args){
5551
73978162b6a1 soem fixes
arpi
parents: 5550
diff changeset
933 vf->uninit=uninit;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
934 vf->config=config;
14878
5723c4b2a2ea fixes for encoding of multiple files
henry
parents: 14786
diff changeset
935 vf->default_caps=VFCAP_CONSTANT;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
936 vf->control=control;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
937 vf->query_format=query_format;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
938 vf->put_image=put_image;
32103
04da24405c6c Replace malloc+memset by calloc.
reimar
parents: 32064
diff changeset
939 vf->priv=calloc(1, sizeof(struct vf_priv_s));
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 8492
diff changeset
940 vf->priv->mux=(muxer_stream_t*)args;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
947 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+28);
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
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
633a4ed68311 new lavc codec: ffvhuff
lorenm
parents: 13669
diff changeset
950 else if (lavc_param_vcodec && (!strcasecmp(lavc_param_vcodec, "huffyuv")
633a4ed68311 new lavc codec: ffvhuff
lorenm
parents: 13669
diff changeset
951 || !strcasecmp(lavc_param_vcodec, "ffvhuff")))
8190
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
952 {
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
953 /* XXX: hack: huffyuv needs to store huffman tables (allthough we dunno the size yet ...) */
32105
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
954 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+1000);
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
955 mux_v->bih->biSize=sizeof(*mux_v->bih)+1000;
8190
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
956 }
10131
michael
parents: 9993
diff changeset
957 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "asv1"))
michael
parents: 9993
diff changeset
958 {
32105
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
959 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+8);
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
960 mux_v->bih->biSize=sizeof(*mux_v->bih)+8;
10131
michael
parents: 9993
diff changeset
961 }
10777
8313be76ae69 asv2 encoding
michael
parents: 10699
diff changeset
962 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "asv2"))
8313be76ae69 asv2 encoding
michael
parents: 10699
diff changeset
963 {
32105
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
964 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+8);
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
965 mux_v->bih->biSize=sizeof(*mux_v->bih)+8;
10777
8313be76ae69 asv2 encoding
michael
parents: 10699
diff changeset
966 }
8587
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
967 else if (lavc_param_vcodec && !strcasecmp(lavc_param_vcodec, "wmv2"))
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
968 {
32105
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
969 mux_v->bih=calloc(1, sizeof(*mux_v->bih)+4);
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
970 mux_v->bih->biSize=sizeof(*mux_v->bih)+4;
8587
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
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
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
974 mux_v->bih=calloc(1, sizeof(*mux_v->bih));
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 32103
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
977 mux_v->bih->biWidth=0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
978 mux_v->bih->biHeight=0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
979 mux_v->bih->biPlanes=1;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
980 mux_v->bih->biBitCount=24;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
981 if (!lavc_param_vcodec)
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
984 return 0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
985 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
986
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
987 if (!strcasecmp(lavc_param_vcodec, "mpeg1") || !strcasecmp(lavc_param_vcodec, "mpeg1video"))
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
988 mux_v->bih->biCompression = mmioFOURCC('m', 'p', 'g', '1');
10699
michael
parents: 10594
diff changeset
989 else if (!strcasecmp(lavc_param_vcodec, "mpeg2") || !strcasecmp(lavc_param_vcodec, "mpeg2video"))
michael
parents: 10594
diff changeset
990 mux_v->bih->biCompression = mmioFOURCC('m', 'p', 'g', '2');
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
991 else if (!strcasecmp(lavc_param_vcodec, "h263") || !strcasecmp(lavc_param_vcodec, "h263p"))
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
992 mux_v->bih->biCompression = mmioFOURCC('h', '2', '6', '3');
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
993 else if (!strcasecmp(lavc_param_vcodec, "rv10"))
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
994 mux_v->bih->biCompression = mmioFOURCC('R', 'V', '1', '0');
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
995 else if (!strcasecmp(lavc_param_vcodec, "mjpeg"))
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
996 mux_v->bih->biCompression = mmioFOURCC('M', 'J', 'P', 'G');
10302
f8b0d1d14d39 lossless ff mjpeg encoding
michael
parents: 10293
diff changeset
997 else if (!strcasecmp(lavc_param_vcodec, "ljpeg"))
f8b0d1d14d39 lossless ff mjpeg encoding
michael
parents: 10293
diff changeset
998 mux_v->bih->biCompression = mmioFOURCC('L', 'J', 'P', 'G');
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
999 else if (!strcasecmp(lavc_param_vcodec, "mpeg4"))
14766
35001ce5b853 switch from DIVX -> FMP4 fourcc for libavcodec
michael
parents: 14431
diff changeset
1000 mux_v->bih->biCompression = mmioFOURCC('F', 'M', 'P', '4');
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1001 else if (!strcasecmp(lavc_param_vcodec, "msmpeg4"))
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1002 mux_v->bih->biCompression = mmioFOURCC('d', 'i', 'v', '3');
5972
80c25f6a535f msmpeg4v2 -> MP42 mapping, requested by Gabucino
alex
parents: 5781
diff changeset
1003 else if (!strcasecmp(lavc_param_vcodec, "msmpeg4v2"))
80c25f6a535f msmpeg4v2 -> MP42 mapping, requested by Gabucino
alex
parents: 5781
diff changeset
1004 mux_v->bih->biCompression = mmioFOURCC('M', 'P', '4', '2');
6461
michael
parents: 6255
diff changeset
1005 else if (!strcasecmp(lavc_param_vcodec, "wmv1"))
michael
parents: 6255
diff changeset
1006 mux_v->bih->biCompression = mmioFOURCC('W', 'M', 'V', '1');
8587
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
1007 else if (!strcasecmp(lavc_param_vcodec, "wmv2"))
58e788758611 lavc 4647
michael
parents: 8585
diff changeset
1008 mux_v->bih->biCompression = mmioFOURCC('W', 'M', 'V', '2');
8190
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
1009 else if (!strcasecmp(lavc_param_vcodec, "huffyuv"))
c3716e345dfb ffhuffyuv
michael
parents: 8034
diff changeset
1010 mux_v->bih->biCompression = mmioFOURCC('H', 'F', 'Y', 'U');
14057
633a4ed68311 new lavc codec: ffvhuff
lorenm
parents: 13669
diff changeset
1011 else if (!strcasecmp(lavc_param_vcodec, "ffvhuff"))
633a4ed68311 new lavc codec: ffvhuff
lorenm
parents: 13669
diff changeset
1012 mux_v->bih->biCompression = mmioFOURCC('F', 'F', 'V', 'H');
10131
michael
parents: 9993
diff changeset
1013 else if (!strcasecmp(lavc_param_vcodec, "asv1"))
michael
parents: 9993
diff changeset
1014 mux_v->bih->biCompression = mmioFOURCC('A', 'S', 'V', '1');
10777
8313be76ae69 asv2 encoding
michael
parents: 10699
diff changeset
1015 else if (!strcasecmp(lavc_param_vcodec, "asv2"))
8313be76ae69 asv2 encoding
michael
parents: 10699
diff changeset
1016 mux_v->bih->biCompression = mmioFOURCC('A', 'S', 'V', '2');
10264
michael
parents: 10131
diff changeset
1017 else if (!strcasecmp(lavc_param_vcodec, "ffv1"))
michael
parents: 10131
diff changeset
1018 mux_v->bih->biCompression = mmioFOURCC('F', 'F', 'V', '1');
13074
dfd8b3c22c5b support snow
alex
parents: 12983
diff changeset
1019 else if (!strcasecmp(lavc_param_vcodec, "snow"))
dfd8b3c22c5b support snow
alex
parents: 12983
diff changeset
1020 mux_v->bih->biCompression = mmioFOURCC('S', 'N', 'O', 'W');
20419
39994eb91013 Add proper flv fourcc
reimar
parents: 19360
diff changeset
1021 else if (!strcasecmp(lavc_param_vcodec, "flv"))
39994eb91013 Add proper flv fourcc
reimar
parents: 19360
diff changeset
1022 mux_v->bih->biCompression = mmioFOURCC('F', 'L', 'V', '1');
23288
3e0d632ec805 Add DV fourcc.
corey
parents: 23209
diff changeset
1023 else if (!strcasecmp(lavc_param_vcodec, "dvvideo"))
3e0d632ec805 Add DV fourcc.
corey
parents: 23209
diff changeset
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
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1031 else
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1032 mux_v->bih->biCompression = mmioFOURCC(lavc_param_vcodec[0],
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1033 lavc_param_vcodec[1], lavc_param_vcodec[2], lavc_param_vcodec[3]); /* FIXME!!! */
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1034
31959
f957f330aa6d Introduce init_avcodec function to avoid duplicated FFmpeg initializations.
diego
parents: 31589
diff changeset
1035 init_avcodec();
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1036
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1037 vf->priv->codec = (AVCodec *)avcodec_find_encoder_by_name(lavc_param_vcodec);
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1038 if (!vf->priv->codec) {
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1039 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_MissingLAVCcodec, lavc_param_vcodec);
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1040 return 0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1041 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1042
8413
2670aec42989 AVVideoFrame -> AVFrame
michael
parents: 8371
diff changeset
1043 vf->priv->pic = avcodec_alloc_frame();
7444
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
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
56a16bd12b79 use avcodec_alloc_context()
michael
parents: 7389
diff changeset
1047
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1048 return 1;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1049 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1050
32033
c42345605c7a Mark video encoder vf_info_t structs as const.
diego
parents: 31959
diff changeset
1051 const vf_info_t ve_info_lavc = {
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1052 "libavcodec encoder",
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1053 "lavc",
6673
d6adae1af0e3 #ifdef'ed divx4 2pass code - idea by Diego
arpi
parents: 6461
diff changeset
1054 "A'rpi, Alex, Michael",
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1055 "for internal use by mencoder",
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1056 vf_open
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1057 };
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1058
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1059 //===========================================================================//