Mercurial > mplayer.hg
annotate mencoder.c @ 12334:eeddcef4fb08
"hard" frame duplication for mencoder. this finally makes it possible
to generate valid mpeg output from avi's that have duplicate frames in
them, or when using inverse telecine filters. to use it, put the
"harddup" filter at the end of your filter chain.
author | rfelker |
---|---|
date | Wed, 28 Apr 2004 04:02:46 +0000 |
parents | e7c8200ffdc5 |
children | 6f1b4c989914 |
rev | line source |
---|---|
3384 | 1 #define VCODEC_COPY 0 |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
2 #define VCODEC_FRAMENO 1 |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
3 // real codecs: |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
4 #define VCODEC_DIVX4 2 |
3504
21fc87d76300
support for RGB/BGR modes (tested with raw and divx4)
alex
parents:
3480
diff
changeset
|
5 #define VCODEC_LIBAVCODEC 4 |
4575 | 6 #define VCODEC_VFW 7 |
5578 | 7 #define VCODEC_LIBDV 8 |
7457 | 8 #define VCODEC_XVID 9 |
8471 | 9 #define VCODEC_QTVIDEO 10 |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
9380
diff
changeset
|
10 #define VCODEC_NUV 11 |
11966 | 11 #define VCODEC_RAW 12 |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
12 |
3385 | 13 #define ACODEC_COPY 0 |
2583 | 14 #define ACODEC_PCM 1 |
15 #define ACODEC_VBRMP3 2 | |
4368 | 16 #define ACODEC_NULL 3 |
11375 | 17 #define ACODEC_LAVC 4 |
2531 | 18 |
19 #include <stdio.h> | |
20 #include <stdlib.h> | |
21 #include <string.h> | |
22 #include <signal.h> | |
9772 | 23 #ifdef __MINGW32__ |
24 #define SIGQUIT 3 | |
25 #endif | |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
26 #include <sys/time.h> |
2531 | 27 |
2591 | 28 #include "config.h" |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
29 |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
30 #include "version.h" |
2531 | 31 #include "mp_msg.h" |
32 #include "help_mp.h" | |
33 | |
3323 | 34 #include "cpudetect.h" |
35 | |
2531 | 36 #include "codec-cfg.h" |
8164
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
37 #include "m_option.h" |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
38 #include "m_config.h" |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
39 #include "parser-mecmd.h" |
2531 | 40 |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
41 #include "libmpdemux/stream.h" |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
42 #include "libmpdemux/demuxer.h" |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
43 #include "libmpdemux/stheader.h" |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
44 #include "libmpdemux/mp3_hdr.h" |
8585 | 45 #include "libmpdemux/muxer.h" |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
46 |
2531 | 47 |
48 #include "libvo/video_out.h" | |
49 | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
50 #include "libao2/afmt.h" |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
51 |
7471 | 52 #include "libmpcodecs/mp_image.h" |
5607 | 53 #include "libmpcodecs/dec_audio.h" |
54 #include "libmpcodecs/dec_video.h" | |
6581 | 55 #include "libmpcodecs/vf.h" |
2574 | 56 |
7471 | 57 // for MPEGLAYER3WAVEFORMAT: |
58 #include "loader/wine/mmreg.h" | |
59 | |
3357 | 60 #ifdef HAVE_MP3LAME |
6581 | 61 #undef CDECL |
2591 | 62 #include <lame/lame.h> |
3357 | 63 #endif |
2583 | 64 |
3236 | 65 #include <inttypes.h> |
66 | |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
67 #include "libvo/fastmemcpy.h" |
3385 | 68 |
9380 | 69 #include "osdep/timer.h" |
7472
c4434bdf6e51
tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents:
7471
diff
changeset
|
70 |
11375 | 71 #ifdef USE_LIBAVCODEC |
72 // for lavc audio encoding | |
11410 | 73 |
74 #ifdef USE_LIBAVCODEC_SO | |
75 #include <ffmpeg/avcodec.h> | |
76 #else | |
11375 | 77 #include "libavcodec/avcodec.h" |
11410 | 78 #endif |
79 | |
11375 | 80 static AVCodec *lavc_acodec; |
81 static AVCodecContext *lavc_actx = NULL; | |
82 extern char *lavc_param_acodec; | |
83 extern int lavc_param_abitrate; | |
84 extern int lavc_param_atag; | |
85 // tmp buffer for lavc audio encoding (to free!!!!!) | |
86 static void *lavc_abuf = NULL; | |
87 extern int avcodec_inited; | |
88 | |
89 static uint32_t lavc_find_atag(char *codec); | |
90 #endif | |
91 | |
5511 | 92 int vo_doublebuffering=0; |
93 int vo_directrendering=0; | |
94 int vo_config_count=0; | |
11573 | 95 int forced_subs_only=0; |
4388 | 96 |
2583 | 97 //-------------------------- |
98 | |
2531 | 99 // cache2: |
7881
aba9301ed3c4
allow cache to be disabled (-nocache should override cachesize autodetection
arpi
parents:
7867
diff
changeset
|
100 int stream_cache_size=-1; |
2531 | 101 #ifdef USE_STREAM_CACHE |
102 extern int cache_fill_status; | |
103 #else | |
104 #define cache_fill_status 0 | |
105 #endif | |
106 | |
2618 | 107 int audio_id=-1; |
108 int video_id=-1; | |
109 int dvdsub_id=-1; | |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
110 int vobsub_id=-1; |
10167
531b00ad6f2d
Support for selecting the audio track in Matroska files via -alang.
mosu
parents:
9870
diff
changeset
|
111 char* audio_lang=NULL; |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
112 char* dvdsub_lang=NULL; |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
113 static char* spudec_ifo=NULL; |
2618 | 114 |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
115 static char** audio_codec_list=NULL; // override audio codec |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
116 static char** video_codec_list=NULL; // override video codec |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
117 static char** audio_fm_list=NULL; // override audio codec family |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
118 static char** video_fm_list=NULL; // override video codec family |
2531 | 119 |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
120 static int out_audio_codec=-1; |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
121 static int out_video_codec=-1; |
4620 | 122 |
8585 | 123 int out_file_format=MUXER_TYPE_AVI; // default to AVI |
124 | |
2531 | 125 // audio stream skip/resync functions requires only for seeking. |
126 // (they should be implemented in the audio codec layer) | |
127 //void skip_audio_frame(sh_audio_t *sh_audio){} | |
128 //void resync_audio_stream(sh_audio_t *sh_audio){} | |
129 | |
2618 | 130 int verbose=0; // must be global! |
11875
6b28eb95c08b
* changes mencoder's exit code on explicit kill to 2
attila
parents:
11834
diff
changeset
|
131 int quiet=0; |
2531 | 132 double video_time_usage=0; |
133 double vout_time_usage=0; | |
4834 | 134 double max_video_time_usage=0; |
135 double max_vout_time_usage=0; | |
4838 | 136 double cur_video_time_usage=0; |
137 double cur_vout_time_usage=0; | |
4844
76acf5bbda78
exclude benchmark stuff execution from normal playback
nick
parents:
4838
diff
changeset
|
138 int benchmark=0; |
2531 | 139 |
2605 | 140 // A-V sync: |
141 int delay_corrected=1; | |
142 static float default_max_pts_correction=-1;//0.01f; | |
143 static float max_pts_correction=0;//default_max_pts_correction; | |
144 static float c_total=0; | |
145 | |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
146 static float audio_preload=0.5; |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
147 static float audio_delay=0.0; |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
148 static int audio_density=2; |
6861 | 149 |
9564
898e3692ca0d
Made "force_fps" non-static, because code in "libmpdemux" refers to it.
rsf
parents:
9520
diff
changeset
|
150 float force_fps=0; |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
151 static float force_ofps=0; // set to 24 for inverse telecine |
5629 | 152 static int skip_limit=-1; |
2531 | 153 |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
154 static int force_srate=0; |
7614 | 155 static int audio_output_format=0; |
2618 | 156 |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
157 char *vobsub_out=NULL; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
158 unsigned int vobsub_out_index=0; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
159 char *vobsub_out_id=NULL; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
160 |
2626 | 161 char* out_filename="test.avi"; |
162 | |
3657
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
163 char *force_fourcc=NULL; |
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
164 |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
165 char* passtmpfile="divx2pass.log"; |
2643 | 166 |
167 static int play_n_frames=-1; | |
6590 | 168 static int play_n_frames_mf=-1; |
2643 | 169 |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
170 #include "libvo/font_load.h" |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
171 #include "libvo/sub.h" |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
172 |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
173 // sub: |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
174 char *font_name=NULL; |
11580
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
175 #ifdef HAVE_FONTCONFIG |
11584 | 176 extern int font_fontconfig; |
11580
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
177 #endif |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
178 float font_factor=0.75; |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
179 char **sub_name=NULL; |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
180 float sub_delay=0; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
181 float sub_fps=0; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
182 int sub_auto = 0; |
6784
b38e38b6f88f
DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
6765
diff
changeset
|
183 int subcc_enabled=0; |
8361
2202c00001e3
overlapping subtitles support is now optional, can be disabled (-nooverlapsub)
arpi
parents:
8357
diff
changeset
|
184 int suboverlap_enabled = 1; |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
185 |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
186 #ifdef USE_SUB |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
187 static sub_data* subdata=NULL; |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
188 float sub_last_pts = -303; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
189 #endif |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
190 |
9076
92014b66ed3d
ability to disable the nonsense expand filter is a must! otherwise
rfelker
parents:
9014
diff
changeset
|
191 int auto_expand=1; |
12334
eeddcef4fb08
"hard" frame duplication for mencoder. this finally makes it possible
rfelker
parents:
12223
diff
changeset
|
192 int encode_duplicates=1; |
9076
92014b66ed3d
ability to disable the nonsense expand filter is a must! otherwise
rfelker
parents:
9014
diff
changeset
|
193 |
7145
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
194 // infos are empty by default |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
195 char *info_name=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
196 char *info_artist=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
197 char *info_genre=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
198 char *info_subject=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
199 char *info_copyright=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
200 char *info_sourceform=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
201 char *info_comment=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
202 |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
203 |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
204 |
2661 | 205 //char *out_audio_codec=NULL; // override audio codec |
206 //char *out_video_codec=NULL; // override video codec | |
2626 | 207 |
2591 | 208 //#include "libmpeg2/mpeg2.h" |
209 //#include "libmpeg2/mpeg2_internal.h" | |
210 | |
3357 | 211 #ifdef HAVE_MP3LAME |
2626 | 212 int lame_param_quality=0; // best |
5922
30eea1bd1b64
fixed bogus overloaded "q" parameter for lame mp3 encoding
rfelker
parents:
5904
diff
changeset
|
213 int lame_param_algqual=5; // same as old default |
2626 | 214 int lame_param_vbr=vbr_default; |
215 int lame_param_mode=-1; // unset | |
216 int lame_param_padding=-1; // unset | |
217 int lame_param_br=-1; // unset | |
218 int lame_param_ratio=-1; // unset | |
5848
48a0667742b9
volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents:
5685
diff
changeset
|
219 float lame_param_scale=-1; // unset |
11834 | 220 int lame_param_lowpassfreq = 0; //auto |
221 int lame_param_highpassfreq = 0; //auto | |
222 | |
8517
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
223 #if HAVE_MP3LAME >= 392 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
224 int lame_param_fast=0; // unset |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
225 static char* lame_param_preset=NULL; // unset |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
226 static int lame_presets_set( lame_t gfp, int fast, int cbr, const char* preset_name ); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
227 static void lame_presets_longinfo_dm ( FILE* msgfp ); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
228 #endif |
3357 | 229 #endif |
2626 | 230 |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
231 //static int vo_w=0, vo_h=0; |
5270 | 232 |
2618 | 233 //-------------------------- config stuff: |
234 | |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4088
diff
changeset
|
235 m_config_t* mconfig; |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4088
diff
changeset
|
236 |
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:
10453
diff
changeset
|
237 extern int m_config_parse_config_file(m_config_t* config, char *conffile); |
8164
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
238 |
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:
10453
diff
changeset
|
239 static int cfg_inc_verbose(m_option_t *conf){ ++verbose; return 0;} |
8164
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
240 |
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:
10453
diff
changeset
|
241 static int cfg_include(m_option_t *conf, char *filename){ |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4088
diff
changeset
|
242 return m_config_parse_config_file(mconfig, filename); |
2618 | 243 } |
244 | |
4620 | 245 static char *seek_to_sec=NULL; |
246 static off_t seek_to_byte=0; | |
247 | |
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:
10453
diff
changeset
|
248 static int parse_end_at(m_option_t *conf, const char* param); |
7451
8669e56d2d98
some mpcodecs option declaration moved to cfg-*, as aren;t used by
arpi
parents:
7394
diff
changeset
|
249 //static uint8_t* flip_upside_down(uint8_t* dst, const uint8_t* src, int width, int height); |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
250 |
2618 | 251 #include "get_path.c" |
252 | |
253 #include "cfg-mplayer-def.h" | |
254 #include "cfg-mencoder.h" | |
255 | |
4088 | 256 #ifdef USE_DVDREAD |
257 #include "spudec.h" | |
258 #endif | |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
259 #include "vobsub.h" |
4088 | 260 |
4743 | 261 /* FIXME */ |
11222 | 262 static void mencoder_exit(int level, char *how) |
4743 | 263 { |
264 if (how) | |
265 printf("Exiting... (%s)\n", how); | |
266 else | |
267 printf("Exiting...\n"); | |
268 | |
269 exit(level); | |
270 } | |
271 | |
4488 | 272 void parse_cfgfiles( m_config_t* conf ) |
273 { | |
274 char *conffile; | |
275 if ((conffile = get_path("mencoder")) == NULL) { | |
276 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_GetpathProblem); | |
277 } else { | |
278 if (m_config_parse_config_file(conf, conffile) < 0) | |
4743 | 279 mencoder_exit(1,"configfile error"); |
4488 | 280 free(conffile); |
281 } | |
282 } | |
283 | |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
284 |
2591 | 285 //--------------------------------------------------------------------------- |
286 | |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
287 static int dec_audio(sh_audio_t *sh_audio,unsigned char* buffer,int total){ |
2591 | 288 int size=0; |
6419
773d71059d8a
On QNX eof szmbol clashes with system headers, workaround by renaming to at_eof. Fell free to reverse if zou don't like this waz.
atmos4
parents:
6333
diff
changeset
|
289 int at_eof=0; |
773d71059d8a
On QNX eof szmbol clashes with system headers, workaround by renaming to at_eof. Fell free to reverse if zou don't like this waz.
atmos4
parents:
6333
diff
changeset
|
290 while(size<total && !at_eof){ |
2591 | 291 int len=total-size; |
292 if(len>MAX_OUTBURST) len=MAX_OUTBURST; | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
293 if(len>sh_audio->a_out_buffer_size) len=sh_audio->a_out_buffer_size; |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
294 if(len>sh_audio->a_out_buffer_len){ |
2591 | 295 int ret=decode_audio(sh_audio, |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
296 &sh_audio->a_out_buffer[sh_audio->a_out_buffer_len], |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
297 len-sh_audio->a_out_buffer_len, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
298 sh_audio->a_out_buffer_size-sh_audio->a_out_buffer_len); |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
299 if(ret>0) sh_audio->a_out_buffer_len+=ret; else at_eof=1; |
2591 | 300 } |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
301 if(len>sh_audio->a_out_buffer_len) len=sh_audio->a_out_buffer_len; |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
302 memcpy(buffer+size,sh_audio->a_out_buffer,len); |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
303 sh_audio->a_out_buffer_len-=len; size+=len; |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
304 if(sh_audio->a_out_buffer_len>0) |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
305 memcpy(sh_audio->a_out_buffer,&sh_audio->a_out_buffer[len],sh_audio->a_out_buffer_len); |
2591 | 306 } |
307 return size; | |
308 } | |
309 | |
310 //--------------------------------------------------------------------------- | |
2531 | 311 |
6419
773d71059d8a
On QNX eof szmbol clashes with system headers, workaround by renaming to at_eof. Fell free to reverse if zou don't like this waz.
atmos4
parents:
6333
diff
changeset
|
312 static int at_eof=0; |
3320
ac8b70dd5e45
use return 1; if interrupted - patch by Artur Skawina <skawina@geocities.com>
arpi
parents:
3240
diff
changeset
|
313 static int interrupted=0; |
2531 | 314 |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
315 enum end_at_type_t {END_AT_NONE, END_AT_TIME, END_AT_SIZE}; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
316 static enum end_at_type_t end_at_type = END_AT_NONE; |
8355
3be7b22b6713
end_at int->double, as option -endpos accepts float seconds too
arpi
parents:
8164
diff
changeset
|
317 static double end_at; |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
318 |
2531 | 319 static void exit_sighandler(int x){ |
6419
773d71059d8a
On QNX eof szmbol clashes with system headers, workaround by renaming to at_eof. Fell free to reverse if zou don't like this waz.
atmos4
parents:
6333
diff
changeset
|
320 at_eof=1; |
11875
6b28eb95c08b
* changes mencoder's exit code on explicit kill to 2
attila
parents:
11834
diff
changeset
|
321 interrupted=2; /* 1 means error */ |
2531 | 322 } |
323 | |
8585 | 324 static muxer_t* muxer=NULL; |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
325 static FILE* muxer_f=NULL; |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
326 |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8075
diff
changeset
|
327 extern void print_wave_header(WAVEFORMATEX *h); |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
328 |
7201
22beff6edf75
Improved MacOS X SDL support, enable SDL main() wrapper for Darwin, remove unused envp.
atmos4
parents:
7180
diff
changeset
|
329 int main(int argc,char* argv[]){ |
2531 | 330 |
331 stream_t* stream=NULL; | |
332 demuxer_t* demuxer=NULL; | |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
333 stream_t* stream2=NULL; |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
334 demuxer_t* demuxer2=NULL; |
2531 | 335 demux_stream_t *d_audio=NULL; |
336 demux_stream_t *d_video=NULL; | |
337 demux_stream_t *d_dvdsub=NULL; | |
338 sh_audio_t *sh_audio=NULL; | |
339 sh_video_t *sh_video=NULL; | |
340 int file_format=DEMUXER_TYPE_UNKNOWN; | |
12223 | 341 int i=DEMUXER_TYPE_UNKNOWN; |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
342 void *vobsub_writer=NULL; |
2531 | 343 |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
344 uint32_t ptimer_start; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
345 uint32_t audiorate=0; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
346 uint32_t videorate=0; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
347 uint32_t audiosamples=1; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
348 uint32_t videosamples=1; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
349 uint32_t skippedframes=0; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
350 uint32_t duplicatedframes=0; |
7370
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
351 uint32_t badframes=0; |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
352 |
8585 | 353 muxer_stream_t* mux_a=NULL; |
354 muxer_stream_t* mux_v=NULL; | |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
355 off_t muxer_f_size=0; |
2531 | 356 |
3357 | 357 #ifdef HAVE_MP3LAME |
2591 | 358 lame_global_flags *lame; |
3357 | 359 #endif |
2583 | 360 |
2613 | 361 double v_pts_corr=0; |
362 double v_timer_corr=0; | |
2605 | 363 |
8164
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
364 m_entry_t* filelist = NULL; |
2618 | 365 char* filename=NULL; |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
366 char* frameno_filename="frameno.avi"; |
2618 | 367 |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
368 int decoded_frameno=0; |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
369 int next_frameno=-1; |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
370 |
4387 | 371 unsigned int timer_start; |
372 | |
5223 | 373 mp_msg_init(); |
374 mp_msg_set_level(MSGL_STATUS); | |
11778 | 375 mp_msg(MSGT_CPLAYER,MSGL_INFO, "MEncoder " VERSION " (C) 2000-2004 MPlayer Team\n\n"); |
2622 | 376 |
3323 | 377 /* Test for cpu capabilities (and corresponding OS support) for optimizing */ |
9003 | 378 GetCpuCaps(&gCpuCaps); |
3323 | 379 #ifdef ARCH_X86 |
380 mp_msg(MSGT_CPLAYER,MSGL_INFO,"CPUflags: Type: %d MMX: %d MMX2: %d 3DNow: %d 3DNow2: %d SSE: %d SSE2: %d\n", | |
381 gCpuCaps.cpuType,gCpuCaps.hasMMX,gCpuCaps.hasMMX2, | |
382 gCpuCaps.has3DNow, gCpuCaps.has3DNowExt, | |
383 gCpuCaps.hasSSE, gCpuCaps.hasSSE2); | |
10453 | 384 #ifdef RUNTIME_CPUDETECT |
385 mp_msg(MSGT_CPLAYER,MSGL_INFO, MSGTR_CompiledWithRuntimeDetection); | |
386 #else | |
387 mp_msg(MSGT_CPLAYER,MSGL_INFO, MSGTR_CompiledWithCPUExtensions); | |
388 #ifdef HAVE_MMX | |
389 mp_msg(MSGT_CPLAYER,MSGL_INFO," MMX"); | |
3323 | 390 #endif |
10453 | 391 #ifdef HAVE_MMX2 |
392 mp_msg(MSGT_CPLAYER,MSGL_INFO," MMX2"); | |
393 #endif | |
394 #ifdef HAVE_3DNOW | |
395 mp_msg(MSGT_CPLAYER,MSGL_INFO," 3DNow"); | |
396 #endif | |
397 #ifdef HAVE_3DNOWEX | |
398 mp_msg(MSGT_CPLAYER,MSGL_INFO," 3DNowEx"); | |
399 #endif | |
400 #ifdef HAVE_SSE | |
401 mp_msg(MSGT_CPLAYER,MSGL_INFO," SSE"); | |
402 #endif | |
403 #ifdef HAVE_SSE2 | |
404 mp_msg(MSGT_CPLAYER,MSGL_INFO," SSE2"); | |
405 #endif | |
406 mp_msg(MSGT_CPLAYER,MSGL_INFO,"\n\n"); | |
407 #endif | |
408 #endif | |
409 | |
11550
18d3b3a1101b
InitTimer has to be called before *Timer-Functions can be used.
ranma
parents:
11513
diff
changeset
|
410 InitTimer(); |
18d3b3a1101b
InitTimer has to be called before *Timer-Functions can be used.
ranma
parents:
11513
diff
changeset
|
411 |
5889 | 412 // check codec.conf |
11759
29eea271490e
add -codecs-file for selecting a specific codecs.conf on the comand line
attila
parents:
11592
diff
changeset
|
413 if(!codecs_file || !parse_codec_cfg(codecs_file)){ |
29eea271490e
add -codecs-file for selecting a specific codecs.conf on the comand line
attila
parents:
11592
diff
changeset
|
414 if(!parse_codec_cfg(get_path("codecs.conf"))){ |
29eea271490e
add -codecs-file for selecting a specific codecs.conf on the comand line
attila
parents:
11592
diff
changeset
|
415 if(!parse_codec_cfg(MPLAYER_CONFDIR "/codecs.conf")){ |
29eea271490e
add -codecs-file for selecting a specific codecs.conf on the comand line
attila
parents:
11592
diff
changeset
|
416 if(!parse_codec_cfg(NULL)){ |
29eea271490e
add -codecs-file for selecting a specific codecs.conf on the comand line
attila
parents:
11592
diff
changeset
|
417 mp_msg(MSGT_MENCODER,MSGL_HINT,MSGTR_CopyCodecsConf); |
29eea271490e
add -codecs-file for selecting a specific codecs.conf on the comand line
attila
parents:
11592
diff
changeset
|
418 mencoder_exit(1,NULL); |
29eea271490e
add -codecs-file for selecting a specific codecs.conf on the comand line
attila
parents:
11592
diff
changeset
|
419 } |
29eea271490e
add -codecs-file for selecting a specific codecs.conf on the comand line
attila
parents:
11592
diff
changeset
|
420 mp_msg(MSGT_MENCODER,MSGL_INFO,MSGTR_BuiltinCodecsConf); |
8467
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8465
diff
changeset
|
421 } |
5889 | 422 } |
423 } | |
424 | |
8164
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
425 // FIXME: get rid of -dvd and other tricky options |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
426 stream2=open_stream(frameno_filename,0,&i); |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
427 if(stream2){ |
9006
d00997f12257
extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
9003
diff
changeset
|
428 demuxer2=demux_open(stream2,DEMUXER_TYPE_AVI,-1,-1,-2,NULL); |
6947 | 429 if(demuxer2) printf(MSGTR_UsingPass3ControllFile,frameno_filename); |
8925
5c15777f1c07
this patch adds an fallback to playlist (any but the plaintext-list format)
arpi
parents:
8797
diff
changeset
|
430 else mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_FormatNotRecognized); |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
431 } |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
432 |
8164
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
433 mconfig = m_config_new(); |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
434 m_config_register_options(mconfig,mencoder_opts); |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
435 parse_cfgfiles(mconfig); |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
436 filelist = m_config_parse_me_command_line(mconfig, argc, argv); |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
437 if(!filelist) mencoder_exit(1, "error parsing cmdline"); |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
438 m_entry_set_options(mconfig,&filelist[0]); |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
439 filename = filelist[0].name; |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4088
diff
changeset
|
440 |
9746 | 441 if(!filename){ |
6947 | 442 printf(MSGTR_MissingFilename); |
4743 | 443 mencoder_exit(1,NULL); |
2618 | 444 } |
445 | |
5223 | 446 mp_msg_set_level(verbose+MSGL_STATUS); |
2600 | 447 |
6267
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
448 // check font |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
449 #ifdef USE_OSD |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7058
diff
changeset
|
450 #ifdef HAVE_FREETYPE |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7058
diff
changeset
|
451 init_freetype(); |
11580
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
452 #endif |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
453 #ifdef HAVE_FONTCONFIG |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
454 if(!font_fontconfig) |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
455 { |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
456 #endif |
6267
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
457 if(font_name){ |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
458 vo_font=read_font_desc(font_name,font_factor,verbose>1); |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
459 if(!vo_font) mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadFont,font_name); |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
460 } else { |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
461 // try default: |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
462 vo_font=read_font_desc(get_path("font/font.desc"),font_factor,verbose>1); |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
463 if(!vo_font) |
10272
7b0bc557987b
renames: DATADIR->MPLAYER_DATADIR, CONFDIR->MPLAYER_CONFDIR, LIBDIR->MPLAYER_LIBDIR
arpi
parents:
10167
diff
changeset
|
464 vo_font=read_font_desc(MPLAYER_DATADIR "/font/font.desc",font_factor,verbose>1); |
6267
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
465 } |
11580
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
466 #ifdef HAVE_FONTCONFIG |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
467 } |
6267
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
468 #endif |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7058
diff
changeset
|
469 #endif |
6267
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
470 |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
471 vo_init_osd(); |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
472 |
9746 | 473 stream=open_stream(filename,0,&file_format); |
2531 | 474 |
475 if(!stream){ | |
6947 | 476 printf(MSGTR_CannotOpenFile_Device); |
4743 | 477 mencoder_exit(1,NULL); |
2531 | 478 } |
479 | |
480 printf("success: format: %d data: 0x%X - 0x%X\n",file_format, (int)(stream->start_pos),(int)(stream->end_pos)); | |
481 | |
5436 | 482 #ifdef USE_DVDREAD |
483 if(stream->type==STREAMTYPE_DVD){ | |
484 if(audio_lang && audio_id==-1) audio_id=dvd_aid_from_lang(stream,audio_lang); | |
485 if(dvdsub_lang && dvdsub_id==-1) dvdsub_id=dvd_sid_from_lang(stream,dvdsub_lang); | |
486 } | |
487 #endif | |
488 | |
5626
b7b40e65c070
-sb option re-added (noticed by Alexandre Oliva <oliva@lsd.ic.unicamp.br>)
arpi
parents:
5607
diff
changeset
|
489 stream->start_pos+=seek_to_byte; |
2531 | 490 |
7881
aba9301ed3c4
allow cache to be disabled (-nocache should override cachesize autodetection
arpi
parents:
7867
diff
changeset
|
491 if(stream_cache_size>0) stream_enable_cache(stream,stream_cache_size*1024,0,0); |
5626
b7b40e65c070
-sb option re-added (noticed by Alexandre Oliva <oliva@lsd.ic.unicamp.br>)
arpi
parents:
5607
diff
changeset
|
492 |
7529
c276bfb414fb
removed obsolete/unused audio|video_fm|codec, has_audio|video
arpi
parents:
7526
diff
changeset
|
493 if(demuxer2) audio_id=-2; /* do NOT read audio packets... */ |
4355 | 494 |
2882 | 495 //demuxer=demux_open(stream,file_format,video_id,audio_id,dvdsub_id); |
9006
d00997f12257
extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
9003
diff
changeset
|
496 demuxer=demux_open(stream,file_format,audio_id,video_id,dvdsub_id,filename); |
2531 | 497 if(!demuxer){ |
8925
5c15777f1c07
this patch adds an fallback to playlist (any but the plaintext-list format)
arpi
parents:
8797
diff
changeset
|
498 mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_FormatNotRecognized); |
6947 | 499 printf(MSGTR_CannotOpenDemuxer); |
4743 | 500 mencoder_exit(1,NULL); |
2531 | 501 } |
502 | |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
503 d_audio=demuxer2 ? demuxer2->audio : demuxer->audio; |
2531 | 504 d_video=demuxer->video; |
505 d_dvdsub=demuxer->sub; | |
506 sh_audio=d_audio->sh; | |
507 sh_video=d_video->sh; | |
508 | |
11513
552ddee604c9
workaround! exit if there's no video stream (hopefully it's a proper fix)
alex
parents:
11410
diff
changeset
|
509 if(!sh_video) |
552ddee604c9
workaround! exit if there's no video stream (hopefully it's a proper fix)
alex
parents:
11410
diff
changeset
|
510 { |
552ddee604c9
workaround! exit if there's no video stream (hopefully it's a proper fix)
alex
parents:
11410
diff
changeset
|
511 mp_msg(MSGT_CPLAYER,MSGL_FATAL,"Video stream is mandatory!\n"); |
552ddee604c9
workaround! exit if there's no video stream (hopefully it's a proper fix)
alex
parents:
11410
diff
changeset
|
512 mencoder_exit(1,NULL); |
552ddee604c9
workaround! exit if there's no video stream (hopefully it's a proper fix)
alex
parents:
11410
diff
changeset
|
513 } |
552ddee604c9
workaround! exit if there's no video stream (hopefully it's a proper fix)
alex
parents:
11410
diff
changeset
|
514 |
2531 | 515 if(!video_read_properties(sh_video)){ |
7805 | 516 printf(MSGTR_CannotReadVideoProperties); |
4743 | 517 mencoder_exit(1,NULL); |
2531 | 518 } |
519 | |
2622 | 520 mp_msg(MSGT_MENCODER,MSGL_INFO,"[V] filefmt:%d fourcc:0x%X size:%dx%d fps:%5.2f ftime:=%6.4f\n", |
2531 | 521 demuxer->file_format,sh_video->format, sh_video->disp_w,sh_video->disp_h, |
522 sh_video->fps,sh_video->frametime | |
523 ); | |
2581 | 524 |
8357
ea3c66c6665f
fixed -fps with mencoder and fixed-rate files (avi etc)
arpi
parents:
8355
diff
changeset
|
525 if(force_fps){ |
ea3c66c6665f
fixed -fps with mencoder and fixed-rate files (avi etc)
arpi
parents:
8355
diff
changeset
|
526 sh_video->fps=force_fps; |
ea3c66c6665f
fixed -fps with mencoder and fixed-rate files (avi etc)
arpi
parents:
8355
diff
changeset
|
527 sh_video->frametime=1.0f/sh_video->fps; |
ea3c66c6665f
fixed -fps with mencoder and fixed-rate files (avi etc)
arpi
parents:
8355
diff
changeset
|
528 mp_msg(MSGT_MENCODER,MSGL_INFO,"input fps will be interpreted as %5.2f instead\n", sh_video->fps); |
ea3c66c6665f
fixed -fps with mencoder and fixed-rate files (avi etc)
arpi
parents:
8355
diff
changeset
|
529 } |
ea3c66c6665f
fixed -fps with mencoder and fixed-rate files (avi etc)
arpi
parents:
8355
diff
changeset
|
530 |
12016
b962aaad2940
rawvideo muxer patch by John Earl <jwe21@cam.ac.uk>
ranma
parents:
11974
diff
changeset
|
531 if(sh_audio && out_file_format==MUXER_TYPE_RAWVIDEO){ |
b962aaad2940
rawvideo muxer patch by John Earl <jwe21@cam.ac.uk>
ranma
parents:
11974
diff
changeset
|
532 mp_msg(MSGT_MENCODER,MSGL_ERR,"Output file format RAWVIDEO does not support audio - disabling audio\n"); |
b962aaad2940
rawvideo muxer patch by John Earl <jwe21@cam.ac.uk>
ranma
parents:
11974
diff
changeset
|
533 sh_audio=NULL; |
b962aaad2940
rawvideo muxer patch by John Earl <jwe21@cam.ac.uk>
ranma
parents:
11974
diff
changeset
|
534 } |
6923
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
535 if(sh_audio && out_audio_codec<0){ |
8796 | 536 if(audio_id==-2) |
8797 | 537 mp_msg(MSGT_MENCODER,MSGL_ERR,"This demuxer doesn't support -nosound yet.\n"); |
6947 | 538 mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_NoAudioEncoderSelected); |
6923
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
539 mencoder_exit(1,NULL); |
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
540 } |
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
541 if(sh_video && out_video_codec<0){ |
6947 | 542 mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_NoVideoEncoderSelected); |
6923
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
543 mencoder_exit(1,NULL); |
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
544 } |
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
545 |
4620 | 546 if(sh_audio && (out_audio_codec || seek_to_sec || !sh_audio->wf)){ |
2581 | 547 // Go through the codec.conf and find the best codec... |
7502
6a2b6f3d619c
best audio/video codec selection & init moved to libmpcodecs
arpi
parents:
7497
diff
changeset
|
548 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); |
7522 | 549 if(!init_best_audio_codec(sh_audio,audio_codec_list,audio_fm_list)){ |
7502
6a2b6f3d619c
best audio/video codec selection & init moved to libmpcodecs
arpi
parents:
7497
diff
changeset
|
550 sh_audio=d_audio->sh=NULL; // failed to init :( |
2581 | 551 } |
7502
6a2b6f3d619c
best audio/video codec selection & init moved to libmpcodecs
arpi
parents:
7497
diff
changeset
|
552 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); |
2581 | 553 } |
554 | |
2531 | 555 // set up video encoder: |
556 | |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
557 if (vobsub_out) { |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
558 unsigned int palette[16], width, height; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
559 unsigned char tmp[3] = { 0, 0, 0 }; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
560 if (spudec_ifo && vobsub_parse_ifo(NULL,spudec_ifo, palette, &width, &height, 1, dvdsub_id, tmp) >= 0) |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
561 vobsub_writer = vobsub_out_open(vobsub_out, palette, sh_video->disp_w, sh_video->disp_h, |
7220
e3ecccc7e505
warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents:
7212
diff
changeset
|
562 vobsub_out_id?vobsub_out_id:(char *)tmp, vobsub_out_index); |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
563 #ifdef USE_DVDREAD |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
564 if (vobsub_writer == NULL) { |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
565 char tmp[3]; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
566 if (vobsub_out_id == NULL && stream->type == STREAMTYPE_DVD) { |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
567 int i; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
568 dvd_priv_t *dvd = (dvd_priv_t*)stream->priv; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
569 for (i = 0; i < dvd->nr_of_subtitles; ++i) |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
570 if (dvd->subtitles[i].id == dvdsub_id) { |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
571 tmp[0] = (dvd->subtitles[i].language >> 8) & 0xff; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
572 tmp[1] = dvd->subtitles[i].language & 0xff; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
573 tmp[2] = 0; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
574 vobsub_out_id = tmp; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
575 break; |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
576 } |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
577 } |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
578 vobsub_writer=vobsub_out_open(vobsub_out, stream->type==STREAMTYPE_DVD?((dvd_priv_t *)(stream->priv))->cur_pgc->palette:NULL, |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
579 sh_video->disp_w, sh_video->disp_h, vobsub_out_id, vobsub_out_index); |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
580 } |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
581 #endif |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
582 } |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
583 else { |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
584 if (spudec_ifo) { |
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
585 unsigned int palette[16], width, height; |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
586 if (vobsub_parse_ifo(NULL,spudec_ifo, palette, &width, &height, 1, -1, NULL) >= 0) |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
587 vo_spudec=spudec_new_scaled(palette, sh_video->disp_w, sh_video->disp_h); |
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
588 } |
5392
d7c586ebbacf
Fix bug noticed by Hajba Szilard in message <20020329151644.A23301@revai.hu>
kmkaplan
parents:
5390
diff
changeset
|
589 #ifdef USE_DVDREAD |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
590 if (vo_spudec==NULL) { |
4557 | 591 vo_spudec=spudec_new_scaled(stream->type==STREAMTYPE_DVD?((dvd_priv_t *)(stream->priv))->cur_pgc->palette:NULL, |
4088 | 592 sh_video->disp_w, sh_video->disp_h); |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
593 } |
4088 | 594 #endif |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
595 } |
4088 | 596 |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
597 #ifdef USE_SUB |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
598 // after reading video params we should load subtitles because |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
599 // we know fps so now we can adjust subtitles time to ~6 seconds AST |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
600 // check .sub |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
601 // current_module="read_subtitles_file"; |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
602 if(sub_name && sub_name[0]){ |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
603 subdata=sub_read_file(sub_name[0], sh_video->fps); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
604 if(!subdata) mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadSub,sub_name[0]); |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
605 } else |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
606 if(sub_auto) { // auto load sub file ... |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
607 subdata=sub_read_file( filename ? sub_filenames( get_path("sub/"), filename )[0] |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
608 : "default.sub", sh_video->fps ); |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
609 } |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
610 #endif |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
611 |
11573 | 612 // Apply current settings for forced subs |
613 spudec_set_forced_subs_only(vo_spudec,forced_subs_only); | |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
614 |
2531 | 615 // set up output file: |
2626 | 616 muxer_f=fopen(out_filename,"wb"); |
2887
bc648c6a464a
fixes a segfault if file specified in -o can't be accessed
pl
parents:
2884
diff
changeset
|
617 if(!muxer_f) { |
6947 | 618 printf(MSGTR_CannotOpenOutputFile, out_filename); |
4743 | 619 mencoder_exit(1,NULL); |
2887
bc648c6a464a
fixes a segfault if file specified in -o can't be accessed
pl
parents:
2884
diff
changeset
|
620 } |
bc648c6a464a
fixes a segfault if file specified in -o can't be accessed
pl
parents:
2884
diff
changeset
|
621 |
9014
c671e9adbe22
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
9006
diff
changeset
|
622 muxer=muxer_new_muxer(out_file_format,muxer_f); |
2581 | 623 |
624 // ============= VIDEO =============== | |
625 | |
8585 | 626 mux_v=muxer_new_stream(muxer,MUXER_TYPE_VIDEO); |
2531 | 627 |
4575 | 628 mux_v->buffer_size=0x200000; // 2MB |
2531 | 629 mux_v->buffer=malloc(mux_v->buffer_size); |
630 | |
631 mux_v->source=sh_video; | |
632 | |
633 mux_v->h.dwSampleSize=0; // VBR | |
11946
73b7ddcf4cbe
use libavcodecs float -> fraction conversation if available for -ofps, that way exact framerates like 24000/1001 are possible instead of ending up with x/10000
michael
parents:
11875
diff
changeset
|
634 #ifdef USE_LIBAVCODEC |
73b7ddcf4cbe
use libavcodecs float -> fraction conversation if available for -ofps, that way exact framerates like 24000/1001 are possible instead of ending up with x/10000
michael
parents:
11875
diff
changeset
|
635 { |
73b7ddcf4cbe
use libavcodecs float -> fraction conversation if available for -ofps, that way exact framerates like 24000/1001 are possible instead of ending up with x/10000
michael
parents:
11875
diff
changeset
|
636 AVRational q= av_d2q(force_ofps?force_ofps:sh_video->fps, 30000); |
73b7ddcf4cbe
use libavcodecs float -> fraction conversation if available for -ofps, that way exact framerates like 24000/1001 are possible instead of ending up with x/10000
michael
parents:
11875
diff
changeset
|
637 mux_v->h.dwScale= q.den; |
73b7ddcf4cbe
use libavcodecs float -> fraction conversation if available for -ofps, that way exact framerates like 24000/1001 are possible instead of ending up with x/10000
michael
parents:
11875
diff
changeset
|
638 mux_v->h.dwRate = q.num; |
73b7ddcf4cbe
use libavcodecs float -> fraction conversation if available for -ofps, that way exact framerates like 24000/1001 are possible instead of ending up with x/10000
michael
parents:
11875
diff
changeset
|
639 } |
73b7ddcf4cbe
use libavcodecs float -> fraction conversation if available for -ofps, that way exact framerates like 24000/1001 are possible instead of ending up with x/10000
michael
parents:
11875
diff
changeset
|
640 #else |
2531 | 641 mux_v->h.dwScale=10000; |
2613 | 642 mux_v->h.dwRate=mux_v->h.dwScale*(force_ofps?force_ofps:sh_video->fps); |
11946
73b7ddcf4cbe
use libavcodecs float -> fraction conversation if available for -ofps, that way exact framerates like 24000/1001 are possible instead of ending up with x/10000
michael
parents:
11875
diff
changeset
|
643 #endif |
2531 | 644 |
2661 | 645 mux_v->codec=out_video_codec; |
2574 | 646 |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
647 mux_v->bih=NULL; |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
648 sh_video->codec=NULL; |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
649 sh_video->video_out=NULL; |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
650 sh_video->vfilter=NULL; // fixme! |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
651 |
2531 | 652 switch(mux_v->codec){ |
3384 | 653 case VCODEC_COPY: |
654 if (sh_video->bih) | |
655 mux_v->bih=sh_video->bih; | |
656 else | |
657 { | |
658 mux_v->bih=malloc(sizeof(BITMAPINFOHEADER)); | |
659 mux_v->bih->biSize=sizeof(BITMAPINFOHEADER); | |
660 mux_v->bih->biWidth=sh_video->disp_w; | |
661 mux_v->bih->biHeight=sh_video->disp_h; | |
662 mux_v->bih->biCompression=sh_video->format; | |
663 mux_v->bih->biPlanes=1; | |
664 mux_v->bih->biBitCount=24; // FIXME!!! | |
665 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8); | |
666 } | |
667 printf("videocodec: framecopy (%dx%d %dbpp fourcc=%x)\n", | |
668 mux_v->bih->biWidth, mux_v->bih->biHeight, | |
669 mux_v->bih->biBitCount, mux_v->bih->biCompression); | |
2531 | 670 break; |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
671 case VCODEC_FRAMENO: |
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
672 mux_v->bih=malloc(sizeof(BITMAPINFOHEADER)); |
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
673 mux_v->bih->biSize=sizeof(BITMAPINFOHEADER); |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
674 mux_v->bih->biWidth=sh_video->disp_w; |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
675 mux_v->bih->biHeight=sh_video->disp_h; |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
676 mux_v->bih->biPlanes=1; |
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
677 mux_v->bih->biBitCount=24; |
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
678 mux_v->bih->biCompression=mmioFOURCC('F','r','N','o'); |
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
679 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8); |
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
680 break; |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
681 default: |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
682 |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
683 switch(mux_v->codec){ |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
684 case VCODEC_DIVX4: |
6581 | 685 sh_video->vfilter=vf_open_encoder(NULL,"divx4",(char *)mux_v); break; |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
686 case VCODEC_LIBAVCODEC: |
6581 | 687 sh_video->vfilter=vf_open_encoder(NULL,"lavc",(char *)mux_v); break; |
11966 | 688 case VCODEC_RAW: |
689 sh_video->vfilter=vf_open_encoder(NULL,"raw",(char *)mux_v); break; | |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
690 case VCODEC_VFW: |
6581 | 691 sh_video->vfilter=vf_open_encoder(NULL,"vfw",(char *)mux_v); break; |
5578 | 692 case VCODEC_LIBDV: |
6581 | 693 sh_video->vfilter=vf_open_encoder(NULL,"libdv",(char *)mux_v); break; |
7457 | 694 case VCODEC_XVID: |
695 sh_video->vfilter=vf_open_encoder(NULL,"xvid",(char *)mux_v); break; | |
8471 | 696 case VCODEC_QTVIDEO: |
697 sh_video->vfilter=vf_open_encoder(NULL,"qtvideo",(char *)mux_v); break; | |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
9380
diff
changeset
|
698 case VCODEC_NUV: |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
9380
diff
changeset
|
699 sh_video->vfilter=vf_open_encoder(NULL,"nuv",(char *)mux_v); break; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
9380
diff
changeset
|
700 |
4743 | 701 } |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
702 if(!mux_v->bih || !sh_video->vfilter){ |
6947 | 703 mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_EncoderOpenFailed); |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
704 mencoder_exit(1,NULL); |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
705 } |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
706 // append 'expand' filter, it fixes stride problems and renders osd: |
9595 | 707 if (auto_expand) { |
708 char* vf_args[] = { "osd", "1", NULL }; | |
709 sh_video->vfilter=vf_open_filter(sh_video->vfilter,"expand",vf_args); | |
710 } | |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
711 sh_video->vfilter=append_filters(sh_video->vfilter); |
3377
4723f6fd750a
do not fault if 2pass VbrControl can't open the logfile
alex
parents:
3363
diff
changeset
|
712 |
7502
6a2b6f3d619c
best audio/video codec selection & init moved to libmpcodecs
arpi
parents:
7497
diff
changeset
|
713 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); |
7506
c1cb94198e05
-vc/-vfm accepts codec/driver _list_ now. empty list element for -vc means
arpi
parents:
7502
diff
changeset
|
714 init_best_video_codec(sh_video,video_codec_list,video_fm_list); |
7502
6a2b6f3d619c
best audio/video codec selection & init moved to libmpcodecs
arpi
parents:
7497
diff
changeset
|
715 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); |
6a2b6f3d619c
best audio/video codec selection & init moved to libmpcodecs
arpi
parents:
7497
diff
changeset
|
716 if(!sh_video->inited) mencoder_exit(1,NULL); |
3657
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
717 |
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
718 } |
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
719 |
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
720 /* force output fourcc to .. */ |
4365
9e20866c3250
added better fourcc handling for lavc, exiting if no lavc video codec name specified
alex
parents:
4355
diff
changeset
|
721 if ((force_fourcc != NULL) && (strlen(force_fourcc) >= 4)) |
3657
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
722 { |
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
723 mux_v->bih->biCompression = mmioFOURCC(force_fourcc[0], force_fourcc[1], |
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
724 force_fourcc[2], force_fourcc[3]); |
6947 | 725 printf(MSGTR_ForcingOutputFourcc, |
4365
9e20866c3250
added better fourcc handling for lavc, exiting if no lavc video codec name specified
alex
parents:
4355
diff
changeset
|
726 mux_v->bih->biCompression, (char *)&mux_v->bih->biCompression); |
2531 | 727 } |
728 | |
8030
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
729 //if(demuxer->file_format!=DEMUXER_TYPE_AVI) pts_from_bps=0; // it must be 0 for mpeg/asf! |
4370 | 730 |
2581 | 731 // ============= AUDIO =============== |
732 if(sh_audio){ | |
733 | |
8585 | 734 mux_a=muxer_new_stream(muxer,MUXER_TYPE_AUDIO); |
2581 | 735 |
736 mux_a->buffer_size=0x100000; //16384; | |
737 mux_a->buffer=malloc(mux_a->buffer_size); | |
11974 | 738 if (!mux_a->buffer) |
739 mencoder_exit(1,"memory allocation failed"); | |
2581 | 740 |
741 mux_a->source=sh_audio; | |
742 | |
2661 | 743 mux_a->codec=out_audio_codec; |
2581 | 744 |
745 switch(mux_a->codec){ | |
3385 | 746 case ACODEC_COPY: |
4369 | 747 if (sh_audio->wf){ |
3385 | 748 mux_a->wf=sh_audio->wf; |
4370 | 749 if(!sh_audio->i_bps) sh_audio->i_bps=mux_a->wf->nAvgBytesPerSec; |
4369 | 750 } else { |
3385 | 751 mux_a->wf = malloc(sizeof(WAVEFORMATEX)); |
4370 | 752 mux_a->wf->nBlockAlign = 1; //mux_a->h.dwSampleSize; |
7643 | 753 mux_a->wf->wFormatTag = sh_audio->format; |
3385 | 754 mux_a->wf->nChannels = sh_audio->channels; |
755 mux_a->wf->nSamplesPerSec = sh_audio->samplerate; | |
4369 | 756 mux_a->wf->nAvgBytesPerSec=sh_audio->i_bps; //mux_a->h.dwSampleSize*mux_a->wf->nSamplesPerSec; |
3480 | 757 mux_a->wf->wBitsPerSample = 16; // FIXME |
3385 | 758 mux_a->wf->cbSize=0; // FIXME for l3codeca.acm |
759 } | |
4370 | 760 if(sh_audio->audio.dwScale){ |
761 mux_a->h.dwSampleSize=sh_audio->audio.dwSampleSize; | |
762 mux_a->h.dwScale=sh_audio->audio.dwScale; | |
763 mux_a->h.dwRate=sh_audio->audio.dwRate; | |
6861 | 764 // mux_a->h.dwStart=sh_audio->audio.dwStart; |
4370 | 765 } else { |
766 mux_a->h.dwSampleSize=mux_a->wf->nBlockAlign; | |
767 mux_a->h.dwScale=mux_a->h.dwSampleSize; | |
768 mux_a->h.dwRate=mux_a->wf->nAvgBytesPerSec; | |
769 } | |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8075
diff
changeset
|
770 printf("audiocodec: framecopy (format=%x chans=%d rate=%ld bits=%d bps=%ld sample=%ld)\n", |
3385 | 771 mux_a->wf->wFormatTag, mux_a->wf->nChannels, mux_a->wf->nSamplesPerSec, |
4370 | 772 mux_a->wf->wBitsPerSample, mux_a->wf->nAvgBytesPerSec, mux_a->h.dwSampleSize); |
2581 | 773 break; |
2583 | 774 case ACODEC_PCM: |
775 printf("CBR PCM audio selected\n"); | |
776 mux_a->h.dwScale=1; | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
777 mux_a->h.dwRate=force_srate?force_srate:sh_audio->samplerate; |
2583 | 778 mux_a->wf=malloc(sizeof(WAVEFORMATEX)); |
779 mux_a->wf->wFormatTag=0x1; // PCM | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
780 mux_a->wf->nChannels=audio_output_channels?audio_output_channels:sh_audio->channels; |
9725 | 781 mux_a->h.dwSampleSize=2*mux_a->wf->nChannels; |
782 mux_a->wf->nBlockAlign=mux_a->h.dwSampleSize; | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
783 mux_a->wf->nSamplesPerSec=mux_a->h.dwRate; |
2583 | 784 mux_a->wf->nAvgBytesPerSec=mux_a->h.dwSampleSize*mux_a->wf->nSamplesPerSec; |
785 mux_a->wf->wBitsPerSample=16; | |
786 mux_a->wf->cbSize=0; // FIXME for l3codeca.acm | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
787 // setup filter: |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
788 if(!init_audio_filters(sh_audio, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
789 sh_audio->samplerate, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
790 sh_audio->channels, sh_audio->sample_format, sh_audio->samplesize, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
791 mux_a->wf->nSamplesPerSec, mux_a->wf->nChannels, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
792 (mux_a->wf->wBitsPerSample==8)? AFMT_U8:AFMT_S16_LE, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
793 mux_a->wf->wBitsPerSample/8, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
794 16384, mux_a->wf->nAvgBytesPerSec)){ |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
795 mp_msg(MSGT_CPLAYER,MSGL_ERR,"Couldn't find matching filter / ao format!\n"); |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
796 } |
2583 | 797 break; |
7613 | 798 #ifdef HAVE_MP3LAME |
2581 | 799 case ACODEC_VBRMP3: |
3385 | 800 printf("MP3 audio selected\n"); |
2581 | 801 mux_a->h.dwSampleSize=0; // VBR |
5685 | 802 mux_a->h.dwRate=force_srate?force_srate:sh_audio->samplerate; |
803 mux_a->h.dwScale=(mux_a->h.dwRate<32000)?576:1152; // samples/frame | |
2635
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
804 if(sizeof(MPEGLAYER3WAVEFORMAT)!=30) mp_msg(MSGT_MENCODER,MSGL_WARN,"sizeof(MPEGLAYER3WAVEFORMAT)==%d!=30, maybe broken C compiler?\n",sizeof(MPEGLAYER3WAVEFORMAT)); |
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
805 mux_a->wf=malloc(sizeof(MPEGLAYER3WAVEFORMAT)); // should be 30 |
2581 | 806 mux_a->wf->wFormatTag=0x55; // MP3 |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
807 mux_a->wf->nChannels= (lame_param_mode<0) ? sh_audio->channels : |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
808 ((lame_param_mode==3) ? 1 : 2); |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
809 mux_a->wf->nSamplesPerSec=mux_a->h.dwRate; |
2635
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
810 mux_a->wf->nAvgBytesPerSec=192000/8; // FIXME! |
6530
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
811 mux_a->wf->nBlockAlign=(mux_a->h.dwRate<32000)?576:1152; // required for l3codeca.acm + WMP 6.4 |
2635
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
812 mux_a->wf->wBitsPerSample=0; //16; |
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
813 // from NaNdub: (requires for l3codeca.acm) |
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
814 mux_a->wf->cbSize=12; |
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
815 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->wID=1; |
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
816 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->fdwFlags=2; |
5685 | 817 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nBlockSize=(mux_a->h.dwRate<32000)?576:1152; // ??? |
2635
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
818 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nFramesPerBlock=1; |
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
819 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nCodecDelay=0; |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
820 // setup filter: |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
821 if(!init_audio_filters(sh_audio, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
822 sh_audio->samplerate, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
823 sh_audio->channels, sh_audio->sample_format, sh_audio->samplesize, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
824 mux_a->wf->nSamplesPerSec, mux_a->wf->nChannels, |
8075 | 825 #ifdef WORDS_BIGENDIAN |
826 AFMT_S16_BE, 2, | |
827 #else | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
828 AFMT_S16_LE, 2, |
8075 | 829 #endif |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
830 4608, mux_a->h.dwRate*mux_a->wf->nChannels*2)){ |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
831 mp_msg(MSGT_CPLAYER,MSGL_ERR,"Couldn't find matching filter / ao format!\n"); |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
832 } |
2581 | 833 break; |
7613 | 834 #endif |
11375 | 835 #ifdef USE_LIBAVCODEC |
836 case ACODEC_LAVC: | |
837 if(!lavc_param_acodec) | |
838 { | |
839 mp_msg(MSGT_MENCODER, MSGL_FATAL, "Audio LAVC, Missing codec name!\n"); | |
840 exit(1); | |
841 } | |
842 | |
843 if(!avcodec_inited){ | |
844 avcodec_init(); | |
845 avcodec_register_all(); | |
846 avcodec_inited=1; | |
847 } | |
848 | |
849 lavc_acodec = avcodec_find_encoder_by_name(lavc_param_acodec); | |
850 if (!lavc_acodec) | |
851 { | |
852 mp_msg(MSGT_MENCODER, MSGL_FATAL, "Audio LAVC, couldn't find encoder for codec %s\n", lavc_param_acodec); | |
853 exit(1); | |
854 } | |
855 | |
856 lavc_actx = avcodec_alloc_context(); | |
857 if(lavc_actx == NULL) | |
858 { | |
859 mp_msg(MSGT_MENCODER, MSGL_FATAL, "Audio LAVC, couldn't allocate context!\n"); | |
860 exit(1); | |
861 } | |
862 | |
863 if(lavc_param_atag == 0) | |
864 lavc_param_atag = lavc_find_atag(lavc_param_acodec); | |
865 | |
866 // put sample parameters | |
867 lavc_actx->channels = audio_output_channels ? audio_output_channels : sh_audio->channels; | |
868 lavc_actx->sample_rate = force_srate ? force_srate : sh_audio->samplerate; | |
869 lavc_actx->bit_rate = lavc_param_abitrate * 1000; | |
870 | |
871 /* | |
872 * Special case for imaadpcm. | |
873 * The bitrate is only dependant on samplerate. | |
874 * We have to known frame_size and block_align in advance, | |
875 * so I just copied the code from libavcodec/adpcm.c | |
876 * | |
877 * However, ms imaadpcm uses a block_align of 2048, | |
878 * lavc defaults to 1024 | |
879 */ | |
880 if(lavc_param_atag == 0x11) { | |
881 int blkalign = 2048; | |
882 int framesize = (blkalign - 4 * lavc_actx->channels) * 8 / (4 * lavc_actx->channels) + 1; | |
883 lavc_actx->bit_rate = lavc_actx->sample_rate*8*blkalign/framesize; | |
884 } | |
885 | |
886 if(avcodec_open(lavc_actx, lavc_acodec) < 0) | |
887 { | |
888 mp_msg(MSGT_MENCODER, MSGL_FATAL, "Couldn't open codec %s, br=%d\n", lavc_param_acodec, lavc_param_abitrate); | |
889 exit(1); | |
890 } | |
891 | |
892 if(lavc_param_atag == 0x11) { | |
893 lavc_actx->block_align = 2048; | |
894 lavc_actx->frame_size = (lavc_actx->block_align - 4 * lavc_actx->channels) * 8 / (4 * lavc_actx->channels) + 1; | |
895 } | |
896 | |
897 lavc_abuf = malloc(lavc_actx->frame_size * 2 * lavc_actx->channels); | |
898 if(lavc_abuf == NULL) | |
899 { | |
900 fprintf(stderr, "Couldn't allocate %d bytes\n", lavc_actx->frame_size * 2 * lavc_actx->channels); | |
901 exit(1); | |
902 } | |
903 | |
11974 | 904 mux_a->wf = malloc(sizeof(WAVEFORMATEX)+lavc_actx->extradata_size+256); |
11375 | 905 mux_a->wf->wFormatTag = lavc_param_atag; |
906 mux_a->wf->nChannels = lavc_actx->channels; | |
907 mux_a->wf->nSamplesPerSec = lavc_actx->sample_rate; | |
908 mux_a->wf->nAvgBytesPerSec = (lavc_actx->bit_rate / 8); | |
909 mux_a->h.dwRate = mux_a->wf->nAvgBytesPerSec; | |
910 if (lavc_actx->block_align) { | |
911 mux_a->h.dwSampleSize = mux_a->h.dwScale = lavc_actx->block_align; | |
912 } else { | |
913 mux_a->h.dwScale = (mux_a->wf->nAvgBytesPerSec * lavc_actx->frame_size)/ mux_a->wf->nSamplesPerSec; /* for cbr */ | |
914 | |
915 if ((mux_a->wf->nAvgBytesPerSec * | |
916 lavc_actx->frame_size) % mux_a->wf->nSamplesPerSec) { | |
917 mux_a->h.dwScale = lavc_actx->frame_size; | |
918 mux_a->h.dwRate = lavc_actx->sample_rate; | |
919 mux_a->h.dwSampleSize = 0; // Blocksize not constant | |
920 } else { | |
921 mux_a->h.dwSampleSize = mux_a->h.dwScale; | |
922 } | |
923 } | |
924 mux_a->wf->nBlockAlign = mux_a->h.dwScale; | |
925 mux_a->h.dwSuggestedBufferSize = audio_preload*mux_a->wf->nAvgBytesPerSec; | |
926 mux_a->h.dwSuggestedBufferSize -= mux_a->h.dwSuggestedBufferSize % mux_a->wf->nBlockAlign; | |
927 | |
928 switch (lavc_param_atag) { | |
929 case 0x11: /* imaadpcm */ | |
930 mux_a->wf->wBitsPerSample = 4; | |
931 mux_a->wf->cbSize = 2; | |
12149
2cce4d42f4a8
support for abitrary imaadpcm encoding, ported from ffmpeg
alex
parents:
12100
diff
changeset
|
932 ((uint16_t*)mux_a->wf)[sizeof(WAVEFORMATEX)] = |
2cce4d42f4a8
support for abitrary imaadpcm encoding, ported from ffmpeg
alex
parents:
12100
diff
changeset
|
933 ((lavc_actx->block_align - 4 * lavc_actx->channels) / (4 * lavc_actx->channels)) * 8 + 1; |
11375 | 934 break; |
935 case 0x55: /* mp3 */ | |
936 mux_a->wf->cbSize = 12; | |
937 mux_a->wf->wBitsPerSample = 0; /* does not apply */ | |
938 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->wID = 1; | |
939 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->fdwFlags = 2; | |
940 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nBlockSize = mux_a->wf->nBlockAlign; | |
941 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nFramesPerBlock = 1; | |
942 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nCodecDelay = 0; | |
943 break; | |
944 default: | |
945 mux_a->wf->wBitsPerSample = 0; /* Unknown */ | |
11974 | 946 if (lavc_actx->extradata && (lavc_actx->extradata_size > 0)) |
947 { | |
948 memcpy(mux_a->wf+sizeof(WAVEFORMATEX), lavc_actx->extradata, | |
949 lavc_actx->extradata_size); | |
950 mux_a->wf->cbSize = lavc_actx->extradata_size; | |
951 } | |
952 else | |
953 mux_a->wf->cbSize = 0; | |
11375 | 954 break; |
955 } | |
956 | |
11974 | 957 // Fix allocation |
958 mux_a->wf = realloc(mux_a->wf, sizeof(WAVEFORMATEX)+mux_a->wf->cbSize); | |
959 | |
11375 | 960 // setup filter: |
961 if (!init_audio_filters( | |
962 sh_audio, | |
963 sh_audio->samplerate, sh_audio->channels, | |
964 sh_audio->sample_format, sh_audio->samplesize, | |
965 mux_a->wf->nSamplesPerSec, mux_a->wf->nChannels, | |
966 AFMT_S16_NE, 2, | |
967 mux_a->h.dwSuggestedBufferSize, | |
968 mux_a->h.dwSuggestedBufferSize*2)) { | |
969 mp_msg(MSGT_CPLAYER, MSGL_ERR, "Couldn't find matching filter / ao format!\n"); | |
970 exit(1); | |
971 } | |
972 | |
973 mp_msg(MSGT_MENCODER, MSGL_V, "FRAME_SIZE: %d, BUFFER_SIZE: %d, TAG: 0x%x\n", lavc_actx->frame_size, lavc_actx->frame_size * 2 * lavc_actx->channels, mux_a->wf->wFormatTag); | |
974 | |
975 break; | |
976 #endif | |
2581 | 977 } |
6861 | 978 |
979 if (verbose>1) print_wave_header(mux_a->wf); | |
980 | |
981 if(audio_delay!=0.0){ | |
982 mux_a->h.dwStart=audio_delay*mux_a->h.dwRate/mux_a->h.dwScale; | |
983 printf("Setting AUDIO DELAY to %5.3f\n",mux_a->h.dwStart*mux_a->h.dwScale/(float)mux_a->h.dwRate); | |
2581 | 984 } |
985 | |
6861 | 986 } // if(sh_audio) |
6530
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
987 |
6947 | 988 printf(MSGTR_WritingAVIHeader); |
11222 | 989 if (muxer->cont_write_header) muxer_write_header(muxer); |
2531 | 990 |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
991 decoded_frameno=0; |
2531 | 992 |
2600 | 993 if(sh_audio) |
2583 | 994 switch(mux_a->codec){ |
3357 | 995 #ifdef HAVE_MP3LAME |
2583 | 996 case ACODEC_VBRMP3: |
997 | |
998 lame=lame_init(); | |
2591 | 999 lame_set_bWriteVbrTag(lame,0); |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
1000 lame_set_in_samplerate(lame,mux_a->wf->nSamplesPerSec); |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
1001 //lame_set_in_samplerate(lame,sh_audio->samplerate); // if resampling done by lame |
2583 | 1002 lame_set_num_channels(lame,mux_a->wf->nChannels); |
2639 | 1003 lame_set_out_samplerate(lame,mux_a->wf->nSamplesPerSec); |
5922
30eea1bd1b64
fixed bogus overloaded "q" parameter for lame mp3 encoding
rfelker
parents:
5904
diff
changeset
|
1004 lame_set_quality(lame,lame_param_algqual); // 0 = best q |
2626 | 1005 if(lame_param_vbr){ // VBR: |
1006 lame_set_VBR(lame,lame_param_vbr); // vbr mode | |
12100
0cf4845d0d74
Remove spurious +1 to lame_param_quality that contradicts documentation and
diego
parents:
12061
diff
changeset
|
1007 lame_set_VBR_q(lame,lame_param_quality); // 0 = best vbr q 5=~128k |
2626 | 1008 if(lame_param_br>0) lame_set_VBR_mean_bitrate_kbps(lame,lame_param_br); |
1009 } else { // CBR: | |
1010 if(lame_param_br>0) lame_set_brate(lame,lame_param_br); | |
1011 } | |
1012 if(lame_param_mode>=0) lame_set_mode(lame,lame_param_mode); // j-st | |
1013 if(lame_param_ratio>0) lame_set_compression_ratio(lame,lame_param_ratio); | |
5848
48a0667742b9
volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents:
5685
diff
changeset
|
1014 if(lame_param_scale>0) { |
48a0667742b9
volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents:
5685
diff
changeset
|
1015 printf("Setting audio input gain to %f\n", lame_param_scale); |
48a0667742b9
volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents:
5685
diff
changeset
|
1016 lame_set_scale(lame,lame_param_scale); |
48a0667742b9
volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents:
5685
diff
changeset
|
1017 } |
11834 | 1018 if(lame_param_lowpassfreq>=-1) lame_set_lowpassfreq(lame,lame_param_lowpassfreq); |
1019 if(lame_param_highpassfreq>=-1) lame_set_highpassfreq(lame,lame_param_highpassfreq); | |
8517
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1020 #if HAVE_MP3LAME >= 392 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1021 if(lame_param_preset != NULL){ |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1022 printf ("\npreset=%s\n\n",lame_param_preset); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1023 lame_presets_set(lame,lame_param_fast, (lame_param_vbr==0), lame_param_preset); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1024 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1025 #endif |
2583 | 1026 lame_init_params(lame); |
8027 | 1027 if(verbose>0){ |
2626 | 1028 lame_print_config(lame); |
1029 lame_print_internals(lame); | |
2622 | 1030 } |
3357 | 1031 break; |
1032 #endif | |
2583 | 1033 } |
1034 | |
2531 | 1035 signal(SIGINT,exit_sighandler); // Interrupt from keyboard |
1036 signal(SIGQUIT,exit_sighandler); // Quit from keyboard | |
1037 signal(SIGTERM,exit_sighandler); // kill | |
1038 | |
4387 | 1039 timer_start=GetTimerMS(); |
1040 | |
4620 | 1041 if (seek_to_sec) { |
1042 int a,b; float d; | |
1043 | |
1044 if (sscanf(seek_to_sec, "%d:%d:%f", &a,&b,&d)==3) | |
1045 d += 3600*a + 60*b; | |
1046 else if (sscanf(seek_to_sec, "%d:%f", &a, &d)==2) | |
1047 d += 60*a; | |
1048 else | |
1049 sscanf(seek_to_sec, "%f", &d); | |
1050 | |
1051 demux_seek(demuxer, d, 1); | |
7394
e5e2243a3adb
reversed -ss behaviour (you have to use teh same -ss for all passes)
arpi
parents:
7370
diff
changeset
|
1052 // there is 2 way to handle the -ss option in 3-pass mode: |
e5e2243a3adb
reversed -ss behaviour (you have to use teh same -ss for all passes)
arpi
parents:
7370
diff
changeset
|
1053 // > 1. do the first pass for the whole file, and use -ss for 2nd/3rd pases only |
e5e2243a3adb
reversed -ss behaviour (you have to use teh same -ss for all passes)
arpi
parents:
7370
diff
changeset
|
1054 // > 2. do all the 3 passes with the same -ss value |
e5e2243a3adb
reversed -ss behaviour (you have to use teh same -ss for all passes)
arpi
parents:
7370
diff
changeset
|
1055 // this line enables behaviour 1. (and kills 2. at the same time): |
e5e2243a3adb
reversed -ss behaviour (you have to use teh same -ss for all passes)
arpi
parents:
7370
diff
changeset
|
1056 // if(demuxer2) demux_seek(demuxer2, d, 1); |
4620 | 1057 } |
1058 | |
8585 | 1059 if (out_file_format == MUXER_TYPE_MPEG) |
1060 { | |
1061 if (audio_preload > 0.4) { | |
1062 fprintf(stderr,"Limiting audio preload to 0.4s\n"); | |
1063 audio_preload = 0.4; | |
1064 } | |
1065 if (audio_density < 4) { | |
1066 fprintf(stderr,"Increasing audio density to 4\n"); | |
8731 | 1067 audio_density = 4; |
8585 | 1068 } |
1069 } | |
1070 | |
9746 | 1071 if(file_format == DEMUXER_TYPE_TV) |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1072 { |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1073 fprintf(stderr,"Forcing audio preload to 0, max pts correction to 0\n"); |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1074 audio_preload = 0.0; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1075 default_max_pts_correction = 0; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1076 } |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1077 |
6590 | 1078 play_n_frames=play_n_frames_mf; |
1079 | |
6419
773d71059d8a
On QNX eof szmbol clashes with system headers, workaround by renaming to at_eof. Fell free to reverse if zou don't like this waz.
atmos4
parents:
6333
diff
changeset
|
1080 while(!at_eof){ |
2531 | 1081 |
2571 | 1082 float frame_time=0; |
2531 | 1083 int blit_frame=0; |
1084 float a_pts=0; | |
1085 float v_pts=0; | |
2574 | 1086 unsigned char* start=NULL; |
1087 int in_size; | |
2613 | 1088 int skip_flag=0; // 1=skip -1=duplicate |
2531 | 1089 |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1090 if((end_at_type == END_AT_SIZE && end_at <= ftello(muxer_f)) || |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1091 (end_at_type == END_AT_TIME && end_at < sh_video->timer)) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1092 break; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1093 |
2643 | 1094 if(play_n_frames>=0){ |
1095 --play_n_frames; | |
1096 if(play_n_frames<0) break; | |
1097 } | |
1098 | |
2581 | 1099 if(sh_audio){ |
1100 // get audio: | |
2583 | 1101 while(mux_a->timer-audio_preload<mux_v->timer){ |
2653 | 1102 int len=0; |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1103 |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1104 ptimer_start = GetTimerMS(); |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1105 |
11375 | 1106 #ifdef USE_LIBAVCODEC |
1107 if(mux_a->codec == ACODEC_LAVC){ | |
1108 int size, rd_len; | |
1109 | |
1110 size = lavc_actx->frame_size * 2 * mux_a->wf->nChannels; | |
1111 | |
1112 rd_len = dec_audio(sh_audio, lavc_abuf, size); | |
1113 if(rd_len != size) | |
1114 break; | |
1115 | |
1116 // Encode one frame | |
1117 mux_a->buffer_len += avcodec_encode_audio(lavc_actx, mux_a->buffer + mux_a->buffer_len, size, lavc_abuf); | |
1118 if (mux_a->h.dwSampleSize) { /* CBR */ | |
1119 /* | |
1120 * work around peculiar lame behaviour | |
1121 */ | |
1122 if (mux_a->buffer_len < mux_a->wf->nBlockAlign) { | |
1123 len = 0; | |
1124 } else { | |
1125 len = mux_a->wf->nBlockAlign*(mux_a->buffer_len/mux_a->wf->nBlockAlign); | |
1126 } | |
1127 } else { /* VBR */ | |
1128 len = mux_a->buffer_len; | |
1129 } | |
1130 if (mux_v->timer == 0) mux_a->h.dwInitialFrames++; | |
1131 } | |
1132 #endif | |
2581 | 1133 if(mux_a->h.dwSampleSize){ |
2605 | 1134 // CBR - copy 0.5 sec of audio |
2583 | 1135 switch(mux_a->codec){ |
3385 | 1136 case ACODEC_COPY: // copy |
6861 | 1137 len=mux_a->wf->nAvgBytesPerSec/audio_density; |
2583 | 1138 len/=mux_a->h.dwSampleSize;if(len<1) len=1; |
1139 len*=mux_a->h.dwSampleSize; | |
1140 len=demux_read_data(sh_audio->ds,mux_a->buffer,len); | |
1141 break; | |
1142 case ACODEC_PCM: | |
6861 | 1143 len=mux_a->h.dwSampleSize*(mux_a->h.dwRate/audio_density); |
2591 | 1144 len=dec_audio(sh_audio,mux_a->buffer,len); |
2583 | 1145 break; |
1146 } | |
2581 | 1147 } else { |
2605 | 1148 // VBR - encode/copy an audio frame |
1149 switch(mux_a->codec){ | |
3385 | 1150 case ACODEC_COPY: // copy |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1151 len=ds_get_packet(sh_audio->ds,(unsigned char**) &mux_a->buffer); |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1152 // printf("VBR audio framecopy not yet implemented!\n"); |
2605 | 1153 break; |
3357 | 1154 #ifdef HAVE_MP3LAME |
2605 | 1155 case ACODEC_VBRMP3: |
2591 | 1156 while(mux_a->buffer_len<4){ |
1157 unsigned char tmp[2304]; | |
1158 int len=dec_audio(sh_audio,tmp,2304); | |
1159 if(len<=0) break; // eof | |
6530
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1160 /* mono encoding, a bit tricky */ |
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1161 if (mux_a->wf->nChannels == 1) |
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1162 { |
6581 | 1163 len = lame_encode_buffer(lame, (short *)tmp, (short *)tmp, len/2, |
6530
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1164 mux_a->buffer+mux_a->buffer_len, mux_a->buffer_size-mux_a->buffer_len); |
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1165 } |
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1166 else |
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1167 { |
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1168 len=lame_encode_buffer_interleaved(lame, |
6581 | 1169 (short *)tmp,len/4, |
2591 | 1170 mux_a->buffer+mux_a->buffer_len,mux_a->buffer_size-mux_a->buffer_len); |
6530
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1171 } |
2591 | 1172 if(len<0) break; // error |
1173 mux_a->buffer_len+=len; | |
1174 } | |
1175 if(mux_a->buffer_len<4) break; | |
1176 len=mp_decode_mp3_header(mux_a->buffer); | |
2639 | 1177 //printf("%d\n",len); |
2591 | 1178 if(len<=0) break; // bad frame! |
5685 | 1179 // printf("[%d]\n",mp_mp3_get_lsf(mux_a->buffer)); |
2591 | 1180 while(mux_a->buffer_len<len){ |
1181 unsigned char tmp[2304]; | |
1182 int len=dec_audio(sh_audio,tmp,2304); | |
1183 if(len<=0) break; // eof | |
6534 | 1184 /* mono encoding, a bit tricky */ |
1185 if (mux_a->wf->nChannels == 1) | |
1186 { | |
6581 | 1187 len = lame_encode_buffer(lame, (short *)tmp, (short *)tmp, len/2, |
6534 | 1188 mux_a->buffer+mux_a->buffer_len, mux_a->buffer_size-mux_a->buffer_len); |
1189 } | |
1190 else | |
1191 { | |
1192 len=lame_encode_buffer_interleaved(lame, | |
6581 | 1193 (short *)tmp,len/4, |
2591 | 1194 mux_a->buffer+mux_a->buffer_len,mux_a->buffer_size-mux_a->buffer_len); |
6534 | 1195 } |
2591 | 1196 if(len<0) break; // error |
1197 mux_a->buffer_len+=len; | |
1198 } | |
2605 | 1199 break; |
3357 | 1200 #endif |
2605 | 1201 } |
2581 | 1202 } |
2583 | 1203 if(len<=0) break; // EOF? |
9014
c671e9adbe22
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
9006
diff
changeset
|
1204 muxer_write_chunk(mux_a,len,0x10); |
2655 | 1205 if(!mux_a->h.dwSampleSize && mux_a->timer>0) |
3354 | 1206 mux_a->wf->nAvgBytesPerSec=0.5f+(double)mux_a->size/mux_a->timer; // avg bps (VBR) |
2591 | 1207 if(mux_a->buffer_len>=len){ |
1208 mux_a->buffer_len-=len; | |
1209 memcpy(mux_a->buffer,mux_a->buffer+len,mux_a->buffer_len); | |
1210 } | |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1211 |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1212 |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1213 audiosamples++; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1214 audiorate+= (GetTimerMS() - ptimer_start); |
2581 | 1215 } |
1216 } | |
1217 | |
1218 // get video frame! | |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1219 |
2581 | 1220 in_size=video_read_frame(sh_video,&frame_time,&start,force_fps); |
6419
773d71059d8a
On QNX eof szmbol clashes with system headers, workaround by renaming to at_eof. Fell free to reverse if zou don't like this waz.
atmos4
parents:
6333
diff
changeset
|
1221 if(in_size<0){ at_eof=1; break; } |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
1222 sh_video->timer+=frame_time; ++decoded_frameno; |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1223 |
8598
824481376632
"MPlayer does the right thing, presents frame 9 for 1.1 seconds, and continues
arpi
parents:
8585
diff
changeset
|
1224 v_timer_corr-=frame_time-(float)mux_v->h.dwScale/mux_v->h.dwRate; |
824481376632
"MPlayer does the right thing, presents frame 9 for 1.1 seconds, and continues
arpi
parents:
8585
diff
changeset
|
1225 |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
1226 if(demuxer2){ // 3-pass encoding, read control file (frameno.avi) |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1227 // find our frame: |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1228 while(next_frameno<decoded_frameno){ |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1229 int* start; |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1230 int len=ds_get_packet(demuxer2->video,(unsigned char**) &start); |
6419
773d71059d8a
On QNX eof szmbol clashes with system headers, workaround by renaming to at_eof. Fell free to reverse if zou don't like this waz.
atmos4
parents:
6333
diff
changeset
|
1231 if(len<0){ at_eof=1;break;} |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1232 if(len==0) --skip_flag; else // duplicate |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1233 if(len==4) next_frameno=start[0]; |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1234 } |
6419
773d71059d8a
On QNX eof szmbol clashes with system headers, workaround by renaming to at_eof. Fell free to reverse if zou don't like this waz.
atmos4
parents:
6333
diff
changeset
|
1235 if(at_eof) break; |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1236 // if(skip_flag) printf("!!!!!!!!!!!!\n"); |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1237 skip_flag=next_frameno-decoded_frameno; |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1238 // find next frame: |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1239 while(next_frameno<=decoded_frameno){ |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1240 int* start; |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1241 int len=ds_get_packet(demuxer2->video,(unsigned char**) &start); |
6419
773d71059d8a
On QNX eof szmbol clashes with system headers, workaround by renaming to at_eof. Fell free to reverse if zou don't like this waz.
atmos4
parents:
6333
diff
changeset
|
1242 if(len<0){ at_eof=1;break;} |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1243 if(len==0) --skip_flag; else // duplicate |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1244 if(len==4) next_frameno=start[0]; |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1245 } |
6419
773d71059d8a
On QNX eof szmbol clashes with system headers, workaround by renaming to at_eof. Fell free to reverse if zou don't like this waz.
atmos4
parents:
6333
diff
changeset
|
1246 // if(at_eof) break; |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1247 // printf("Current fno=%d requested=%d skip=%d \n",decoded_frameno,fno,skip_flag); |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1248 } else { |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1249 |
2613 | 1250 // check frame duplicate/drop: |
1251 | |
6721 | 1252 //printf("\r### %5.3f ###\n",v_timer_corr); |
1253 | |
5629 | 1254 if(v_timer_corr>=(float)mux_v->h.dwScale/mux_v->h.dwRate && |
1255 (skip_limit<0 || skip_flag<skip_limit) ){ | |
2613 | 1256 v_timer_corr-=(float)mux_v->h.dwScale/mux_v->h.dwRate; |
1257 ++skip_flag; // skip | |
1258 } else | |
5629 | 1259 while(v_timer_corr<=-(float)mux_v->h.dwScale/mux_v->h.dwRate && |
1260 (skip_limit<0 || (-skip_flag)<skip_limit) ){ | |
2613 | 1261 v_timer_corr+=(float)mux_v->h.dwScale/mux_v->h.dwRate; |
1262 --skip_flag; // dup | |
1263 } | |
2531 | 1264 |
2613 | 1265 while( (v_pts_corr<=-(float)mux_v->h.dwScale/mux_v->h.dwRate && skip_flag>0) |
1266 || (v_pts_corr<=-2*(float)mux_v->h.dwScale/mux_v->h.dwRate) ){ | |
1267 v_pts_corr+=(float)mux_v->h.dwScale/mux_v->h.dwRate; | |
1268 --skip_flag; // dup | |
1269 } | |
1270 if( (v_pts_corr>=(float)mux_v->h.dwScale/mux_v->h.dwRate && skip_flag<0) | |
1271 || (v_pts_corr>=2*(float)mux_v->h.dwScale/mux_v->h.dwRate) ) | |
1272 if(skip_flag<=0){ // we can't skip more than 1 frame now | |
1273 v_pts_corr-=(float)mux_v->h.dwScale/mux_v->h.dwRate; | |
1274 ++skip_flag; // skip | |
1275 } | |
1276 | |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1277 } // demuxer2 |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1278 |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1279 ptimer_start = GetTimerMS(); |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1280 |
2531 | 1281 switch(mux_v->codec){ |
3384 | 1282 case VCODEC_COPY: |
2574 | 1283 mux_v->buffer=start; |
9014
c671e9adbe22
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
9006
diff
changeset
|
1284 if(skip_flag<=0) muxer_write_chunk(mux_v,in_size,(sh_video->ds->flags&1)?0x10:0); |
2574 | 1285 break; |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
1286 case VCODEC_FRAMENO: |
6581 | 1287 mux_v->buffer=(unsigned char *)&decoded_frameno; // tricky |
9014
c671e9adbe22
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
9006
diff
changeset
|
1288 if(skip_flag<=0) muxer_write_chunk(mux_v,sizeof(int),0x10); |
4575 | 1289 break; |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
1290 default: |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
1291 // decode_video will callback down to ve_*.c encoders, through the video filters |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
1292 blit_frame=decode_video(sh_video,start,in_size,(skip_flag>0)?1:0); |
7370
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
1293 if(!blit_frame){ |
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
1294 badframes++; |
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
1295 if(skip_flag<=0){ |
6721 | 1296 // unwanted skipping of a frame, what to do? |
1297 if(skip_limit==0){ | |
1298 // skipping not allowed -> write empty frame: | |
9014
c671e9adbe22
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
9006
diff
changeset
|
1299 muxer_write_chunk(mux_v,0,0); |
6721 | 1300 } else { |
1301 // skipping allowed -> skip it and distriubute timer error: | |
1302 v_timer_corr-=(float)mux_v->h.dwScale/mux_v->h.dwRate; | |
1303 } | |
7370
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
1304 } |
6721 | 1305 } |
2531 | 1306 } |
2613 | 1307 |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1308 videosamples++; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1309 videorate+=(GetTimerMS() - ptimer_start); |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1310 |
2613 | 1311 if(skip_flag<0){ |
2605 | 1312 // duplicate frame |
9746 | 1313 if(file_format != DEMUXER_TYPE_TV && !verbose) printf(MSGTR_DuplicateFrames,-skip_flag); |
2613 | 1314 while(skip_flag<0){ |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1315 duplicatedframes++; |
12334
eeddcef4fb08
"hard" frame duplication for mencoder. this finally makes it possible
rfelker
parents:
12223
diff
changeset
|
1316 if (!encode_duplicates || vf_next_control(sh_video->vfilter, VFCTRL_DUPLICATE_FRAME, 0) != CONTROL_TRUE) |
eeddcef4fb08
"hard" frame duplication for mencoder. this finally makes it possible
rfelker
parents:
12223
diff
changeset
|
1317 muxer_write_chunk(mux_v,0,0); |
2613 | 1318 ++skip_flag; |
1319 } | |
2639 | 1320 } else |
1321 if(skip_flag>0){ | |
2605 | 1322 // skip frame |
9746 | 1323 if(file_format != DEMUXER_TYPE_TV && !verbose) printf(MSGTR_SkipFrame); |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1324 skippedframes++; |
2613 | 1325 --skip_flag; |
2605 | 1326 } |
1327 | |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1328 if(sh_audio && !demuxer2){ |
2605 | 1329 float AV_delay,x; |
1330 // A-V sync! | |
8030
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
1331 #if 0 |
2605 | 1332 if(pts_from_bps){ |
1333 unsigned int samples=(sh_audio->audio.dwSampleSize)? | |
1334 ((ds_tell(d_audio)-sh_audio->a_in_buffer_len)/sh_audio->audio.dwSampleSize) : | |
6871
88953ff93743
count blocks by rounded-up chunksizes instead of chunks -
arpi
parents:
6861
diff
changeset
|
1335 (d_audio->block_no); // <- used for VBR audio |
4378 | 1336 // printf("samples=%d \n",samples); |
2605 | 1337 a_pts=samples*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; |
1338 delay_corrected=1; | |
8030
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
1339 } else |
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
1340 #endif |
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
1341 { |
2605 | 1342 // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec) |
1343 a_pts=d_audio->pts; | |
1344 if(!delay_corrected) if(a_pts) delay_corrected=1; | |
1345 //printf("*** %5.3f ***\n",a_pts); | |
1346 a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; | |
1347 } | |
8966 | 1348 v_pts=sh_video ? sh_video->pts : d_video->pts; |
2605 | 1349 // av = compensated (with out buffering delay) A-V diff |
2613 | 1350 AV_delay=(a_pts-v_pts); AV_delay-=mux_a->timer-(mux_v->timer-(v_timer_corr+v_pts_corr)); |
2605 | 1351 // compensate input video timer by av: |
1352 x=AV_delay*0.1f; | |
1353 if(x<-max_pts_correction) x=-max_pts_correction; else | |
1354 if(x> max_pts_correction) x= max_pts_correction; | |
1355 if(default_max_pts_correction>=0) | |
1356 max_pts_correction=default_max_pts_correction; | |
1357 else | |
1358 max_pts_correction=sh_video->frametime*0.10; // +-10% of time | |
1359 // sh_video->timer-=x; | |
1360 c_total+=x; | |
2613 | 1361 v_pts_corr+=x; |
4387 | 1362 } |
2605 | 1363 |
4387 | 1364 // printf("A:%6.1f V:%6.1f A-V:%7.3f oAV:%7.3f diff:%7.3f ct:%7.3f vpc:%7.3f \r", |
1365 // a_pts,v_pts,a_pts-v_pts, | |
1366 // (float)(mux_a->timer-mux_v->timer), | |
1367 // AV_delay, c_total, v_pts_corr ); | |
1368 // printf("V:%6.1f \r", d_video->pts ); | |
2605 | 1369 |
1370 #if 0 | |
1371 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"A:%6.1f V:%6.1f A-V:%7.3f ct:%7.3f %3d/%3d %2d%% %2d%% %4.1f%% %d%%\r", | |
1372 a_pts,v_pts,a_pts-v_pts,c_total, | |
1373 (int)sh_video->num_frames,(int)sh_video->num_frames_decoded, | |
1374 (sh_video->timer>0.5)?(int)(100.0*video_time_usage/(double)sh_video->timer):0, | |
1375 (sh_video->timer>0.5)?(int)(100.0*vout_time_usage/(double)sh_video->timer):0, | |
1376 (sh_video->timer>0.5)?(100.0*audio_time_usage/(double)sh_video->timer):0 | |
1377 ,cache_fill_status | |
1378 ); | |
1379 #endif | |
1380 | |
4387 | 1381 { float t=(GetTimerMS()-timer_start)*0.001f; |
1382 float len=(demuxer->movi_end-demuxer->movi_start); | |
1383 float p=len>1000 ? (float)(demuxer->filepos-demuxer->movi_start) / len : 0; | |
8030
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
1384 #if 0 |
4393 | 1385 if(!len && sh_audio && sh_audio->audio.dwLength>100){ |
6871
88953ff93743
count blocks by rounded-up chunksizes instead of chunks -
arpi
parents:
6861
diff
changeset
|
1386 p=(sh_audio->audio.dwSampleSize? ds_tell(sh_audio->ds)/sh_audio->audio.dwSampleSize : sh_audio->ds->block_no) |
4393 | 1387 / (float)(sh_audio->audio.dwLength); |
1388 } | |
8030
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
1389 #endif |
4392
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1390 #if 0 |
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1391 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"%d < %d < %d \r", |
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1392 (int)demuxer->movi_start, |
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1393 (int)demuxer->filepos, |
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1394 (int)demuxer->movi_end); |
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1395 #else |
11875
6b28eb95c08b
* changes mencoder's exit code on explicit kill to 2
attila
parents:
11834
diff
changeset
|
1396 if(!quiet) { |
8027 | 1397 if(verbose>0) { |
7370
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
1398 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"Pos:%6.1fs %6df (%2d%%) %3dfps Trem:%4dmin %3dmb A-V:%5.3f [%d:%d] A/Vms %d/%d D/B/S %d/%d/%d \r", |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1399 mux_v->timer, decoded_frameno, (int)(p*100), |
7058
2e5c07262861
new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents:
6947
diff
changeset
|
1400 (t>1) ? (int)(decoded_frameno/t+0.5) : 0, |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1401 (p>0.001) ? (int)((t/p-t)/60) : 0, |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1402 (p>0.001) ? (int)(ftello(muxer_f)/p/1024/1024) : 0, |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1403 v_pts_corr, |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1404 (mux_v->timer>1) ? (int)(mux_v->size/mux_v->timer/125) : 0, |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1405 (mux_a && mux_a->timer>1) ? (int)(mux_a->size/mux_a->timer/125) : 0, |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1406 audiorate/audiosamples, videorate/videosamples, |
7370
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
1407 duplicatedframes, badframes, skippedframes |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1408 ); |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1409 } else |
4394 | 1410 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"Pos:%6.1fs %6df (%2d%%) %3dfps Trem:%4dmin %3dmb A-V:%5.3f [%d:%d]\r", |
4387 | 1411 mux_v->timer, decoded_frameno, (int)(p*100), |
7058
2e5c07262861
new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents:
6947
diff
changeset
|
1412 (t>1) ? (int)(decoded_frameno/t+0.5) : 0, |
4392
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1413 (p>0.001) ? (int)((t/p-t)/60) : 0, |
8465 | 1414 (p>0.001) ? (int)(ftello(muxer_f)/p/1024/1024) : 0, |
4394 | 1415 v_pts_corr, |
1416 (mux_v->timer>1) ? (int)(mux_v->size/mux_v->timer/125) : 0, | |
4427
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1417 (mux_a && mux_a->timer>1) ? (int)(mux_a->size/mux_a->timer/125) : 0 |
4387 | 1418 ); |
11875
6b28eb95c08b
* changes mencoder's exit code on explicit kill to 2
attila
parents:
11834
diff
changeset
|
1419 } |
4392
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1420 #endif |
4387 | 1421 } |
2605 | 1422 fflush(stdout); |
1423 | |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1424 #ifdef USE_SUB |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1425 // find sub |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
1426 if(subdata && sh_video->pts>0){ |
8966 | 1427 float pts=sh_video->pts; |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1428 if(sub_fps==0) sub_fps=sh_video->fps; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1429 if (pts > sub_last_pts || pts < sub_last_pts-1.0 ) { |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
1430 find_sub(subdata, (pts+sub_delay) * |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
1431 (subdata->sub_uses_time? 100. : sub_fps)); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
1432 // FIXME! frame counter... |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1433 sub_last_pts = pts; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1434 } |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1435 } |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1436 #endif |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1437 |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1438 #ifdef USE_DVDREAD |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1439 // DVD sub: |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
1440 if(vo_spudec||vobsub_writer){ |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1441 unsigned char* packet=NULL; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1442 int len; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1443 while((len=ds_get_packet_sub(d_dvdsub,&packet))>0){ |
8966 | 1444 mp_msg(MSGT_MENCODER,MSGL_V,"\rDVD sub: len=%d v_pts=%5.3f s_pts=%5.3f \n",len,sh_video->pts,d_dvdsub->pts); |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
1445 if (vo_spudec) |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1446 spudec_assemble(vo_spudec,packet,len,90000*d_dvdsub->pts); |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
1447 if (vobsub_writer) |
8966 | 1448 vobsub_out_output(vobsub_writer,packet,len,mux_v->timer + d_dvdsub->pts - sh_video->pts); |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1449 } |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
1450 if (vo_spudec) { |
8966 | 1451 spudec_heartbeat(vo_spudec,90000*sh_video->pts); |
5670 | 1452 vo_osd_changed(OSDTYPE_SPU); |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
1453 } |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1454 } |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1455 #endif |
2531 | 1456 |
6333
69e14bf9e223
mencoder out-of-diskspace error handling, patch by Eric Lammerts <eric@lammerts.org>
arpi
parents:
6267
diff
changeset
|
1457 if(ferror(muxer_f)) { |
6947 | 1458 mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_ErrorWritingFile, out_filename); |
6333
69e14bf9e223
mencoder out-of-diskspace error handling, patch by Eric Lammerts <eric@lammerts.org>
arpi
parents:
6267
diff
changeset
|
1459 mencoder_exit(1, NULL); |
69e14bf9e223
mencoder out-of-diskspace error handling, patch by Eric Lammerts <eric@lammerts.org>
arpi
parents:
6267
diff
changeset
|
1460 } |
2531 | 1461 |
6419
773d71059d8a
On QNX eof szmbol clashes with system headers, workaround by renaming to at_eof. Fell free to reverse if zou don't like this waz.
atmos4
parents:
6333
diff
changeset
|
1462 } // while(!at_eof) |
2531 | 1463 |
3357 | 1464 #ifdef HAVE_MP3LAME |
1465 // fixup CBR mp3 audio header: | |
3354 | 1466 if(sh_audio && mux_a->codec==ACODEC_VBRMP3 && !lame_param_vbr){ |
1467 mux_a->h.dwSampleSize=1; | |
5673 | 1468 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nBlockSize= |
1469 (mux_a->size+(mux_a->h.dwLength>>1))/mux_a->h.dwLength; | |
1470 mux_a->h.dwLength=mux_a->size; | |
3354 | 1471 mux_a->h.dwRate=mux_a->wf->nAvgBytesPerSec; |
1472 mux_a->h.dwScale=1; | |
5673 | 1473 mux_a->wf->nBlockAlign=1; |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8075
diff
changeset
|
1474 printf("\n\nCBR audio: %ld bytes/sec, %d bytes/block\n", |
5673 | 1475 mux_a->h.dwRate,((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nBlockSize); |
3354 | 1476 } |
3357 | 1477 #endif |
3354 | 1478 |
6947 | 1479 printf(MSGTR_WritingAVIIndex); |
11222 | 1480 if (muxer->cont_write_index) muxer_write_index(muxer); |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1481 muxer_f_size=ftello(muxer_f); |
6947 | 1482 printf(MSGTR_FixupAVIHeader); |
2531 | 1483 fseek(muxer_f,0,SEEK_SET); |
11222 | 1484 if (muxer->cont_write_header) muxer_write_header(muxer); // update header |
6333
69e14bf9e223
mencoder out-of-diskspace error handling, patch by Eric Lammerts <eric@lammerts.org>
arpi
parents:
6267
diff
changeset
|
1485 if(ferror(muxer_f) || fclose(muxer_f) != 0) { |
6947 | 1486 mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_ErrorWritingFile, out_filename); |
6333
69e14bf9e223
mencoder out-of-diskspace error handling, patch by Eric Lammerts <eric@lammerts.org>
arpi
parents:
6267
diff
changeset
|
1487 mencoder_exit(1, NULL); |
69e14bf9e223
mencoder out-of-diskspace error handling, patch by Eric Lammerts <eric@lammerts.org>
arpi
parents:
6267
diff
changeset
|
1488 } |
6674
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
1489 if(vobsub_writer) |
f8551f89dd48
MEncoder vobsub ripping support, currently not compatible with windows vobsub, some bugs to be fixed. However it already works with mplayer, so it's a start.
atmos4
parents:
6590
diff
changeset
|
1490 vobsub_out_close(vobsub_writer); |
4368 | 1491 |
1492 if(out_video_codec==VCODEC_FRAMENO && mux_v->timer>100){ | |
6947 | 1493 printf(MSGTR_RecommendedVideoBitrate,"650MB",(int)((650*1024*1024-muxer_f_size)/mux_v->timer/125)); |
1494 printf(MSGTR_RecommendedVideoBitrate,"700MB",(int)((700*1024*1024-muxer_f_size)/mux_v->timer/125)); | |
1495 printf(MSGTR_RecommendedVideoBitrate,"800MB",(int)((800*1024*1024-muxer_f_size)/mux_v->timer/125)); | |
7480 | 1496 printf(MSGTR_RecommendedVideoBitrate,"2 x 650MB",(int)((2*650*1024*1024-muxer_f_size)/mux_v->timer/125)); |
1497 printf(MSGTR_RecommendedVideoBitrate,"2 x 700MB",(int)((2*700*1024*1024-muxer_f_size)/mux_v->timer/125)); | |
1498 printf(MSGTR_RecommendedVideoBitrate,"2 x 800MB",(int)((2*800*1024*1024-muxer_f_size)/mux_v->timer/125)); | |
4368 | 1499 } |
1500 | |
6947 | 1501 printf(MSGTR_VideoStreamResult, |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1502 (float)(mux_v->size/mux_v->timer*8.0f/1000.0f), (int)(mux_v->size/mux_v->timer), (int)mux_v->size, (float)mux_v->timer, decoded_frameno); |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
1503 if(sh_audio) |
6947 | 1504 printf(MSGTR_AudioStreamResult, |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1505 (float)(mux_a->size/mux_a->timer*8.0f/1000.0f), (int)(mux_a->size/mux_a->timer), (int)mux_a->size, (float)mux_a->timer); |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
1506 |
7497
10d4eec40938
fixed order of uninit (codec, demuxer, stream) - found by Jindrich Makovicka
arpi
parents:
7480
diff
changeset
|
1507 if(sh_video){ uninit_video(sh_video);sh_video=NULL; } |
10d4eec40938
fixed order of uninit (codec, demuxer, stream) - found by Jindrich Makovicka
arpi
parents:
7480
diff
changeset
|
1508 if(demuxer) free_demuxer(demuxer); |
2618 | 1509 if(stream) free_stream(stream); // kill cache thread |
1510 | |
11375 | 1511 #ifdef USE_LIBAVCODEC |
1512 if(lavc_abuf != NULL) | |
1513 free(lavc_abuf); | |
1514 #endif | |
1515 | |
3320
ac8b70dd5e45
use return 1; if interrupted - patch by Artur Skawina <skawina@geocities.com>
arpi
parents:
3240
diff
changeset
|
1516 return interrupted; |
2531 | 1517 } |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1518 |
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:
10453
diff
changeset
|
1519 static int parse_end_at(m_option_t *conf, const char* param) |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1520 { |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1521 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1522 end_at_type = END_AT_NONE; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1523 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1524 /* End at size parsing */ |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1525 { |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1526 char unit[4]; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1527 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1528 end_at_type = END_AT_SIZE; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1529 |
8451 | 1530 if(sscanf(param, "%lf%3s", &end_at, unit) == 2) { |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1531 if(!strcasecmp(unit, "b")) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1532 ; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1533 else if(!strcasecmp(unit, "kb")) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1534 end_at *= 1024; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1535 else if(!strcasecmp(unit, "mb")) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1536 end_at *= 1024*1024; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1537 else |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1538 end_at_type = END_AT_NONE; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1539 } |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1540 else |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1541 end_at_type = END_AT_NONE; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1542 } |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1543 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1544 /* End at time parsing. This has to be last because of |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1545 * sscanf("%f", ...) below */ |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1546 if(end_at_type == END_AT_NONE) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1547 { |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1548 int a,b; float d; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1549 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1550 end_at_type = END_AT_TIME; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1551 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1552 if (sscanf(param, "%d:%d:%f", &a, &b, &d) == 3) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1553 end_at = 3600*a + 60*b + d; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1554 else if (sscanf(param, "%d:%f", &a, &d) == 2) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1555 end_at = 60*a + d; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1556 else if (sscanf(param, "%f", &d) == 1) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1557 end_at = d; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1558 else |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1559 end_at_type = END_AT_NONE; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1560 } |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1561 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1562 if(end_at_type == END_AT_NONE) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1563 return ERR_FUNC_ERR; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1564 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1565 return 1; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1566 } |
4427
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1567 |
7451
8669e56d2d98
some mpcodecs option declaration moved to cfg-*, as aren;t used by
arpi
parents:
7394
diff
changeset
|
1568 #if 0 |
4427
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1569 /* Flip the image in src and store the result in dst. src and dst may overlap. |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1570 width is the size of each line in bytes. */ |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1571 static uint8_t* flip_upside_down(uint8_t* dst, const uint8_t* src, int width, |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1572 int height) |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1573 { |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1574 uint8_t* tmp = malloc(width); |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1575 int i; |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1576 |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1577 for(i = 0; i < height/2; i++) { |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1578 memcpy(tmp, &src[i*width], width); |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1579 memcpy(&dst[i * width], &src[(height - i) * width], width); |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1580 memcpy(&dst[(height - i) * width], tmp, width); |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1581 } |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1582 |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1583 free(tmp); |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1584 return dst; |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1585 } |
7451
8669e56d2d98
some mpcodecs option declaration moved to cfg-*, as aren;t used by
arpi
parents:
7394
diff
changeset
|
1586 #endif |
8517
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1587 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1588 #if HAVE_MP3LAME >= 392 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1589 /* lame_presets_set |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1590 taken out of presets_set in lame-3.93.1/frontend/parse.c and modified */ |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1591 static int lame_presets_set( lame_t gfp, int fast, int cbr, const char* preset_name ) |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1592 { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1593 int mono = 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1594 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1595 if (strcmp(preset_name, "help") == 0) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1596 fprintf(stdout, "LAME version %s (%s)\n\n", get_lame_version(), get_lame_url()); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1597 lame_presets_longinfo_dm( stdout ); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1598 return -1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1599 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1600 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1601 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1602 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1603 //aliases for compatibility with old presets |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1604 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1605 if (strcmp(preset_name, "phone") == 0) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1606 preset_name = "16"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1607 mono = 1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1608 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1609 if ( (strcmp(preset_name, "phon+") == 0) || |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1610 (strcmp(preset_name, "lw") == 0) || |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1611 (strcmp(preset_name, "mw-eu") == 0) || |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1612 (strcmp(preset_name, "sw") == 0)) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1613 preset_name = "24"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1614 mono = 1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1615 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1616 if (strcmp(preset_name, "mw-us") == 0) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1617 preset_name = "40"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1618 mono = 1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1619 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1620 if (strcmp(preset_name, "voice") == 0) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1621 preset_name = "56"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1622 mono = 1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1623 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1624 if (strcmp(preset_name, "fm") == 0) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1625 preset_name = "112"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1626 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1627 if ( (strcmp(preset_name, "radio") == 0) || |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1628 (strcmp(preset_name, "tape") == 0)) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1629 preset_name = "112"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1630 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1631 if (strcmp(preset_name, "hifi") == 0) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1632 preset_name = "160"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1633 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1634 if (strcmp(preset_name, "cd") == 0) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1635 preset_name = "192"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1636 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1637 if (strcmp(preset_name, "studio") == 0) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1638 preset_name = "256"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1639 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1640 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1641 #if HAVE_MP3LAME >= 393 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1642 if (strcmp(preset_name, "medium") == 0) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1643 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1644 if (fast > 0) |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1645 lame_set_preset(gfp, MEDIUM_FAST); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1646 else |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1647 lame_set_preset(gfp, MEDIUM); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1648 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1649 return 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1650 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1651 #endif |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1652 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1653 if (strcmp(preset_name, "standard") == 0) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1654 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1655 if (fast > 0) |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1656 lame_set_preset(gfp, STANDARD_FAST); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1657 else |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1658 lame_set_preset(gfp, STANDARD); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1659 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1660 return 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1661 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1662 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1663 else if (strcmp(preset_name, "extreme") == 0){ |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1664 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1665 if (fast > 0) |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1666 lame_set_preset(gfp, EXTREME_FAST); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1667 else |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1668 lame_set_preset(gfp, EXTREME); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1669 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1670 return 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1671 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1672 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1673 else if (((strcmp(preset_name, "insane") == 0) || |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1674 (strcmp(preset_name, "320" ) == 0)) && (fast < 1)) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1675 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1676 lame_set_preset(gfp, INSANE); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1677 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1678 return 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1679 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1680 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1681 // Generic ABR Preset |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1682 if (((atoi(preset_name)) > 0) && (fast < 1)) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1683 if ((atoi(preset_name)) >= 8 && (atoi(preset_name)) <= 320){ |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1684 lame_set_preset(gfp, atoi(preset_name)); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1685 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1686 if (cbr == 1 ) |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1687 lame_set_VBR(gfp, vbr_off); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1688 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1689 if (mono == 1 ) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1690 lame_set_mode(gfp, MONO); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1691 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1692 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1693 return 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1694 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1695 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1696 else { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1697 fprintf(stderr, "LAME version %s (%s)\n\n", get_lame_version(), get_lame_url()); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1698 fprintf(stderr,"Error: The bitrate specified is out of the valid range for this preset\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1699 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1700 "When using this mode you must enter a value between \"8\" and \"320\"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1701 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1702 "For further information try: \"-lameopts preset=help\"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1703 ); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1704 return -1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1705 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1706 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1707 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1708 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1709 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1710 fprintf(stderr, "LAME version %s (%s)\n\n", get_lame_version(), get_lame_url()); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1711 fprintf(stderr,"Error: You did not enter a valid profile and/or options with preset\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1712 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1713 "Available profiles are:\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1714 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1715 " <fast> standard\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1716 " <fast> extreme\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1717 " insane\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1718 " <cbr> (ABR Mode) - The ABR Mode is implied. To use it,\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1719 " simply specify a bitrate. For example:\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1720 " \"preset=185\" activates this\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1721 " preset and uses 185 as an average kbps.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1722 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1723 " Some examples:\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1724 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1725 " \"-lameopts fast:preset=standard \"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1726 " or \"-lameopts cbr:preset=192 \"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1727 " or \"-lameopts preset=172 \"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1728 " or \"-lameopts preset=extreme \"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1729 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1730 "For further information try: \"-lameopts preset=help\"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1731 ); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1732 mencoder_exit(1, "error parsing cmdline"); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1733 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1734 #endif |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1735 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1736 #if HAVE_MP3LAME >= 392 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1737 /* lame_presets_longinfo_dm |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1738 taken out of presets_longinfo_dm in lame-3.93.1/frontend/parse.c and modified */ |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1739 static void lame_presets_longinfo_dm ( FILE* msgfp ) |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1740 { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1741 fprintf ( msgfp, |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1742 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1743 "The preset switches are designed to provide the highest possible quality.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1744 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1745 "They have for the most part been subject to and tuned via rigorous double blind\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1746 "listening tests to verify and achieve this objective.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1747 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1748 "These are continually updated to coincide with the latest developments that\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1749 "occur and as a result should provide you with nearly the best quality\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1750 "currently possible from LAME.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1751 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1752 "To activate these presets:\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1753 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1754 " For VBR modes (generally highest quality):\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1755 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1756 " \"preset=standard\" This preset should generally be transparent\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1757 " to most people on most music and is already\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1758 " quite high in quality.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1759 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1760 " \"preset=extreme\" If you have extremely good hearing and similar\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1761 " equipment, this preset will generally provide\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1762 " slightly higher quality than the \"standard\"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1763 " mode.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1764 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1765 " For CBR 320kbps (highest quality possible from the preset switches):\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1766 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1767 " \"preset=insane\" This preset will usually be overkill for most\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1768 " people and most situations, but if you must\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1769 " have the absolute highest quality with no\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1770 " regard to filesize, this is the way to go.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1771 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1772 " For ABR modes (high quality per given bitrate but not as high as VBR):\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1773 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1774 " \"preset=<kbps>\" Using this preset will usually give you good\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1775 " quality at a specified bitrate. Depending on the\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1776 " bitrate entered, this preset will determine the\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1777 " optimal settings for that particular situation.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1778 " While this approach works, it is not nearly as\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1779 " flexible as VBR, and usually will not attain the\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1780 " same level of quality as VBR at higher bitrates.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1781 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1782 "The following options are also available for the corresponding profiles:\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1783 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1784 " <fast> standard\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1785 " <fast> extreme\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1786 " insane\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1787 " <cbr> (ABR Mode) - The ABR Mode is implied. To use it,\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1788 " simply specify a bitrate. For example:\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1789 " \"preset=185\" activates this\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1790 " preset and uses 185 as an average kbps.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1791 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1792 " \"fast\" - Enables the new fast VBR for a particular profile. The\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1793 " disadvantage to the speed switch is that often times the\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1794 " bitrate will be slightly higher than with the normal mode\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1795 " and quality may be slightly lower also.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1796 " Warning: with the current version fast presets might result in too\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1797 " high bitrate compared to regular presets.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1798 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1799 " \"cbr\" - If you use the ABR mode (read above) with a significant\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1800 " bitrate such as 80, 96, 112, 128, 160, 192, 224, 256, 320,\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1801 " you can use the \"cbr\" option to force CBR mode encoding\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1802 " instead of the standard abr mode. ABR does provide higher\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1803 " quality but CBR may be useful in situations such as when\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1804 " streaming an mp3 over the internet may be important.\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1805 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1806 " For example:\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1807 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1808 " \"-lameopts fast:preset=standard \"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1809 " or \"-lameopts cbr:preset=192 \"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1810 " or \"-lameopts preset=172 \"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1811 " or \"-lameopts preset=extreme \"\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1812 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1813 "\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1814 "A few aliases are available for ABR mode:\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1815 "phone => 16kbps/mono phon+/lw/mw-eu/sw => 24kbps/mono\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1816 "mw-us => 40kbps/mono voice => 56kbps/mono\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1817 "fm/radio/tape => 112kbps hifi => 160kbps\n" |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1818 "cd => 192kbps studio => 256kbps"); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1819 mencoder_exit(0, NULL); |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1820 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1821 #endif |
11375 | 1822 |
1823 #ifdef USE_LIBAVCODEC | |
1824 static uint32_t lavc_find_atag(char *codec) | |
1825 { | |
1826 if(codec == NULL) | |
1827 return 0; | |
1828 | |
1829 if(! strcasecmp(codec, "mp2")) | |
1830 return 0x50; | |
1831 | |
1832 if(! strcasecmp(codec, "mp3")) | |
1833 return 0x55; | |
1834 | |
1835 if(! strcasecmp(codec, "ac3")) | |
1836 return 0x2000; | |
1837 | |
1838 if(! strcasecmp(codec, "adpcm_ima_wav")) | |
1839 return 0x11; | |
1840 | |
11974 | 1841 if(! strncasecmp(codec, "bonk", 4)) |
1842 return 0x2048; | |
1843 | |
11375 | 1844 return 0; |
1845 } | |
1846 #endif | |
1847 |