Mercurial > mplayer.hg
annotate mencoder.c @ 14802:63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
Seems to work, or at least not to cause problems with existing
functionality (encoding single files).
Please test and report bugs, if there are any!
author | rfelker |
---|---|
date | Fri, 25 Feb 2005 02:32:29 +0000 |
parents | b2cb91b9b4e0 |
children | 9d495b825bcd |
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 |
13166
d198f255bee9
x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
13122
diff
changeset
|
12 #define VCODEC_X264 13 |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
13 |
3385 | 14 #define ACODEC_COPY 0 |
2583 | 15 #define ACODEC_PCM 1 |
16 #define ACODEC_VBRMP3 2 | |
4368 | 17 #define ACODEC_NULL 3 |
11375 | 18 #define ACODEC_LAVC 4 |
13426 | 19 #define ACODEC_TOOLAME 5 |
2531 | 20 |
21 #include <stdio.h> | |
22 #include <stdlib.h> | |
23 #include <string.h> | |
24 #include <signal.h> | |
12360 | 25 #include "config.h" |
26 | |
9772 | 27 #ifdef __MINGW32__ |
28 #define SIGQUIT 3 | |
29 #endif | |
12358
133e0ebde74d
Make it compile on mingw again. Now it is finally possible to include windows.h in mplayer.c
faust3
parents:
12354
diff
changeset
|
30 #ifdef WIN32 |
133e0ebde74d
Make it compile on mingw again. Now it is finally possible to include windows.h in mplayer.c
faust3
parents:
12354
diff
changeset
|
31 #include <windows.h> |
133e0ebde74d
Make it compile on mingw again. Now it is finally possible to include windows.h in mplayer.c
faust3
parents:
12354
diff
changeset
|
32 #endif |
133e0ebde74d
Make it compile on mingw again. Now it is finally possible to include windows.h in mplayer.c
faust3
parents:
12354
diff
changeset
|
33 |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
34 #include <sys/time.h> |
2531 | 35 |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
36 |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
37 #include "version.h" |
2531 | 38 #include "mp_msg.h" |
39 #include "help_mp.h" | |
40 | |
3323 | 41 #include "cpudetect.h" |
42 | |
2531 | 43 #include "codec-cfg.h" |
8164
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
44 #include "m_option.h" |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
45 #include "m_config.h" |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
46 #include "parser-mecmd.h" |
2531 | 47 |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
48 #include "libmpdemux/stream.h" |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
49 #include "libmpdemux/demuxer.h" |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
50 #include "libmpdemux/stheader.h" |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
51 #include "libmpdemux/mp3_hdr.h" |
8585 | 52 #include "libmpdemux/muxer.h" |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
53 |
2531 | 54 |
55 #include "libvo/video_out.h" | |
56 | |
14245 | 57 #include "libaf/af_format.h" |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
58 |
7471 | 59 #include "libmpcodecs/mp_image.h" |
5607 | 60 #include "libmpcodecs/dec_audio.h" |
61 #include "libmpcodecs/dec_video.h" | |
6581 | 62 #include "libmpcodecs/vf.h" |
2574 | 63 |
7471 | 64 // for MPEGLAYER3WAVEFORMAT: |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12337
diff
changeset
|
65 #include "libmpdemux/ms_hdr.h" |
7471 | 66 |
3357 | 67 #ifdef HAVE_MP3LAME |
6581 | 68 #undef CDECL |
2591 | 69 #include <lame/lame.h> |
3357 | 70 #endif |
2583 | 71 |
3236 | 72 #include <inttypes.h> |
73 | |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
74 #include "libvo/fastmemcpy.h" |
3385 | 75 |
9380 | 76 #include "osdep/timer.h" |
7472
c4434bdf6e51
tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents:
7471
diff
changeset
|
77 |
11375 | 78 #ifdef USE_LIBAVCODEC |
79 // for lavc audio encoding | |
11410 | 80 |
81 #ifdef USE_LIBAVCODEC_SO | |
82 #include <ffmpeg/avcodec.h> | |
83 #else | |
11375 | 84 #include "libavcodec/avcodec.h" |
11410 | 85 #endif |
86 | |
11375 | 87 static AVCodec *lavc_acodec; |
88 static AVCodecContext *lavc_actx = NULL; | |
89 extern char *lavc_param_acodec; | |
90 extern int lavc_param_abitrate; | |
91 extern int lavc_param_atag; | |
92 // tmp buffer for lavc audio encoding (to free!!!!!) | |
93 static void *lavc_abuf = NULL; | |
94 extern int avcodec_inited; | |
95 | |
96 static uint32_t lavc_find_atag(char *codec); | |
97 #endif | |
98 | |
13426 | 99 #ifdef HAVE_TOOLAME |
100 #include "libmpcodecs/ae_toolame.h" | |
101 static mpae_toolame_ctx *mpae_toolame; | |
102 #endif | |
103 | |
5511 | 104 int vo_doublebuffering=0; |
105 int vo_directrendering=0; | |
106 int vo_config_count=0; | |
11573 | 107 int forced_subs_only=0; |
4388 | 108 |
2583 | 109 //-------------------------- |
110 | |
2531 | 111 // cache2: |
7881
aba9301ed3c4
allow cache to be disabled (-nocache should override cachesize autodetection
arpi
parents:
7867
diff
changeset
|
112 int stream_cache_size=-1; |
2531 | 113 #ifdef USE_STREAM_CACHE |
114 extern int cache_fill_status; | |
12835
4235ae5a2d60
cache min fill adjustment, based on patch by Jeremy Huddleston
iive
parents:
12546
diff
changeset
|
115 |
4235ae5a2d60
cache min fill adjustment, based on patch by Jeremy Huddleston
iive
parents:
12546
diff
changeset
|
116 float stream_cache_min_percent=20.0; |
4235ae5a2d60
cache min fill adjustment, based on patch by Jeremy Huddleston
iive
parents:
12546
diff
changeset
|
117 float stream_cache_prefill_percent=5.0; |
2531 | 118 #else |
119 #define cache_fill_status 0 | |
120 #endif | |
121 | |
2618 | 122 int audio_id=-1; |
123 int video_id=-1; | |
124 int dvdsub_id=-1; | |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
125 int vobsub_id=-1; |
10167
531b00ad6f2d
Support for selecting the audio track in Matroska files via -alang.
mosu
parents:
9870
diff
changeset
|
126 char* audio_lang=NULL; |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
127 char* dvdsub_lang=NULL; |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
128 static char* spudec_ifo=NULL; |
2618 | 129 |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
130 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
|
131 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
|
132 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
|
133 static char** video_fm_list=NULL; // override video codec family |
2531 | 134 |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
135 static int out_audio_codec=-1; |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
136 static int out_video_codec=-1; |
4620 | 137 |
8585 | 138 int out_file_format=MUXER_TYPE_AVI; // default to AVI |
139 | |
2531 | 140 // audio stream skip/resync functions requires only for seeking. |
141 // (they should be implemented in the audio codec layer) | |
142 //void skip_audio_frame(sh_audio_t *sh_audio){} | |
143 //void resync_audio_stream(sh_audio_t *sh_audio){} | |
144 | |
2618 | 145 int verbose=0; // must be global! |
14046
4802041ab8e3
Output more information about vids, aids, sids, alangs and slangs with -identify. Patch by kiriuja <mplayer-patches@en-directo.net>
mosu
parents:
13946
diff
changeset
|
146 int identify=0; |
11875
6b28eb95c08b
* changes mencoder's exit code on explicit kill to 2
attila
parents:
11834
diff
changeset
|
147 int quiet=0; |
2531 | 148 double video_time_usage=0; |
149 double vout_time_usage=0; | |
4834 | 150 double max_video_time_usage=0; |
151 double max_vout_time_usage=0; | |
4838 | 152 double cur_video_time_usage=0; |
153 double cur_vout_time_usage=0; | |
4844
76acf5bbda78
exclude benchmark stuff execution from normal playback
nick
parents:
4838
diff
changeset
|
154 int benchmark=0; |
2531 | 155 |
2605 | 156 // A-V sync: |
157 int delay_corrected=1; | |
158 static float default_max_pts_correction=-1;//0.01f; | |
159 static float max_pts_correction=0;//default_max_pts_correction; | |
160 static float c_total=0; | |
161 | |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
162 static float audio_preload=0.5; |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
163 static float audio_delay=0.0; |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
164 static int audio_density=2; |
6861 | 165 |
9564
898e3692ca0d
Made "force_fps" non-static, because code in "libmpdemux" refers to it.
rsf
parents:
9520
diff
changeset
|
166 float force_fps=0; |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
167 static float force_ofps=0; // set to 24 for inverse telecine |
5629 | 168 static int skip_limit=-1; |
2531 | 169 |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
170 static int force_srate=0; |
7614 | 171 static int audio_output_format=0; |
2618 | 172 |
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
|
173 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
|
174 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
|
175 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
|
176 |
2626 | 177 char* out_filename="test.avi"; |
178 | |
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
|
179 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
|
180 |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
181 char* passtmpfile="divx2pass.log"; |
2643 | 182 |
183 static int play_n_frames=-1; | |
6590 | 184 static int play_n_frames_mf=-1; |
2643 | 185 |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
186 #include "libvo/font_load.h" |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
187 #include "libvo/sub.h" |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
188 |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
189 // sub: |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
190 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
|
191 #ifdef HAVE_FONTCONFIG |
11584 | 192 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
|
193 #endif |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
194 float font_factor=0.75; |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
195 char **sub_name=NULL; |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
196 float sub_delay=0; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
197 float sub_fps=0; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
198 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
|
199 int subcc_enabled=0; |
8361
2202c00001e3
overlapping subtitles support is now optional, can be disabled (-nooverlapsub)
arpi
parents:
8357
diff
changeset
|
200 int suboverlap_enabled = 1; |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
201 |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
202 #ifdef USE_SUB |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
203 static sub_data* subdata=NULL; |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
204 float sub_last_pts = -303; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
205 #endif |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
206 |
9076
92014b66ed3d
ability to disable the nonsense expand filter is a must! otherwise
rfelker
parents:
9014
diff
changeset
|
207 int auto_expand=1; |
12334
eeddcef4fb08
"hard" frame duplication for mencoder. this finally makes it possible
rfelker
parents:
12223
diff
changeset
|
208 int encode_duplicates=1; |
9076
92014b66ed3d
ability to disable the nonsense expand filter is a must! otherwise
rfelker
parents:
9014
diff
changeset
|
209 |
7145
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
210 // infos are empty by default |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
211 char *info_name=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
212 char *info_artist=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
213 char *info_genre=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
214 char *info_subject=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
215 char *info_copyright=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
216 char *info_sourceform=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
217 char *info_comment=NULL; |
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
7124
diff
changeset
|
218 |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
219 |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
220 |
2661 | 221 //char *out_audio_codec=NULL; // override audio codec |
222 //char *out_video_codec=NULL; // override video codec | |
2626 | 223 |
2591 | 224 //#include "libmpeg2/mpeg2.h" |
225 //#include "libmpeg2/mpeg2_internal.h" | |
226 | |
3357 | 227 #ifdef HAVE_MP3LAME |
2626 | 228 int lame_param_quality=0; // best |
5922
30eea1bd1b64
fixed bogus overloaded "q" parameter for lame mp3 encoding
rfelker
parents:
5904
diff
changeset
|
229 int lame_param_algqual=5; // same as old default |
2626 | 230 int lame_param_vbr=vbr_default; |
231 int lame_param_mode=-1; // unset | |
232 int lame_param_padding=-1; // unset | |
233 int lame_param_br=-1; // unset | |
234 int lame_param_ratio=-1; // unset | |
5848
48a0667742b9
volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents:
5685
diff
changeset
|
235 float lame_param_scale=-1; // unset |
11834 | 236 int lame_param_lowpassfreq = 0; //auto |
237 int lame_param_highpassfreq = 0; //auto | |
12489 | 238 int lame_param_free_format = 0; //disabled |
239 int lame_param_br_min = 0; //not specified | |
240 int lame_param_br_max = 0; //not specified | |
11834 | 241 |
8517
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
242 #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
|
243 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
|
244 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
|
245 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
|
246 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
|
247 #endif |
3357 | 248 #endif |
2626 | 249 |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
250 //static int vo_w=0, vo_h=0; |
5270 | 251 |
2618 | 252 //-------------------------- config stuff: |
253 | |
4156
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4088
diff
changeset
|
254 m_config_t* mconfig; |
22fadd4022b5
playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents:
4088
diff
changeset
|
255 |
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
|
256 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
|
257 |
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
|
258 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
|
259 |
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
|
260 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
|
261 return m_config_parse_config_file(mconfig, filename); |
2618 | 262 } |
263 | |
4620 | 264 static char *seek_to_sec=NULL; |
265 static off_t seek_to_byte=0; | |
266 | |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
267 static void parse_end_at(); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
268 static char * end_at_string=0; |
7451
8669e56d2d98
some mpcodecs option declaration moved to cfg-*, as aren;t used by
arpi
parents:
7394
diff
changeset
|
269 //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
|
270 |
2618 | 271 #include "get_path.c" |
272 | |
273 #include "cfg-mplayer-def.h" | |
274 #include "cfg-mencoder.h" | |
275 | |
4088 | 276 #ifdef USE_DVDREAD |
277 #include "spudec.h" | |
278 #endif | |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
279 #include "vobsub.h" |
4088 | 280 |
4743 | 281 /* FIXME */ |
11222 | 282 static void mencoder_exit(int level, char *how) |
4743 | 283 { |
284 if (how) | |
13122 | 285 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_ExitingHow, mp_gettext(how)); |
4743 | 286 else |
13122 | 287 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_Exiting); |
4743 | 288 |
289 exit(level); | |
290 } | |
291 | |
4488 | 292 void parse_cfgfiles( m_config_t* conf ) |
293 { | |
294 char *conffile; | |
295 if ((conffile = get_path("mencoder")) == NULL) { | |
296 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_GetpathProblem); | |
297 } else { | |
298 if (m_config_parse_config_file(conf, conffile) < 0) | |
13122 | 299 mencoder_exit(1,MSGTR_ConfigfileError); |
4488 | 300 free(conffile); |
301 } | |
302 } | |
303 | |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
304 |
2591 | 305 //--------------------------------------------------------------------------- |
306 | |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
307 static int dec_audio(sh_audio_t *sh_audio,unsigned char* buffer,int total){ |
2591 | 308 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
|
309 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
|
310 while(size<total && !at_eof){ |
2591 | 311 int len=total-size; |
312 if(len>MAX_OUTBURST) len=MAX_OUTBURST; | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
313 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
|
314 if(len>sh_audio->a_out_buffer_len){ |
2591 | 315 int ret=decode_audio(sh_audio, |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
316 &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
|
317 len-sh_audio->a_out_buffer_len, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
318 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
|
319 if(ret>0) sh_audio->a_out_buffer_len+=ret; else at_eof=1; |
2591 | 320 } |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
321 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
|
322 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
|
323 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
|
324 if(sh_audio->a_out_buffer_len>0) |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
325 memcpy(sh_audio->a_out_buffer,&sh_audio->a_out_buffer[len],sh_audio->a_out_buffer_len); |
2591 | 326 } |
327 return size; | |
328 } | |
329 | |
330 //--------------------------------------------------------------------------- | |
2531 | 331 |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
332 // this function returns the absoloute time for which MEncoder will switch files or move in the file. |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
333 // so audio can be cut correctly. -1 if there is no limit. |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
334 static float stop_time(demuxer_t* demuxer, muxer_stream_t* mux_v); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
335 |
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
|
336 static int at_eof=0; |
3320
ac8b70dd5e45
use return 1; if interrupted - patch by Artur Skawina <skawina@geocities.com>
arpi
parents:
3240
diff
changeset
|
337 static int interrupted=0; |
2531 | 338 |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
339 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
|
340 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
|
341 static double end_at; |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
342 |
2531 | 343 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
|
344 at_eof=1; |
11875
6b28eb95c08b
* changes mencoder's exit code on explicit kill to 2
attila
parents:
11834
diff
changeset
|
345 interrupted=2; /* 1 means error */ |
2531 | 346 } |
347 | |
8585 | 348 static muxer_t* muxer=NULL; |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
349 static FILE* muxer_f=NULL; |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
350 |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
8075
diff
changeset
|
351 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
|
352 |
7201
22beff6edf75
Improved MacOS X SDL support, enable SDL main() wrapper for Darwin, remove unused envp.
atmos4
parents:
7180
diff
changeset
|
353 int main(int argc,char* argv[]){ |
2531 | 354 |
355 stream_t* stream=NULL; | |
356 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
|
357 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
|
358 demuxer_t* demuxer2=NULL; |
2531 | 359 demux_stream_t *d_audio=NULL; |
360 demux_stream_t *d_video=NULL; | |
361 demux_stream_t *d_dvdsub=NULL; | |
362 sh_audio_t *sh_audio=NULL; | |
363 sh_video_t *sh_video=NULL; | |
364 int file_format=DEMUXER_TYPE_UNKNOWN; | |
12223 | 365 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
|
366 void *vobsub_writer=NULL; |
2531 | 367 |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
368 uint32_t ptimer_start; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
369 uint32_t audiorate=0; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
370 uint32_t videorate=0; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
371 uint32_t audiosamples=1; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
372 uint32_t videosamples=1; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
373 uint32_t skippedframes=0; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
374 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
|
375 uint32_t badframes=0; |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
376 |
8585 | 377 muxer_stream_t* mux_a=NULL; |
378 muxer_stream_t* mux_v=NULL; | |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
379 off_t muxer_f_size=0; |
2531 | 380 |
3357 | 381 #ifdef HAVE_MP3LAME |
2591 | 382 lame_global_flags *lame; |
3357 | 383 #endif |
2583 | 384 |
2613 | 385 double v_pts_corr=0; |
386 double v_timer_corr=0; | |
2605 | 387 |
8164
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
388 m_entry_t* filelist = NULL; |
2618 | 389 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
|
390 char* frameno_filename="frameno.avi"; |
2618 | 391 |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
392 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
|
393 int next_frameno=-1; |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
394 int curfile=0; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
395 int prevwidth = 0; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
396 int prevhieght = 0; ///< When different from 0, after decoding a frame, Resolution must be checked to match previous file |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
397 |
4387 | 398 unsigned int timer_start; |
399 | |
5223 | 400 mp_msg_init(); |
401 mp_msg_set_level(MSGL_STATUS); | |
14296 | 402 mp_msg(MSGT_CPLAYER,MSGL_INFO, "MEncoder " VERSION " (C) 2000-2005 MPlayer Team\n"); |
2622 | 403 |
3323 | 404 /* Test for cpu capabilities (and corresponding OS support) for optimizing */ |
9003 | 405 GetCpuCaps(&gCpuCaps); |
14610
9e81b41838e6
Print CPUflags and extension support on x86_64, too
reimar
parents:
14296
diff
changeset
|
406 #if defined(ARCH_X86) || defined(ARCH_X86_64) |
3323 | 407 mp_msg(MSGT_CPLAYER,MSGL_INFO,"CPUflags: Type: %d MMX: %d MMX2: %d 3DNow: %d 3DNow2: %d SSE: %d SSE2: %d\n", |
408 gCpuCaps.cpuType,gCpuCaps.hasMMX,gCpuCaps.hasMMX2, | |
409 gCpuCaps.has3DNow, gCpuCaps.has3DNowExt, | |
410 gCpuCaps.hasSSE, gCpuCaps.hasSSE2); | |
10453 | 411 #ifdef RUNTIME_CPUDETECT |
412 mp_msg(MSGT_CPLAYER,MSGL_INFO, MSGTR_CompiledWithRuntimeDetection); | |
413 #else | |
414 mp_msg(MSGT_CPLAYER,MSGL_INFO, MSGTR_CompiledWithCPUExtensions); | |
415 #ifdef HAVE_MMX | |
416 mp_msg(MSGT_CPLAYER,MSGL_INFO," MMX"); | |
3323 | 417 #endif |
10453 | 418 #ifdef HAVE_MMX2 |
419 mp_msg(MSGT_CPLAYER,MSGL_INFO," MMX2"); | |
420 #endif | |
421 #ifdef HAVE_3DNOW | |
422 mp_msg(MSGT_CPLAYER,MSGL_INFO," 3DNow"); | |
423 #endif | |
424 #ifdef HAVE_3DNOWEX | |
425 mp_msg(MSGT_CPLAYER,MSGL_INFO," 3DNowEx"); | |
426 #endif | |
427 #ifdef HAVE_SSE | |
428 mp_msg(MSGT_CPLAYER,MSGL_INFO," SSE"); | |
429 #endif | |
430 #ifdef HAVE_SSE2 | |
431 mp_msg(MSGT_CPLAYER,MSGL_INFO," SSE2"); | |
432 #endif | |
433 mp_msg(MSGT_CPLAYER,MSGL_INFO,"\n\n"); | |
434 #endif | |
435 #endif | |
436 | |
11550
18d3b3a1101b
InitTimer has to be called before *Timer-Functions can be used.
ranma
parents:
11513
diff
changeset
|
437 InitTimer(); |
18d3b3a1101b
InitTimer has to be called before *Timer-Functions can be used.
ranma
parents:
11513
diff
changeset
|
438 |
5889 | 439 // check codec.conf |
11759
29eea271490e
add -codecs-file for selecting a specific codecs.conf on the comand line
attila
parents:
11592
diff
changeset
|
440 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
|
441 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
|
442 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
|
443 if(!parse_codec_cfg(NULL)){ |
29eea271490e
add -codecs-file for selecting a specific codecs.conf on the comand line
attila
parents:
11592
diff
changeset
|
444 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
|
445 mencoder_exit(1,NULL); |
29eea271490e
add -codecs-file for selecting a specific codecs.conf on the comand line
attila
parents:
11592
diff
changeset
|
446 } |
13946 | 447 mp_msg(MSGT_MENCODER,MSGL_V,MSGTR_BuiltinCodecsConf); |
8467
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8465
diff
changeset
|
448 } |
5889 | 449 } |
450 } | |
451 | |
8164
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
452 // 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
|
453 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
|
454 if(stream2){ |
9006
d00997f12257
extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
9003
diff
changeset
|
455 demuxer2=demux_open(stream2,DEMUXER_TYPE_AVI,-1,-1,-2,NULL); |
13122 | 456 if(demuxer2) mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_UsingPass3ControllFile, frameno_filename); |
8925
5c15777f1c07
this patch adds an fallback to playlist (any but the plaintext-list format)
arpi
parents:
8797
diff
changeset
|
457 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
|
458 } |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
459 |
8164
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
460 mconfig = m_config_new(); |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
461 m_config_register_options(mconfig,mencoder_opts); |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
462 parse_cfgfiles(mconfig); |
487cfc28525d
New config system + cleanup of header inter dependency
albeu
parents:
8123
diff
changeset
|
463 filelist = m_config_parse_me_command_line(mconfig, argc, argv); |
13122 | 464 if(!filelist) mencoder_exit(1, MSGTR_ErrorParsingCommandLine); |
2618 | 465 |
5223 | 466 mp_msg_set_level(verbose+MSGL_STATUS); |
2600 | 467 |
6267
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
468 // check font |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
469 #ifdef USE_OSD |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7058
diff
changeset
|
470 #ifdef HAVE_FREETYPE |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7058
diff
changeset
|
471 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
|
472 #endif |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
473 #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
|
474 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
|
475 { |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
476 #endif |
6267
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
477 if(font_name){ |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
478 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
|
479 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
|
480 } else { |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
481 // try default: |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
482 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
|
483 if(!vo_font) |
10272
7b0bc557987b
renames: DATADIR->MPLAYER_DATADIR, CONFDIR->MPLAYER_CONFDIR, LIBDIR->MPLAYER_LIBDIR
arpi
parents:
10167
diff
changeset
|
484 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
|
485 } |
11580
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11573
diff
changeset
|
486 #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
|
487 } |
6267
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
488 #endif |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7058
diff
changeset
|
489 #endif |
6267
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
490 |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
491 vo_init_osd(); |
2e117fd620a0
font init needs to be after config parsing, otherwise -font won't
rfelker
parents:
6138
diff
changeset
|
492 |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
493 play_next_file: |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
494 m_config_push(mconfig); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
495 m_entry_set_options(mconfig,&filelist[curfile]); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
496 filename = filelist[curfile].name; |
14685
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
497 |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
498 if(!filename){ |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
499 mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_MissingFilename); |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
500 mencoder_exit(1,NULL); |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
501 } |
9746 | 502 stream=open_stream(filename,0,&file_format); |
2531 | 503 |
504 if(!stream){ | |
13122 | 505 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_CannotOpenFile_Device); |
4743 | 506 mencoder_exit(1,NULL); |
2531 | 507 } |
508 | |
13122 | 509 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_OpenedStream, file_format, (int)(stream->start_pos), (int)(stream->end_pos)); |
2531 | 510 |
5436 | 511 #ifdef USE_DVDREAD |
512 if(stream->type==STREAMTYPE_DVD){ | |
513 if(audio_lang && audio_id==-1) audio_id=dvd_aid_from_lang(stream,audio_lang); | |
514 if(dvdsub_lang && dvdsub_id==-1) dvdsub_id=dvd_sid_from_lang(stream,dvdsub_lang); | |
515 } | |
516 #endif | |
517 | |
5626
b7b40e65c070
-sb option re-added (noticed by Alexandre Oliva <oliva@lsd.ic.unicamp.br>)
arpi
parents:
5607
diff
changeset
|
518 stream->start_pos+=seek_to_byte; |
2531 | 519 |
7881
aba9301ed3c4
allow cache to be disabled (-nocache should override cachesize autodetection
arpi
parents:
7867
diff
changeset
|
520 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
|
521 |
7529
c276bfb414fb
removed obsolete/unused audio|video_fm|codec, has_audio|video
arpi
parents:
7526
diff
changeset
|
522 if(demuxer2) audio_id=-2; /* do NOT read audio packets... */ |
4355 | 523 |
2882 | 524 //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
|
525 demuxer=demux_open(stream,file_format,audio_id,video_id,dvdsub_id,filename); |
2531 | 526 if(!demuxer){ |
8925
5c15777f1c07
this patch adds an fallback to playlist (any but the plaintext-list format)
arpi
parents:
8797
diff
changeset
|
527 mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_FormatNotRecognized); |
13122 | 528 mp_msg(MSGT_DEMUXER, MSGL_ERR, MSGTR_CannotOpenDemuxer); //correct target/level? FIXME? |
4743 | 529 mencoder_exit(1,NULL); |
2531 | 530 } |
531 | |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
532 d_audio=demuxer2 ? demuxer2->audio : demuxer->audio; |
2531 | 533 d_video=demuxer->video; |
534 d_dvdsub=demuxer->sub; | |
535 sh_audio=d_audio->sh; | |
536 sh_video=d_video->sh; | |
537 | |
11513
552ddee604c9
workaround! exit if there's no video stream (hopefully it's a proper fix)
alex
parents:
11410
diff
changeset
|
538 if(!sh_video) |
552ddee604c9
workaround! exit if there's no video stream (hopefully it's a proper fix)
alex
parents:
11410
diff
changeset
|
539 { |
13122 | 540 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_VideoStreamRequired); |
11513
552ddee604c9
workaround! exit if there's no video stream (hopefully it's a proper fix)
alex
parents:
11410
diff
changeset
|
541 mencoder_exit(1,NULL); |
552ddee604c9
workaround! exit if there's no video stream (hopefully it's a proper fix)
alex
parents:
11410
diff
changeset
|
542 } |
552ddee604c9
workaround! exit if there's no video stream (hopefully it's a proper fix)
alex
parents:
11410
diff
changeset
|
543 |
2531 | 544 if(!video_read_properties(sh_video)){ |
13122 | 545 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_CannotReadVideoProperties); |
4743 | 546 mencoder_exit(1,NULL); |
2531 | 547 } |
548 | |
2622 | 549 mp_msg(MSGT_MENCODER,MSGL_INFO,"[V] filefmt:%d fourcc:0x%X size:%dx%d fps:%5.2f ftime:=%6.4f\n", |
2531 | 550 demuxer->file_format,sh_video->format, sh_video->disp_w,sh_video->disp_h, |
551 sh_video->fps,sh_video->frametime | |
552 ); | |
2581 | 553 |
8357
ea3c66c6665f
fixed -fps with mencoder and fixed-rate files (avi etc)
arpi
parents:
8355
diff
changeset
|
554 if(force_fps){ |
ea3c66c6665f
fixed -fps with mencoder and fixed-rate files (avi etc)
arpi
parents:
8355
diff
changeset
|
555 sh_video->fps=force_fps; |
ea3c66c6665f
fixed -fps with mencoder and fixed-rate files (avi etc)
arpi
parents:
8355
diff
changeset
|
556 sh_video->frametime=1.0f/sh_video->fps; |
13122 | 557 mp_msg(MSGT_MENCODER,MSGL_INFO,MSGTR_ForcingInputFPS, sh_video->fps); |
8357
ea3c66c6665f
fixed -fps with mencoder and fixed-rate files (avi etc)
arpi
parents:
8355
diff
changeset
|
558 } |
ea3c66c6665f
fixed -fps with mencoder and fixed-rate files (avi etc)
arpi
parents:
8355
diff
changeset
|
559 |
12016
b962aaad2940
rawvideo muxer patch by John Earl <jwe21@cam.ac.uk>
ranma
parents:
11974
diff
changeset
|
560 if(sh_audio && out_file_format==MUXER_TYPE_RAWVIDEO){ |
13122 | 561 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_RawvideoDoesNotSupportAudio); |
12016
b962aaad2940
rawvideo muxer patch by John Earl <jwe21@cam.ac.uk>
ranma
parents:
11974
diff
changeset
|
562 sh_audio=NULL; |
b962aaad2940
rawvideo muxer patch by John Earl <jwe21@cam.ac.uk>
ranma
parents:
11974
diff
changeset
|
563 } |
6923
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
564 if(sh_audio && out_audio_codec<0){ |
8796 | 565 if(audio_id==-2) |
13122 | 566 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_DemuxerDoesntSupportNosound); |
6947 | 567 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
|
568 mencoder_exit(1,NULL); |
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
569 } |
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
570 if(sh_video && out_video_codec<0){ |
6947 | 571 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
|
572 mencoder_exit(1,NULL); |
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
573 } |
60374fa581fc
no default oac/ovc (it just confuses users), more detailed -oac/-ovc help
arpi
parents:
6871
diff
changeset
|
574 |
4620 | 575 if(sh_audio && (out_audio_codec || seek_to_sec || !sh_audio->wf)){ |
2581 | 576 // 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
|
577 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); |
7522 | 578 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
|
579 sh_audio=d_audio->sh=NULL; // failed to init :( |
2581 | 580 } |
7502
6a2b6f3d619c
best audio/video codec selection & init moved to libmpcodecs
arpi
parents:
7497
diff
changeset
|
581 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); |
2581 | 582 } |
583 | |
14685
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
584 #ifdef USE_SUB |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
585 // after reading video params we should load subtitles because |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
586 // we know fps so now we can adjust subtitles time to ~6 seconds AST |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
587 // check .sub |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
588 // current_module="read_subtitles_file"; |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
589 if(sub_name && sub_name[0]){ |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
590 subdata=sub_read_file(sub_name[0], sh_video->fps); |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
591 if(!subdata) mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadSub,sub_name[0]); |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
592 } else |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
593 if(sub_auto) { // auto load sub file ... |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
594 subdata=sub_read_file( filename ? sub_filenames( get_path("sub/"), filename )[0] |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
595 : "default.sub", sh_video->fps ); |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
596 } |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
597 #endif |
4b02f759f529
small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
reynaldo
parents:
14610
diff
changeset
|
598 |
2531 | 599 // set up video encoder: |
600 | |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
601 if (!curfile) { // curfile is non zero when a second file is opened |
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
|
602 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
|
603 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
|
604 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
|
605 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
|
606 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
|
607 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
|
608 #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
|
609 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
|
610 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
|
611 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
|
612 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
|
613 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
|
614 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
|
615 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
|
616 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
|
617 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
|
618 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
|
619 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
|
620 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
|
621 } |
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
|
622 } |
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
|
623 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
|
624 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
|
625 } |
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
|
626 #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
|
627 } |
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
|
628 else { |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
629 if (spudec_ifo) { |
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
630 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
|
631 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
|
632 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
|
633 } |
5392
d7c586ebbacf
Fix bug noticed by Hajba Szilard in message <20020329151644.A23301@revai.hu>
kmkaplan
parents:
5390
diff
changeset
|
634 #ifdef USE_DVDREAD |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
635 if (vo_spudec==NULL) { |
4557 | 636 vo_spudec=spudec_new_scaled(stream->type==STREAMTYPE_DVD?((dvd_priv_t *)(stream->priv))->cur_pgc->palette:NULL, |
4088 | 637 sh_video->disp_w, sh_video->disp_h); |
5388
3af2729c5c87
* New command line switch for mplayer & mencoder:
kmkaplan
parents:
5386
diff
changeset
|
638 } |
4088 | 639 #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
|
640 } |
4088 | 641 |
11573 | 642 // Apply current settings for forced subs |
643 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
|
644 |
2531 | 645 // set up output file: |
2626 | 646 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
|
647 if(!muxer_f) { |
13122 | 648 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_CannotOpenOutputFile, out_filename); |
4743 | 649 mencoder_exit(1,NULL); |
2887
bc648c6a464a
fixes a segfault if file specified in -o can't be accessed
pl
parents:
2884
diff
changeset
|
650 } |
bc648c6a464a
fixes a segfault if file specified in -o can't be accessed
pl
parents:
2884
diff
changeset
|
651 |
9014
c671e9adbe22
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
9006
diff
changeset
|
652 muxer=muxer_new_muxer(out_file_format,muxer_f); |
2581 | 653 |
654 // ============= VIDEO =============== | |
655 | |
8585 | 656 mux_v=muxer_new_stream(muxer,MUXER_TYPE_VIDEO); |
2531 | 657 |
4575 | 658 mux_v->buffer_size=0x200000; // 2MB |
2531 | 659 mux_v->buffer=malloc(mux_v->buffer_size); |
660 | |
661 mux_v->source=sh_video; | |
662 | |
663 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
|
664 #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
|
665 { |
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
|
666 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
|
667 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
|
668 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
|
669 } |
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
|
670 #else |
2531 | 671 mux_v->h.dwScale=10000; |
2613 | 672 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
|
673 #endif |
2531 | 674 |
2661 | 675 mux_v->codec=out_video_codec; |
2574 | 676 |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
677 mux_v->bih=NULL; |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
678 } |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
679 sh_video->codec=NULL; |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
680 sh_video->video_out=NULL; |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
681 sh_video->vfilter=NULL; // fixme! |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
682 |
2531 | 683 switch(mux_v->codec){ |
3384 | 684 case VCODEC_COPY: |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
685 if (!curfile) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
686 if (sh_video->bih) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
687 mux_v->bih=malloc(sh_video->bih->biSize); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
688 memcpy(mux_v->bih, sh_video->bih, sh_video->bih->biSize); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
689 } |
3384 | 690 else |
691 { | |
12546
7f8ae1376d6c
We don't want junk in unused parts of the BITMAPINFOHEADER
ranma
parents:
12490
diff
changeset
|
692 mux_v->bih=calloc(1,sizeof(BITMAPINFOHEADER)); |
3384 | 693 mux_v->bih->biSize=sizeof(BITMAPINFOHEADER); |
694 mux_v->bih->biWidth=sh_video->disp_w; | |
695 mux_v->bih->biHeight=sh_video->disp_h; | |
696 mux_v->bih->biCompression=sh_video->format; | |
697 mux_v->bih->biPlanes=1; | |
698 mux_v->bih->biBitCount=24; // FIXME!!! | |
699 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8); | |
700 } | |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
701 } |
13122 | 702 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_VCodecFramecopy, |
3384 | 703 mux_v->bih->biWidth, mux_v->bih->biHeight, |
704 mux_v->bih->biBitCount, mux_v->bih->biCompression); | |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
705 |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
706 if (curfile) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
707 if (sh_video->bih) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
708 if ((mux_v->bih->biSize != sh_video->bih->biSize) || |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
709 memcmp(mux_v->bih, sh_video->bih, sh_video->bih->biSize)) |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
710 { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
711 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_VCodecFramecopy, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
712 sh_video->bih->biWidth, sh_video->bih->biHeight, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
713 sh_video->bih->biBitCount, sh_video->bih->biCompression); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
714 mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_FrameCopyFileMismatch); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
715 mencoder_exit(1,NULL); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
716 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
717 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
718 else { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
719 if ((mux_v->bih->biWidth != sh_video->disp_w) || |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
720 (mux_v->bih->biHeight != sh_video->disp_h) || |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
721 (mux_v->bih->biCompression != sh_video->format)) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
722 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_VCodecFramecopy, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
723 sh_video->disp_w, sh_video->disp_w, 24, sh_video->format); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
724 mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_FrameCopyFileMismatch); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
725 mencoder_exit(1,NULL); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
726 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
727 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
728 } |
2531 | 729 break; |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
730 case VCODEC_FRAMENO: |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
731 if (!curfile) { |
12546
7f8ae1376d6c
We don't want junk in unused parts of the BITMAPINFOHEADER
ranma
parents:
12490
diff
changeset
|
732 mux_v->bih=calloc(1,sizeof(BITMAPINFOHEADER)); |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
733 mux_v->bih->biSize=sizeof(BITMAPINFOHEADER); |
7559
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
734 mux_v->bih->biWidth=sh_video->disp_w; |
b645204ea527
some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents:
7529
diff
changeset
|
735 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
|
736 mux_v->bih->biPlanes=1; |
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
737 mux_v->bih->biBitCount=24; |
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
738 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
|
739 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8); |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
740 } |
3361
5d70491f438c
new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents:
3357
diff
changeset
|
741 break; |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
742 default: |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
743 |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
744 switch(mux_v->codec){ |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
745 case VCODEC_DIVX4: |
6581 | 746 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
|
747 case VCODEC_LIBAVCODEC: |
6581 | 748 sh_video->vfilter=vf_open_encoder(NULL,"lavc",(char *)mux_v); break; |
11966 | 749 case VCODEC_RAW: |
750 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
|
751 case VCODEC_VFW: |
6581 | 752 sh_video->vfilter=vf_open_encoder(NULL,"vfw",(char *)mux_v); break; |
5578 | 753 case VCODEC_LIBDV: |
6581 | 754 sh_video->vfilter=vf_open_encoder(NULL,"libdv",(char *)mux_v); break; |
7457 | 755 case VCODEC_XVID: |
756 sh_video->vfilter=vf_open_encoder(NULL,"xvid",(char *)mux_v); break; | |
8471 | 757 case VCODEC_QTVIDEO: |
758 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
|
759 case VCODEC_NUV: |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
9380
diff
changeset
|
760 sh_video->vfilter=vf_open_encoder(NULL,"nuv",(char *)mux_v); break; |
13166
d198f255bee9
x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
13122
diff
changeset
|
761 case VCODEC_X264: |
d198f255bee9
x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
13122
diff
changeset
|
762 sh_video->vfilter=vf_open_encoder(NULL,"x264",(char *)mux_v); break; |
4743 | 763 } |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
764 if(!mux_v->bih || !sh_video->vfilter){ |
6947 | 765 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
|
766 mencoder_exit(1,NULL); |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
767 } |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
768 // append 'expand' filter, it fixes stride problems and renders osd: |
9595 | 769 if (auto_expand) { |
770 char* vf_args[] = { "osd", "1", NULL }; | |
771 sh_video->vfilter=vf_open_filter(sh_video->vfilter,"expand",vf_args); | |
772 } | |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
773 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
|
774 |
7502
6a2b6f3d619c
best audio/video codec selection & init moved to libmpcodecs
arpi
parents:
7497
diff
changeset
|
775 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
|
776 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
|
777 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); |
6a2b6f3d619c
best audio/video codec selection & init moved to libmpcodecs
arpi
parents:
7497
diff
changeset
|
778 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
|
779 |
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
780 } |
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
781 |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
782 if (!curfile) { |
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
|
783 /* 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
|
784 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
|
785 { |
af1f8e2d693a
added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents:
3563
diff
changeset
|
786 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
|
787 force_fourcc[2], force_fourcc[3]); |
13122 | 788 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_ForcingOutputFourcc, |
4365
9e20866c3250
added better fourcc handling for lavc, exiting if no lavc video codec name specified
alex
parents:
4355
diff
changeset
|
789 mux_v->bih->biCompression, (char *)&mux_v->bih->biCompression); |
2531 | 790 } |
791 | |
14757
7a2adc5e8928
initial, extremely experimental, libavformat muxer; don't expect anything to work yet
nicodvb
parents:
14685
diff
changeset
|
792 if(muxer->fix_stream_parameters) |
7a2adc5e8928
initial, extremely experimental, libavformat muxer; don't expect anything to work yet
nicodvb
parents:
14685
diff
changeset
|
793 muxer_stream_fix_parameters(muxer,mux_v); |
8030
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
794 //if(demuxer->file_format!=DEMUXER_TYPE_AVI) pts_from_bps=0; // it must be 0 for mpeg/asf! |
4370 | 795 |
2581 | 796 // ============= AUDIO =============== |
797 if(sh_audio){ | |
798 | |
8585 | 799 mux_a=muxer_new_stream(muxer,MUXER_TYPE_AUDIO); |
2581 | 800 |
801 mux_a->buffer_size=0x100000; //16384; | |
802 mux_a->buffer=malloc(mux_a->buffer_size); | |
11974 | 803 if (!mux_a->buffer) |
13122 | 804 mencoder_exit(1,MSGTR_MemAllocFailed); |
2581 | 805 |
806 mux_a->source=sh_audio; | |
807 | |
2661 | 808 mux_a->codec=out_audio_codec; |
2581 | 809 |
810 switch(mux_a->codec){ | |
3385 | 811 case ACODEC_COPY: |
4369 | 812 if (sh_audio->wf){ |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
813 mux_a->wf=malloc(sizeof(WAVEFORMATEX) + sh_audio->wf->cbSize); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
814 memcpy(mux_a->wf, sh_audio->wf, sizeof(WAVEFORMATEX) + sh_audio->wf->cbSize); |
4370 | 815 if(!sh_audio->i_bps) sh_audio->i_bps=mux_a->wf->nAvgBytesPerSec; |
4369 | 816 } else { |
3385 | 817 mux_a->wf = malloc(sizeof(WAVEFORMATEX)); |
4370 | 818 mux_a->wf->nBlockAlign = 1; //mux_a->h.dwSampleSize; |
7643 | 819 mux_a->wf->wFormatTag = sh_audio->format; |
3385 | 820 mux_a->wf->nChannels = sh_audio->channels; |
821 mux_a->wf->nSamplesPerSec = sh_audio->samplerate; | |
4369 | 822 mux_a->wf->nAvgBytesPerSec=sh_audio->i_bps; //mux_a->h.dwSampleSize*mux_a->wf->nSamplesPerSec; |
3480 | 823 mux_a->wf->wBitsPerSample = 16; // FIXME |
3385 | 824 mux_a->wf->cbSize=0; // FIXME for l3codeca.acm |
825 } | |
4370 | 826 if(sh_audio->audio.dwScale){ |
827 mux_a->h.dwSampleSize=sh_audio->audio.dwSampleSize; | |
828 mux_a->h.dwScale=sh_audio->audio.dwScale; | |
829 mux_a->h.dwRate=sh_audio->audio.dwRate; | |
6861 | 830 // mux_a->h.dwStart=sh_audio->audio.dwStart; |
4370 | 831 } else { |
832 mux_a->h.dwSampleSize=mux_a->wf->nBlockAlign; | |
833 mux_a->h.dwScale=mux_a->h.dwSampleSize; | |
834 mux_a->h.dwRate=mux_a->wf->nAvgBytesPerSec; | |
835 } | |
13122 | 836 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_ACodecFramecopy, |
3385 | 837 mux_a->wf->wFormatTag, mux_a->wf->nChannels, mux_a->wf->nSamplesPerSec, |
4370 | 838 mux_a->wf->wBitsPerSample, mux_a->wf->nAvgBytesPerSec, mux_a->h.dwSampleSize); |
2581 | 839 break; |
2583 | 840 case ACODEC_PCM: |
13122 | 841 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_CBRPCMAudioSelected); |
2583 | 842 mux_a->h.dwScale=1; |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
843 mux_a->h.dwRate=force_srate?force_srate:sh_audio->samplerate; |
2583 | 844 mux_a->wf=malloc(sizeof(WAVEFORMATEX)); |
845 mux_a->wf->wFormatTag=0x1; // PCM | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
846 mux_a->wf->nChannels=audio_output_channels?audio_output_channels:sh_audio->channels; |
9725 | 847 mux_a->h.dwSampleSize=2*mux_a->wf->nChannels; |
848 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
|
849 mux_a->wf->nSamplesPerSec=mux_a->h.dwRate; |
2583 | 850 mux_a->wf->nAvgBytesPerSec=mux_a->h.dwSampleSize*mux_a->wf->nSamplesPerSec; |
851 mux_a->wf->wBitsPerSample=16; | |
852 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
|
853 // setup filter: |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
854 if(!init_audio_filters(sh_audio, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
855 sh_audio->samplerate, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
856 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
|
857 mux_a->wf->nSamplesPerSec, mux_a->wf->nChannels, |
14245 | 858 (mux_a->wf->wBitsPerSample==8)? AF_FORMAT_U8:AF_FORMAT_S16_LE, |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
859 mux_a->wf->wBitsPerSample/8, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
860 16384, mux_a->wf->nAvgBytesPerSec)){ |
13122 | 861 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_NoMatchingFilter); |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
862 } |
2583 | 863 break; |
7613 | 864 #ifdef HAVE_MP3LAME |
2581 | 865 case ACODEC_VBRMP3: |
13122 | 866 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_MP3AudioSelected); |
2581 | 867 mux_a->h.dwSampleSize=0; // VBR |
5685 | 868 mux_a->h.dwRate=force_srate?force_srate:sh_audio->samplerate; |
869 mux_a->h.dwScale=(mux_a->h.dwRate<32000)?576:1152; // samples/frame | |
13122 | 870 if(sizeof(MPEGLAYER3WAVEFORMAT)!=30) mp_msg(MSGT_MENCODER,MSGL_WARN,MSGTR_MP3WaveFormatSizeNot30,sizeof(MPEGLAYER3WAVEFORMAT)); |
2635
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
871 mux_a->wf=malloc(sizeof(MPEGLAYER3WAVEFORMAT)); // should be 30 |
2581 | 872 mux_a->wf->wFormatTag=0x55; // MP3 |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
873 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
|
874 ((lame_param_mode==3) ? 1 : 2); |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
875 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
|
876 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
|
877 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
|
878 mux_a->wf->wBitsPerSample=0; //16; |
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
879 // from NaNdub: (requires for l3codeca.acm) |
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
880 mux_a->wf->cbSize=12; |
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
881 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->wID=1; |
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
882 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->fdwFlags=2; |
5685 | 883 ((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
|
884 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nFramesPerBlock=1; |
c1e24e01601b
fixed AVI header creation - now should be compatible with NaNdub
arpi
parents:
2627
diff
changeset
|
885 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nCodecDelay=0; |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
886 // setup filter: |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
887 if(!init_audio_filters(sh_audio, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
888 sh_audio->samplerate, |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
889 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
|
890 mux_a->wf->nSamplesPerSec, mux_a->wf->nChannels, |
14245 | 891 AF_FORMAT_S16_NE, 2, |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
892 4608, mux_a->h.dwRate*mux_a->wf->nChannels*2)){ |
13122 | 893 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_NoMatchingFilter); |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
894 } |
2581 | 895 break; |
7613 | 896 #endif |
11375 | 897 #ifdef USE_LIBAVCODEC |
898 case ACODEC_LAVC: | |
899 if(!lavc_param_acodec) | |
900 { | |
13122 | 901 mp_msg(MSGT_MENCODER, MSGL_FATAL, MSGTR_NoLavcAudioCodecName); |
11375 | 902 exit(1); |
903 } | |
904 | |
905 if(!avcodec_inited){ | |
906 avcodec_init(); | |
907 avcodec_register_all(); | |
908 avcodec_inited=1; | |
909 } | |
910 | |
911 lavc_acodec = avcodec_find_encoder_by_name(lavc_param_acodec); | |
912 if (!lavc_acodec) | |
913 { | |
13122 | 914 mp_msg(MSGT_MENCODER, MSGL_FATAL, MSGTR_LavcAudioCodecNotFound, lavc_param_acodec); |
11375 | 915 exit(1); |
916 } | |
917 | |
918 lavc_actx = avcodec_alloc_context(); | |
919 if(lavc_actx == NULL) | |
920 { | |
13122 | 921 mp_msg(MSGT_MENCODER, MSGL_FATAL, MSGTR_CouldntAllocateLavcContext); |
11375 | 922 exit(1); |
923 } | |
924 | |
925 if(lavc_param_atag == 0) | |
926 lavc_param_atag = lavc_find_atag(lavc_param_acodec); | |
927 | |
928 // put sample parameters | |
929 lavc_actx->channels = audio_output_channels ? audio_output_channels : sh_audio->channels; | |
930 lavc_actx->sample_rate = force_srate ? force_srate : sh_audio->samplerate; | |
931 lavc_actx->bit_rate = lavc_param_abitrate * 1000; | |
932 | |
933 /* | |
934 * Special case for imaadpcm. | |
935 * The bitrate is only dependant on samplerate. | |
936 * We have to known frame_size and block_align in advance, | |
937 * so I just copied the code from libavcodec/adpcm.c | |
938 * | |
939 * However, ms imaadpcm uses a block_align of 2048, | |
940 * lavc defaults to 1024 | |
941 */ | |
942 if(lavc_param_atag == 0x11) { | |
943 int blkalign = 2048; | |
944 int framesize = (blkalign - 4 * lavc_actx->channels) * 8 / (4 * lavc_actx->channels) + 1; | |
945 lavc_actx->bit_rate = lavc_actx->sample_rate*8*blkalign/framesize; | |
946 } | |
947 | |
948 if(avcodec_open(lavc_actx, lavc_acodec) < 0) | |
949 { | |
13122 | 950 mp_msg(MSGT_MENCODER, MSGL_FATAL, MSGTR_CouldntOpenCodec, lavc_param_acodec, lavc_param_abitrate); |
11375 | 951 exit(1); |
952 } | |
953 | |
954 if(lavc_param_atag == 0x11) { | |
955 lavc_actx->block_align = 2048; | |
956 lavc_actx->frame_size = (lavc_actx->block_align - 4 * lavc_actx->channels) * 8 / (4 * lavc_actx->channels) + 1; | |
957 } | |
958 | |
959 lavc_abuf = malloc(lavc_actx->frame_size * 2 * lavc_actx->channels); | |
960 if(lavc_abuf == NULL) | |
961 { | |
13122 | 962 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_CannotAllocateBytes, lavc_actx->frame_size * 2 * lavc_actx->channels); // Converted from fprintf(stderr, ...); |
11375 | 963 exit(1); |
964 } | |
965 | |
11974 | 966 mux_a->wf = malloc(sizeof(WAVEFORMATEX)+lavc_actx->extradata_size+256); |
11375 | 967 mux_a->wf->wFormatTag = lavc_param_atag; |
968 mux_a->wf->nChannels = lavc_actx->channels; | |
969 mux_a->wf->nSamplesPerSec = lavc_actx->sample_rate; | |
970 mux_a->wf->nAvgBytesPerSec = (lavc_actx->bit_rate / 8); | |
971 mux_a->h.dwRate = mux_a->wf->nAvgBytesPerSec; | |
972 if (lavc_actx->block_align) { | |
973 mux_a->h.dwSampleSize = mux_a->h.dwScale = lavc_actx->block_align; | |
974 } else { | |
975 mux_a->h.dwScale = (mux_a->wf->nAvgBytesPerSec * lavc_actx->frame_size)/ mux_a->wf->nSamplesPerSec; /* for cbr */ | |
976 | |
977 if ((mux_a->wf->nAvgBytesPerSec * | |
978 lavc_actx->frame_size) % mux_a->wf->nSamplesPerSec) { | |
979 mux_a->h.dwScale = lavc_actx->frame_size; | |
980 mux_a->h.dwRate = lavc_actx->sample_rate; | |
981 mux_a->h.dwSampleSize = 0; // Blocksize not constant | |
982 } else { | |
983 mux_a->h.dwSampleSize = mux_a->h.dwScale; | |
984 } | |
985 } | |
986 mux_a->wf->nBlockAlign = mux_a->h.dwScale; | |
987 mux_a->h.dwSuggestedBufferSize = audio_preload*mux_a->wf->nAvgBytesPerSec; | |
988 mux_a->h.dwSuggestedBufferSize -= mux_a->h.dwSuggestedBufferSize % mux_a->wf->nBlockAlign; | |
989 | |
990 switch (lavc_param_atag) { | |
991 case 0x11: /* imaadpcm */ | |
992 mux_a->wf->wBitsPerSample = 4; | |
993 mux_a->wf->cbSize = 2; | |
12149
2cce4d42f4a8
support for abitrary imaadpcm encoding, ported from ffmpeg
alex
parents:
12100
diff
changeset
|
994 ((uint16_t*)mux_a->wf)[sizeof(WAVEFORMATEX)] = |
2cce4d42f4a8
support for abitrary imaadpcm encoding, ported from ffmpeg
alex
parents:
12100
diff
changeset
|
995 ((lavc_actx->block_align - 4 * lavc_actx->channels) / (4 * lavc_actx->channels)) * 8 + 1; |
11375 | 996 break; |
997 case 0x55: /* mp3 */ | |
998 mux_a->wf->cbSize = 12; | |
999 mux_a->wf->wBitsPerSample = 0; /* does not apply */ | |
1000 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->wID = 1; | |
1001 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->fdwFlags = 2; | |
1002 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nBlockSize = mux_a->wf->nBlockAlign; | |
1003 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nFramesPerBlock = 1; | |
1004 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nCodecDelay = 0; | |
1005 break; | |
1006 default: | |
1007 mux_a->wf->wBitsPerSample = 0; /* Unknown */ | |
11974 | 1008 if (lavc_actx->extradata && (lavc_actx->extradata_size > 0)) |
1009 { | |
1010 memcpy(mux_a->wf+sizeof(WAVEFORMATEX), lavc_actx->extradata, | |
1011 lavc_actx->extradata_size); | |
1012 mux_a->wf->cbSize = lavc_actx->extradata_size; | |
1013 } | |
1014 else | |
1015 mux_a->wf->cbSize = 0; | |
11375 | 1016 break; |
1017 } | |
1018 | |
11974 | 1019 // Fix allocation |
1020 mux_a->wf = realloc(mux_a->wf, sizeof(WAVEFORMATEX)+mux_a->wf->cbSize); | |
1021 | |
11375 | 1022 // setup filter: |
1023 if (!init_audio_filters( | |
1024 sh_audio, | |
1025 sh_audio->samplerate, sh_audio->channels, | |
1026 sh_audio->sample_format, sh_audio->samplesize, | |
1027 mux_a->wf->nSamplesPerSec, mux_a->wf->nChannels, | |
14245 | 1028 AF_FORMAT_S16_NE, 2, |
11375 | 1029 mux_a->h.dwSuggestedBufferSize, |
1030 mux_a->h.dwSuggestedBufferSize*2)) { | |
13122 | 1031 mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_NoMatchingFilter); |
11375 | 1032 exit(1); |
1033 } | |
1034 | |
13577 | 1035 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); |
11375 | 1036 |
1037 break; | |
1038 #endif | |
13426 | 1039 |
1040 #ifdef HAVE_TOOLAME | |
1041 case ACODEC_TOOLAME: | |
1042 { | |
1043 int cn = audio_output_channels ? audio_output_channels : sh_audio->channels; | |
1044 int sr = force_srate ? force_srate : sh_audio->samplerate; | |
1045 int br; | |
1046 | |
1047 mpae_toolame = mpae_init_toolame(cn, sr); | |
1048 if(mpae_toolame == NULL) | |
1049 { | |
1050 mp_msg(MSGT_MENCODER, MSGL_FATAL, "Couldn't open toolame codec, exiting\n"); | |
1051 exit(1); | |
1052 } | |
1053 | |
1054 br = mpae_toolame->bitrate; | |
1055 | |
1056 mux_a->wf = malloc(sizeof(WAVEFORMATEX)+256); | |
1057 mux_a->wf->wFormatTag = 0x50; | |
1058 mux_a->wf->nChannels = cn; | |
1059 mux_a->wf->nSamplesPerSec = sr; | |
1060 mux_a->wf->nAvgBytesPerSec = 1000 * (br / 8); | |
1061 mux_a->h.dwRate = mux_a->wf->nAvgBytesPerSec; | |
1062 mux_a->h.dwScale = (mux_a->wf->nAvgBytesPerSec * 1152)/ mux_a->wf->nSamplesPerSec; /* for cbr */ | |
1063 | |
1064 if ((mux_a->wf->nAvgBytesPerSec * | |
1065 1152) % mux_a->wf->nSamplesPerSec) { | |
1066 mux_a->h.dwScale = 1152; | |
1067 mux_a->h.dwRate = sr; | |
1068 mux_a->h.dwSampleSize = 0; // Blocksize not constant | |
1069 } else { | |
1070 mux_a->h.dwSampleSize = mux_a->h.dwScale; | |
1071 } | |
1072 mux_a->wf->nBlockAlign = mux_a->h.dwScale; | |
1073 mux_a->h.dwSuggestedBufferSize = audio_preload*mux_a->wf->nAvgBytesPerSec; | |
1074 mux_a->h.dwSuggestedBufferSize -= mux_a->h.dwSuggestedBufferSize % mux_a->wf->nBlockAlign; | |
1075 | |
1076 mux_a->wf->cbSize = 12; | |
1077 mux_a->wf->wBitsPerSample = 0; /* does not apply */ | |
1078 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->wID = 1; | |
1079 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->fdwFlags = 2; | |
1080 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nBlockSize = mux_a->wf->nBlockAlign; | |
1081 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nFramesPerBlock = 1; | |
1082 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nCodecDelay = 0; | |
1083 | |
1084 // Fix allocation | |
1085 mux_a->wf = realloc(mux_a->wf, sizeof(WAVEFORMATEX)+mux_a->wf->cbSize); | |
1086 | |
1087 // setup filter: | |
1088 if (!init_audio_filters( | |
1089 sh_audio, | |
1090 sh_audio->samplerate, sh_audio->channels, | |
1091 sh_audio->sample_format, sh_audio->samplesize, | |
1092 mux_a->wf->nSamplesPerSec, mux_a->wf->nChannels, | |
14245 | 1093 AF_FORMAT_S16_NE, 2, |
13426 | 1094 mux_a->h.dwSuggestedBufferSize, |
1095 mux_a->h.dwSuggestedBufferSize*2)) { | |
1096 mp_msg(MSGT_CPLAYER, MSGL_ERR, "Couldn't find matching filter / ao format!\n"); | |
1097 exit(1); | |
1098 } | |
1099 | |
1100 break; | |
1101 } | |
1102 #endif | |
2581 | 1103 } |
6861 | 1104 |
1105 if (verbose>1) print_wave_header(mux_a->wf); | |
1106 | |
1107 if(audio_delay!=0.0){ | |
1108 mux_a->h.dwStart=audio_delay*mux_a->h.dwRate/mux_a->h.dwScale; | |
13122 | 1109 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_SettingAudioDelay,mux_a->h.dwStart*mux_a->h.dwScale/(float)mux_a->h.dwRate); |
2581 | 1110 } |
14757
7a2adc5e8928
initial, extremely experimental, libavformat muxer; don't expect anything to work yet
nicodvb
parents:
14685
diff
changeset
|
1111 if(muxer->fix_stream_parameters) |
7a2adc5e8928
initial, extremely experimental, libavformat muxer; don't expect anything to work yet
nicodvb
parents:
14685
diff
changeset
|
1112 muxer_stream_fix_parameters(muxer,mux_a); |
2581 | 1113 |
6861 | 1114 } // if(sh_audio) |
6530
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1115 |
13122 | 1116 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_WritingAVIHeader); |
11222 | 1117 if (muxer->cont_write_header) muxer_write_header(muxer); |
2531 | 1118 |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
1119 decoded_frameno=0; |
2531 | 1120 |
2600 | 1121 if(sh_audio) |
2583 | 1122 switch(mux_a->codec){ |
3357 | 1123 #ifdef HAVE_MP3LAME |
2583 | 1124 case ACODEC_VBRMP3: |
1125 | |
1126 lame=lame_init(); | |
2591 | 1127 lame_set_bWriteVbrTag(lame,0); |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7559
diff
changeset
|
1128 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
|
1129 //lame_set_in_samplerate(lame,sh_audio->samplerate); // if resampling done by lame |
2583 | 1130 lame_set_num_channels(lame,mux_a->wf->nChannels); |
2639 | 1131 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
|
1132 lame_set_quality(lame,lame_param_algqual); // 0 = best q |
12489 | 1133 if(lame_param_free_format) lame_set_free_format(lame,1); |
2626 | 1134 if(lame_param_vbr){ // VBR: |
1135 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
|
1136 lame_set_VBR_q(lame,lame_param_quality); // 0 = best vbr q 5=~128k |
2626 | 1137 if(lame_param_br>0) lame_set_VBR_mean_bitrate_kbps(lame,lame_param_br); |
12489 | 1138 if(lame_param_br_min>0) lame_set_VBR_min_bitrate_kbps(lame,lame_param_br_min); |
1139 if(lame_param_br_max>0) lame_set_VBR_max_bitrate_kbps(lame,lame_param_br_max); | |
2626 | 1140 } else { // CBR: |
1141 if(lame_param_br>0) lame_set_brate(lame,lame_param_br); | |
1142 } | |
1143 if(lame_param_mode>=0) lame_set_mode(lame,lame_param_mode); // j-st | |
1144 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
|
1145 if(lame_param_scale>0) { |
13122 | 1146 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_SettingAudioInputGain, lame_param_scale); |
5848
48a0667742b9
volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents:
5685
diff
changeset
|
1147 lame_set_scale(lame,lame_param_scale); |
48a0667742b9
volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents:
5685
diff
changeset
|
1148 } |
11834 | 1149 if(lame_param_lowpassfreq>=-1) lame_set_lowpassfreq(lame,lame_param_lowpassfreq); |
1150 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
|
1151 #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
|
1152 if(lame_param_preset != NULL){ |
13122 | 1153 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_LamePresetEquals,lame_param_preset); |
8517
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1154 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
|
1155 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1156 #endif |
14762
b2cb91b9b4e0
fix missing check against lame_init_params that was leading to video only files on low (under 32) audio bitrates
reynaldo
parents:
14757
diff
changeset
|
1157 if(lame_init_params(lame) == -1){ |
b2cb91b9b4e0
fix missing check against lame_init_params that was leading to video only files on low (under 32) audio bitrates
reynaldo
parents:
14757
diff
changeset
|
1158 mp_msg(MSGT_MENCODER, MSGL_FATAL, MSGTR_LameCantInit); |
b2cb91b9b4e0
fix missing check against lame_init_params that was leading to video only files on low (under 32) audio bitrates
reynaldo
parents:
14757
diff
changeset
|
1159 mencoder_exit(1,NULL); |
b2cb91b9b4e0
fix missing check against lame_init_params that was leading to video only files on low (under 32) audio bitrates
reynaldo
parents:
14757
diff
changeset
|
1160 } |
8027 | 1161 if(verbose>0){ |
2626 | 1162 lame_print_config(lame); |
1163 lame_print_internals(lame); | |
2622 | 1164 } |
3357 | 1165 break; |
1166 #endif | |
2583 | 1167 } |
1168 | |
2531 | 1169 signal(SIGINT,exit_sighandler); // Interrupt from keyboard |
1170 signal(SIGQUIT,exit_sighandler); // Quit from keyboard | |
1171 signal(SIGTERM,exit_sighandler); // kill | |
1172 | |
4387 | 1173 timer_start=GetTimerMS(); |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1174 } // if (!curfile) // if this was the first file. |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1175 else if (sh_audio) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1176 int out_format, out_bps, out_minsize, out_maxsize; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1177 int do_init_filters = 1; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1178 switch(mux_a->codec){ |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1179 case ACODEC_COPY: |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1180 do_init_filters = 0; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1181 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_ACodecFramecopy, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1182 mux_a->wf->wFormatTag, mux_a->wf->nChannels, mux_a->wf->nSamplesPerSec, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1183 mux_a->wf->wBitsPerSample, mux_a->wf->nAvgBytesPerSec, mux_a->h.dwSampleSize); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1184 if (sh_audio->wf) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1185 if ((mux_a->wf->wFormatTag != sh_audio->wf->wFormatTag) || |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1186 (mux_a->wf->nChannels != sh_audio->wf->nChannels) || |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1187 (mux_a->wf->nSamplesPerSec != sh_audio->wf->nSamplesPerSec)) |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1188 { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1189 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_ACodecFramecopy, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1190 sh_audio->wf->wFormatTag, sh_audio->wf->nChannels, sh_audio->wf->nSamplesPerSec, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1191 sh_audio->wf->wBitsPerSample, sh_audio->wf->nAvgBytesPerSec, 0); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1192 mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_AudioCopyFileMismatch); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1193 mencoder_exit(1,NULL); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1194 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1195 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1196 else { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1197 if ((mux_a->wf->wFormatTag != sh_audio->format) || |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1198 (mux_a->wf->nChannels != sh_audio->channels) || |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1199 (mux_a->wf->nSamplesPerSec != sh_audio->samplerate)) |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1200 { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1201 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_ACodecFramecopy, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1202 sh_audio->wf->wFormatTag, sh_audio->wf->nChannels, sh_audio->wf->nSamplesPerSec, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1203 sh_audio->wf->wBitsPerSample, sh_audio->wf->nAvgBytesPerSec, 0); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1204 mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_AudioCopyFileMismatch); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1205 mencoder_exit(1,NULL); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1206 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1207 |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1208 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1209 break; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1210 case ACODEC_PCM: |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1211 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_CBRPCMAudioSelected); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1212 out_format = (mux_a->wf->wBitsPerSample==8) ? AF_FORMAT_U8 : AF_FORMAT_S16_LE; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1213 out_bps = mux_a->wf->wBitsPerSample/8; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1214 out_minsize = 16384; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1215 out_maxsize = mux_a->wf->nAvgBytesPerSec; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1216 break; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1217 #ifdef HAVE_MP3LAME |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1218 case ACODEC_VBRMP3: |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1219 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_MP3AudioSelected); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1220 out_format = AF_FORMAT_S16_NE; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1221 out_bps = 2; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1222 out_minsize = 4608; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1223 out_maxsize = mux_a->h.dwRate*mux_a->wf->nChannels*2; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1224 break; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1225 #endif |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1226 #ifdef USE_LIBAVCODEC |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1227 case ACODEC_LAVC: |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1228 out_format = AF_FORMAT_S16_NE; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1229 out_bps = 2; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1230 out_minsize = mux_a->h.dwSuggestedBufferSize; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1231 out_maxsize = mux_a->h.dwSuggestedBufferSize*2; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1232 mp_msg(MSGT_MENCODER, MSGL_V, "FRAME_SIZE: %d, BUFFER_SIZE: %d, TAG: 0x%x\n", |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1233 lavc_actx->frame_size, lavc_actx->frame_size * 2 * lavc_actx->channels, mux_a->wf->wFormatTag); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1234 break; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1235 #endif |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1236 #ifdef HAVE_TOOLAME |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1237 case ACODEC_TOOLAME: |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1238 out_format = AF_FORMAT_S16_NE; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1239 out_bps = 2; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1240 out_minsize = mux_a->h.dwSuggestedBufferSize; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1241 out_maxsize = mux_a->h.dwSuggestedBufferSize*2; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1242 break; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1243 #endif |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1244 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1245 if (do_init_filters) if(!init_audio_filters(sh_audio, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1246 sh_audio->samplerate, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1247 sh_audio->channels, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1248 sh_audio->sample_format, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1249 sh_audio->samplesize, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1250 mux_a->wf->nSamplesPerSec, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1251 mux_a->wf->nChannels, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1252 AF_FORMAT_S16_NE, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1253 2, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1254 4608, |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1255 mux_a->h.dwRate*mux_a->wf->nChannels*2)) |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1256 { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1257 mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_NoMatchingFilter); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1258 exit(1); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1259 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1260 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1261 |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1262 parse_end_at(); |
4387 | 1263 |
4620 | 1264 if (seek_to_sec) { |
1265 int a,b; float d; | |
1266 | |
1267 if (sscanf(seek_to_sec, "%d:%d:%f", &a,&b,&d)==3) | |
1268 d += 3600*a + 60*b; | |
1269 else if (sscanf(seek_to_sec, "%d:%f", &a, &d)==2) | |
1270 d += 60*a; | |
1271 else | |
1272 sscanf(seek_to_sec, "%f", &d); | |
1273 | |
1274 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
|
1275 // 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
|
1276 // > 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
|
1277 // > 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
|
1278 // 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
|
1279 // if(demuxer2) demux_seek(demuxer2, d, 1); |
4620 | 1280 } |
1281 | |
8585 | 1282 if (out_file_format == MUXER_TYPE_MPEG) |
1283 { | |
1284 if (audio_preload > 0.4) { | |
13122 | 1285 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_LimitingAudioPreload); |
8585 | 1286 audio_preload = 0.4; |
1287 } | |
1288 if (audio_density < 4) { | |
13122 | 1289 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_IncreasingAudioDensity); |
8731 | 1290 audio_density = 4; |
8585 | 1291 } |
1292 } | |
1293 | |
9746 | 1294 if(file_format == DEMUXER_TYPE_TV) |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1295 { |
13122 | 1296 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_ZeroingAudioPreloadAndMaxPtsCorrection); |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1297 audio_preload = 0.0; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1298 default_max_pts_correction = 0; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1299 } |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1300 |
6590 | 1301 play_n_frames=play_n_frames_mf; |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1302 if (curfile && end_at_type == END_AT_TIME) end_at += mux_v->timer; |
6590 | 1303 |
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
|
1304 while(!at_eof){ |
2531 | 1305 |
2571 | 1306 float frame_time=0; |
2531 | 1307 int blit_frame=0; |
1308 float a_pts=0; | |
1309 float v_pts=0; | |
2574 | 1310 unsigned char* start=NULL; |
1311 int in_size; | |
2613 | 1312 int skip_flag=0; // 1=skip -1=duplicate |
2531 | 1313 |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1314 if((end_at_type == END_AT_SIZE && end_at <= ftello(muxer_f)) || |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1315 (end_at_type == END_AT_TIME && end_at < mux_v->timer)) |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1316 break; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1317 |
2643 | 1318 if(play_n_frames>=0){ |
1319 --play_n_frames; | |
1320 if(play_n_frames<0) break; | |
1321 } | |
1322 | |
2581 | 1323 if(sh_audio){ |
1324 // get audio: | |
2583 | 1325 while(mux_a->timer-audio_preload<mux_v->timer){ |
2653 | 1326 int len=0; |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1327 |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1328 ptimer_start = GetTimerMS(); |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1329 |
11375 | 1330 #ifdef USE_LIBAVCODEC |
1331 if(mux_a->codec == ACODEC_LAVC){ | |
1332 int size, rd_len; | |
1333 | |
1334 size = lavc_actx->frame_size * 2 * mux_a->wf->nChannels; | |
1335 | |
1336 rd_len = dec_audio(sh_audio, lavc_abuf, size); | |
1337 if(rd_len != size) | |
1338 break; | |
1339 | |
1340 // Encode one frame | |
1341 mux_a->buffer_len += avcodec_encode_audio(lavc_actx, mux_a->buffer + mux_a->buffer_len, size, lavc_abuf); | |
1342 if (mux_a->h.dwSampleSize) { /* CBR */ | |
1343 /* | |
1344 * work around peculiar lame behaviour | |
1345 */ | |
1346 if (mux_a->buffer_len < mux_a->wf->nBlockAlign) { | |
1347 len = 0; | |
1348 } else { | |
1349 len = mux_a->wf->nBlockAlign*(mux_a->buffer_len/mux_a->wf->nBlockAlign); | |
1350 } | |
1351 } else { /* VBR */ | |
1352 len = mux_a->buffer_len; | |
1353 } | |
1354 if (mux_v->timer == 0) mux_a->h.dwInitialFrames++; | |
1355 } | |
1356 #endif | |
13426 | 1357 #ifdef HAVE_TOOLAME |
1358 if((mux_a->codec == ACODEC_TOOLAME) && (mpae_toolame != NULL)){ | |
1359 int size, rd_len; | |
1360 uint8_t buf[1152*2*2]; | |
1361 size = 1152 * 2 * mux_a->wf->nChannels; | |
1362 | |
1363 rd_len = dec_audio(sh_audio, buf, size); | |
1364 if(rd_len != size) | |
1365 break; | |
1366 | |
1367 // Encode one frame | |
1368 mux_a->buffer_len += mpae_encode_toolame(mpae_toolame, mux_a->buffer + mux_a->buffer_len, 1152, (void*)buf, mux_a->buffer_size-mux_a->buffer_len); | |
1369 if (mux_a->h.dwSampleSize) { /* CBR */ | |
1370 if (mux_a->buffer_len < mux_a->wf->nBlockAlign) { | |
1371 len = 0; | |
1372 } else { | |
1373 len = mux_a->wf->nBlockAlign*(mux_a->buffer_len/mux_a->wf->nBlockAlign); | |
1374 } | |
1375 } else { /* VBR */ | |
1376 len = mux_a->buffer_len; | |
1377 } | |
1378 if (mux_v->timer == 0) mux_a->h.dwInitialFrames++; | |
1379 } | |
1380 #endif | |
2581 | 1381 if(mux_a->h.dwSampleSize){ |
2605 | 1382 // CBR - copy 0.5 sec of audio |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1383 // or until the end of video: |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1384 float tottime = stop_time(demuxer, mux_v); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1385 if (tottime != -1) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1386 tottime -= mux_a->timer; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1387 if (tottime > 1./audio_density) tottime = 1./audio_density; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1388 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1389 else tottime = 1./audio_density; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1390 |
2583 | 1391 switch(mux_a->codec){ |
3385 | 1392 case ACODEC_COPY: // copy |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1393 len=mux_a->wf->nAvgBytesPerSec*tottime; |
2583 | 1394 len/=mux_a->h.dwSampleSize;if(len<1) len=1; |
1395 len*=mux_a->h.dwSampleSize; | |
1396 len=demux_read_data(sh_audio->ds,mux_a->buffer,len); | |
1397 break; | |
1398 case ACODEC_PCM: | |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1399 len=mux_a->h.dwSampleSize*(int)(mux_a->h.dwRate*tottime); |
2591 | 1400 len=dec_audio(sh_audio,mux_a->buffer,len); |
2583 | 1401 break; |
1402 } | |
2581 | 1403 } else { |
2605 | 1404 // VBR - encode/copy an audio frame |
1405 switch(mux_a->codec){ | |
3385 | 1406 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
|
1407 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
|
1408 // printf("VBR audio framecopy not yet implemented!\n"); |
2605 | 1409 break; |
3357 | 1410 #ifdef HAVE_MP3LAME |
2605 | 1411 case ACODEC_VBRMP3: |
2591 | 1412 while(mux_a->buffer_len<4){ |
1413 unsigned char tmp[2304]; | |
1414 int len=dec_audio(sh_audio,tmp,2304); | |
1415 if(len<=0) break; // eof | |
6530
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1416 /* mono encoding, a bit tricky */ |
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1417 if (mux_a->wf->nChannels == 1) |
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1418 { |
6581 | 1419 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
|
1420 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
|
1421 } |
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1422 else |
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1423 { |
f8d544dd22e9
mono mp3 encoding support by Paul Ortyl <ortylp at 3miasto.net>
alex
parents:
6419
diff
changeset
|
1424 len=lame_encode_buffer_interleaved(lame, |
6581 | 1425 (short *)tmp,len/4, |
2591 | 1426 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
|
1427 } |
2591 | 1428 if(len<0) break; // error |
1429 mux_a->buffer_len+=len; | |
1430 } | |
1431 if(mux_a->buffer_len<4) break; | |
1432 len=mp_decode_mp3_header(mux_a->buffer); | |
2639 | 1433 //printf("%d\n",len); |
2591 | 1434 if(len<=0) break; // bad frame! |
5685 | 1435 // printf("[%d]\n",mp_mp3_get_lsf(mux_a->buffer)); |
2591 | 1436 while(mux_a->buffer_len<len){ |
1437 unsigned char tmp[2304]; | |
1438 int len=dec_audio(sh_audio,tmp,2304); | |
1439 if(len<=0) break; // eof | |
6534 | 1440 /* mono encoding, a bit tricky */ |
1441 if (mux_a->wf->nChannels == 1) | |
1442 { | |
6581 | 1443 len = lame_encode_buffer(lame, (short *)tmp, (short *)tmp, len/2, |
6534 | 1444 mux_a->buffer+mux_a->buffer_len, mux_a->buffer_size-mux_a->buffer_len); |
1445 } | |
1446 else | |
1447 { | |
1448 len=lame_encode_buffer_interleaved(lame, | |
6581 | 1449 (short *)tmp,len/4, |
2591 | 1450 mux_a->buffer+mux_a->buffer_len,mux_a->buffer_size-mux_a->buffer_len); |
6534 | 1451 } |
2591 | 1452 if(len<0) break; // error |
1453 mux_a->buffer_len+=len; | |
1454 } | |
2605 | 1455 break; |
3357 | 1456 #endif |
2605 | 1457 } |
2581 | 1458 } |
2583 | 1459 if(len<=0) break; // EOF? |
9014
c671e9adbe22
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
9006
diff
changeset
|
1460 muxer_write_chunk(mux_a,len,0x10); |
2655 | 1461 if(!mux_a->h.dwSampleSize && mux_a->timer>0) |
3354 | 1462 mux_a->wf->nAvgBytesPerSec=0.5f+(double)mux_a->size/mux_a->timer; // avg bps (VBR) |
2591 | 1463 if(mux_a->buffer_len>=len){ |
1464 mux_a->buffer_len-=len; | |
1465 memcpy(mux_a->buffer,mux_a->buffer+len,mux_a->buffer_len); | |
1466 } | |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1467 |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1468 |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1469 audiosamples++; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1470 audiorate+= (GetTimerMS() - ptimer_start); |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1471 |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1472 // let's not output more audio than necessary |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1473 if (stop_time(demuxer, mux_v) != -1 && stop_time(demuxer, mux_v) <= mux_a->timer) break; |
2581 | 1474 } |
1475 } | |
1476 | |
1477 // get video frame! | |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1478 |
2581 | 1479 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
|
1480 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
|
1481 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
|
1482 |
8598
824481376632
"MPlayer does the right thing, presents frame 9 for 1.1 seconds, and continues
arpi
parents:
8585
diff
changeset
|
1483 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
|
1484 |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
1485 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
|
1486 // find our frame: |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1487 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
|
1488 int* start; |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1489 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
|
1490 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
|
1491 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
|
1492 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
|
1493 } |
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
|
1494 if(at_eof) break; |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1495 // 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
|
1496 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
|
1497 // find next frame: |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1498 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
|
1499 int* start; |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1500 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
|
1501 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
|
1502 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
|
1503 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
|
1504 } |
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
|
1505 // 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
|
1506 // 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
|
1507 } else { |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1508 |
2613 | 1509 // check frame duplicate/drop: |
1510 | |
6721 | 1511 //printf("\r### %5.3f ###\n",v_timer_corr); |
1512 | |
5629 | 1513 if(v_timer_corr>=(float)mux_v->h.dwScale/mux_v->h.dwRate && |
1514 (skip_limit<0 || skip_flag<skip_limit) ){ | |
2613 | 1515 v_timer_corr-=(float)mux_v->h.dwScale/mux_v->h.dwRate; |
1516 ++skip_flag; // skip | |
1517 } else | |
5629 | 1518 while(v_timer_corr<=-(float)mux_v->h.dwScale/mux_v->h.dwRate && |
1519 (skip_limit<0 || (-skip_flag)<skip_limit) ){ | |
2613 | 1520 v_timer_corr+=(float)mux_v->h.dwScale/mux_v->h.dwRate; |
1521 --skip_flag; // dup | |
1522 } | |
2531 | 1523 |
2613 | 1524 while( (v_pts_corr<=-(float)mux_v->h.dwScale/mux_v->h.dwRate && skip_flag>0) |
1525 || (v_pts_corr<=-2*(float)mux_v->h.dwScale/mux_v->h.dwRate) ){ | |
1526 v_pts_corr+=(float)mux_v->h.dwScale/mux_v->h.dwRate; | |
1527 --skip_flag; // dup | |
1528 } | |
1529 if( (v_pts_corr>=(float)mux_v->h.dwScale/mux_v->h.dwRate && skip_flag<0) | |
1530 || (v_pts_corr>=2*(float)mux_v->h.dwScale/mux_v->h.dwRate) ) | |
1531 if(skip_flag<=0){ // we can't skip more than 1 frame now | |
1532 v_pts_corr-=(float)mux_v->h.dwScale/mux_v->h.dwRate; | |
1533 ++skip_flag; // skip | |
1534 } | |
1535 | |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1536 } // demuxer2 |
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1537 |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1538 ptimer_start = GetTimerMS(); |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1539 |
2531 | 1540 switch(mux_v->codec){ |
3384 | 1541 case VCODEC_COPY: |
2574 | 1542 mux_v->buffer=start; |
9014
c671e9adbe22
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
9006
diff
changeset
|
1543 if(skip_flag<=0) muxer_write_chunk(mux_v,in_size,(sh_video->ds->flags&1)?0x10:0); |
2574 | 1544 break; |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
1545 case VCODEC_FRAMENO: |
6581 | 1546 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
|
1547 if(skip_flag<=0) muxer_write_chunk(mux_v,sizeof(int),0x10); |
4575 | 1548 break; |
5553
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
1549 default: |
38697931adf4
video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents:
5546
diff
changeset
|
1550 // decode_video will callback down to ve_*.c encoders, through the video filters |
12337
6f1b4c989914
soft skipping for mencoder. rather than skipping decoding/filtering
rfelker
parents:
12334
diff
changeset
|
1551 blit_frame=decode_video(sh_video,start,in_size, |
12490 | 1552 skip_flag>0 && (!sh_video->vfilter || ((vf_instance_t *)sh_video->vfilter)->control(sh_video->vfilter, VFCTRL_SKIP_NEXT_FRAME, 0) != CONTROL_TRUE)); |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1553 |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1554 if (prevwidth) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1555 if ((mux_v->bih->biWidth != prevwidth) || (mux_v->bih->biHeight != prevhieght)) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1556 mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_ResolutionDoesntMatch); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1557 mencoder_exit(1,NULL); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1558 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1559 prevhieght = prevwidth = 0; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1560 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1561 |
7370
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
1562 if(!blit_frame){ |
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
1563 badframes++; |
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
1564 if(skip_flag<=0){ |
6721 | 1565 // unwanted skipping of a frame, what to do? |
1566 if(skip_limit==0){ | |
1567 // skipping not allowed -> write empty frame: | |
12490 | 1568 if (!encode_duplicates || !sh_video->vfilter || ((vf_instance_t *)sh_video->vfilter)->control(sh_video->vfilter, VFCTRL_DUPLICATE_FRAME, 0) != CONTROL_TRUE) |
12337
6f1b4c989914
soft skipping for mencoder. rather than skipping decoding/filtering
rfelker
parents:
12334
diff
changeset
|
1569 muxer_write_chunk(mux_v,0,0); |
6721 | 1570 } else { |
1571 // skipping allowed -> skip it and distriubute timer error: | |
1572 v_timer_corr-=(float)mux_v->h.dwScale/mux_v->h.dwRate; | |
1573 } | |
7370
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
1574 } |
6721 | 1575 } |
2531 | 1576 } |
2613 | 1577 |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1578 videosamples++; |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1579 videorate+=(GetTimerMS() - ptimer_start); |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1580 |
2613 | 1581 if(skip_flag<0){ |
2605 | 1582 // duplicate frame |
13122 | 1583 if(file_format != DEMUXER_TYPE_TV && !verbose) mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DuplicateFrames,-skip_flag); |
2613 | 1584 while(skip_flag<0){ |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1585 duplicatedframes++; |
12490 | 1586 if (!encode_duplicates || !sh_video->vfilter || ((vf_instance_t *)sh_video->vfilter)->control(sh_video->vfilter, VFCTRL_DUPLICATE_FRAME, 0) != CONTROL_TRUE) |
12334
eeddcef4fb08
"hard" frame duplication for mencoder. this finally makes it possible
rfelker
parents:
12223
diff
changeset
|
1587 muxer_write_chunk(mux_v,0,0); |
2613 | 1588 ++skip_flag; |
1589 } | |
2639 | 1590 } else |
1591 if(skip_flag>0){ | |
2605 | 1592 // skip frame |
13122 | 1593 if(file_format != DEMUXER_TYPE_TV && !verbose) mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_SkipFrame); |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1594 skippedframes++; |
2613 | 1595 --skip_flag; |
2605 | 1596 } |
1597 | |
4367
c2be4fb65cee
3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents:
4365
diff
changeset
|
1598 if(sh_audio && !demuxer2){ |
2605 | 1599 float AV_delay,x; |
1600 // A-V sync! | |
8030
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
1601 #if 0 |
2605 | 1602 if(pts_from_bps){ |
1603 unsigned int samples=(sh_audio->audio.dwSampleSize)? | |
1604 ((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
|
1605 (d_audio->block_no); // <- used for VBR audio |
4378 | 1606 // printf("samples=%d \n",samples); |
2605 | 1607 a_pts=samples*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; |
1608 delay_corrected=1; | |
8030
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
1609 } else |
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
1610 #endif |
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
1611 { |
2605 | 1612 // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec) |
1613 a_pts=d_audio->pts; | |
1614 if(!delay_corrected) if(a_pts) delay_corrected=1; | |
1615 //printf("*** %5.3f ***\n",a_pts); | |
1616 a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; | |
1617 } | |
8966 | 1618 v_pts=sh_video ? sh_video->pts : d_video->pts; |
2605 | 1619 // av = compensated (with out buffering delay) A-V diff |
2613 | 1620 AV_delay=(a_pts-v_pts); AV_delay-=mux_a->timer-(mux_v->timer-(v_timer_corr+v_pts_corr)); |
2605 | 1621 // compensate input video timer by av: |
1622 x=AV_delay*0.1f; | |
1623 if(x<-max_pts_correction) x=-max_pts_correction; else | |
1624 if(x> max_pts_correction) x= max_pts_correction; | |
1625 if(default_max_pts_correction>=0) | |
1626 max_pts_correction=default_max_pts_correction; | |
1627 else | |
1628 max_pts_correction=sh_video->frametime*0.10; // +-10% of time | |
1629 // sh_video->timer-=x; | |
1630 c_total+=x; | |
2613 | 1631 v_pts_corr+=x; |
4387 | 1632 } |
2605 | 1633 |
4387 | 1634 // printf("A:%6.1f V:%6.1f A-V:%7.3f oAV:%7.3f diff:%7.3f ct:%7.3f vpc:%7.3f \r", |
1635 // a_pts,v_pts,a_pts-v_pts, | |
1636 // (float)(mux_a->timer-mux_v->timer), | |
1637 // AV_delay, c_total, v_pts_corr ); | |
1638 // printf("V:%6.1f \r", d_video->pts ); | |
2605 | 1639 |
1640 #if 0 | |
1641 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", | |
1642 a_pts,v_pts,a_pts-v_pts,c_total, | |
1643 (int)sh_video->num_frames,(int)sh_video->num_frames_decoded, | |
1644 (sh_video->timer>0.5)?(int)(100.0*video_time_usage/(double)sh_video->timer):0, | |
1645 (sh_video->timer>0.5)?(int)(100.0*vout_time_usage/(double)sh_video->timer):0, | |
1646 (sh_video->timer>0.5)?(100.0*audio_time_usage/(double)sh_video->timer):0 | |
1647 ,cache_fill_status | |
1648 ); | |
1649 #endif | |
1650 | |
4387 | 1651 { float t=(GetTimerMS()-timer_start)*0.001f; |
1652 float len=(demuxer->movi_end-demuxer->movi_start); | |
1653 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
|
1654 #if 0 |
4393 | 1655 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
|
1656 p=(sh_audio->audio.dwSampleSize? ds_tell(sh_audio->ds)/sh_audio->audio.dwSampleSize : sh_audio->ds->block_no) |
4393 | 1657 / (float)(sh_audio->audio.dwLength); |
1658 } | |
8030
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
8027
diff
changeset
|
1659 #endif |
4392
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1660 #if 0 |
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1661 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
|
1662 (int)demuxer->movi_start, |
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1663 (int)demuxer->filepos, |
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1664 (int)demuxer->movi_end); |
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1665 #else |
11875
6b28eb95c08b
* changes mencoder's exit code on explicit kill to 2
attila
parents:
11834
diff
changeset
|
1666 if(!quiet) { |
8027 | 1667 if(verbose>0) { |
7370
8e07aeda7344
count dropped frames in -v mode, patch by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7331
diff
changeset
|
1668 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
|
1669 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
|
1670 (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
|
1671 (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
|
1672 (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
|
1673 v_pts_corr, |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1674 (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
|
1675 (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
|
1676 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
|
1677 duplicatedframes, badframes, skippedframes |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1678 ); |
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1679 } else |
4394 | 1680 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"Pos:%6.1fs %6df (%2d%%) %3dfps Trem:%4dmin %3dmb A-V:%5.3f [%d:%d]\r", |
4387 | 1681 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
|
1682 (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
|
1683 (p>0.001) ? (int)((t/p-t)/60) : 0, |
8465 | 1684 (p>0.001) ? (int)(ftello(muxer_f)/p/1024/1024) : 0, |
4394 | 1685 v_pts_corr, |
1686 (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
|
1687 (mux_a && mux_a->timer>1) ? (int)(mux_a->size/mux_a->timer/125) : 0 |
4387 | 1688 ); |
11875
6b28eb95c08b
* changes mencoder's exit code on explicit kill to 2
attila
parents:
11834
diff
changeset
|
1689 } |
4392
b50b2b0c65ea
status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents:
4388
diff
changeset
|
1690 #endif |
4387 | 1691 } |
2605 | 1692 fflush(stdout); |
1693 | |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1694 #ifdef USE_SUB |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1695 // find sub |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
1696 if(subdata && sh_video->pts>0){ |
8966 | 1697 float pts=sh_video->pts; |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1698 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
|
1699 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
|
1700 find_sub(subdata, (pts+sub_delay) * |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9772
diff
changeset
|
1701 (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
|
1702 // FIXME! frame counter... |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1703 sub_last_pts = pts; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1704 } |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1705 } |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1706 #endif |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1707 |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1708 #ifdef USE_DVDREAD |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1709 // 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
|
1710 if(vo_spudec||vobsub_writer){ |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1711 unsigned char* packet=NULL; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1712 int len; |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1713 while((len=ds_get_packet_sub(d_dvdsub,&packet))>0){ |
8966 | 1714 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
|
1715 if (vo_spudec) |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1716 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
|
1717 if (vobsub_writer) |
8966 | 1718 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
|
1719 } |
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
|
1720 if (vo_spudec) { |
8966 | 1721 spudec_heartbeat(vo_spudec,90000*sh_video->pts); |
5670 | 1722 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
|
1723 } |
5669
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1724 } |
391931fa79a6
enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents:
5629
diff
changeset
|
1725 #endif |
2531 | 1726 |
6333
69e14bf9e223
mencoder out-of-diskspace error handling, patch by Eric Lammerts <eric@lammerts.org>
arpi
parents:
6267
diff
changeset
|
1727 if(ferror(muxer_f)) { |
6947 | 1728 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
|
1729 mencoder_exit(1, NULL); |
69e14bf9e223
mencoder out-of-diskspace error handling, patch by Eric Lammerts <eric@lammerts.org>
arpi
parents:
6267
diff
changeset
|
1730 } |
2531 | 1731 |
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
|
1732 } // while(!at_eof) |
2531 | 1733 |
13593
e2dca00374f2
add new control message, that is send after end of stream, to flush all remaining frames in the video system
iive
parents:
13577
diff
changeset
|
1734 /* Emit the remaining frames in the video system */ |
e2dca00374f2
add new control message, that is send after end of stream, to flush all remaining frames in the video system
iive
parents:
13577
diff
changeset
|
1735 /*TODO emit frmaes delayed by decoder lag*/ |
e2dca00374f2
add new control message, that is send after end of stream, to flush all remaining frames in the video system
iive
parents:
13577
diff
changeset
|
1736 if(sh_video && sh_video->vfilter){ |
e2dca00374f2
add new control message, that is send after end of stream, to flush all remaining frames in the video system
iive
parents:
13577
diff
changeset
|
1737 mp_msg(MSGT_FIXME, MSGL_FIXME, "\nFlushing video frames\n"); |
e2dca00374f2
add new control message, that is send after end of stream, to flush all remaining frames in the video system
iive
parents:
13577
diff
changeset
|
1738 ((vf_instance_t *)sh_video->vfilter)->control(sh_video->vfilter, |
e2dca00374f2
add new control message, that is send after end of stream, to flush all remaining frames in the video system
iive
parents:
13577
diff
changeset
|
1739 VFCTRL_FLUSH_FRAMES, 0); |
e2dca00374f2
add new control message, that is send after end of stream, to flush all remaining frames in the video system
iive
parents:
13577
diff
changeset
|
1740 } |
e2dca00374f2
add new control message, that is send after end of stream, to flush all remaining frames in the video system
iive
parents:
13577
diff
changeset
|
1741 |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1742 if (!interrupted && filelist[++curfile].name != 0) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1743 if(sh_video){ uninit_video(sh_video);sh_video=NULL; } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1744 if(demuxer) free_demuxer(demuxer); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1745 if(stream) free_stream(stream); // kill cache thread |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1746 |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1747 prevwidth = mux_v->bih->biWidth; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1748 prevhieght = mux_v->bih->biHeight; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1749 |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1750 m_config_pop(mconfig); |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1751 goto play_next_file; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1752 } |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1753 |
3357 | 1754 #ifdef HAVE_MP3LAME |
1755 // fixup CBR mp3 audio header: | |
3354 | 1756 if(sh_audio && mux_a->codec==ACODEC_VBRMP3 && !lame_param_vbr){ |
1757 mux_a->h.dwSampleSize=1; | |
5673 | 1758 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nBlockSize= |
1759 (mux_a->size+(mux_a->h.dwLength>>1))/mux_a->h.dwLength; | |
1760 mux_a->h.dwLength=mux_a->size; | |
3354 | 1761 mux_a->h.dwRate=mux_a->wf->nAvgBytesPerSec; |
1762 mux_a->h.dwScale=1; | |
5673 | 1763 mux_a->wf->nBlockAlign=1; |
13122 | 1764 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_CBRAudioByterate, |
5673 | 1765 mux_a->h.dwRate,((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nBlockSize); |
3354 | 1766 } |
3357 | 1767 #endif |
3354 | 1768 |
13122 | 1769 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_WritingAVIIndex); |
11222 | 1770 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
|
1771 muxer_f_size=ftello(muxer_f); |
13122 | 1772 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_FixupAVIHeader); |
2531 | 1773 fseek(muxer_f,0,SEEK_SET); |
11222 | 1774 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
|
1775 if(ferror(muxer_f) || fclose(muxer_f) != 0) { |
6947 | 1776 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
|
1777 mencoder_exit(1, NULL); |
69e14bf9e223
mencoder out-of-diskspace error handling, patch by Eric Lammerts <eric@lammerts.org>
arpi
parents:
6267
diff
changeset
|
1778 } |
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
|
1779 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
|
1780 vobsub_out_close(vobsub_writer); |
4368 | 1781 |
1782 if(out_video_codec==VCODEC_FRAMENO && mux_v->timer>100){ | |
13122 | 1783 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_RecommendedVideoBitrate,"650MB",(int)((650*1024*1024-muxer_f_size)/mux_v->timer/125)); |
1784 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_RecommendedVideoBitrate,"700MB",(int)((700*1024*1024-muxer_f_size)/mux_v->timer/125)); | |
1785 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_RecommendedVideoBitrate,"800MB",(int)((800*1024*1024-muxer_f_size)/mux_v->timer/125)); | |
1786 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_RecommendedVideoBitrate,"2 x 650MB",(int)((2*650*1024*1024-muxer_f_size)/mux_v->timer/125)); | |
1787 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_RecommendedVideoBitrate,"2 x 700MB",(int)((2*700*1024*1024-muxer_f_size)/mux_v->timer/125)); | |
1788 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_RecommendedVideoBitrate,"2 x 800MB",(int)((2*800*1024*1024-muxer_f_size)/mux_v->timer/125)); | |
4368 | 1789 } |
1790 | |
13122 | 1791 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_VideoStreamResult, |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1792 (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
|
1793 if(sh_audio) |
13122 | 1794 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_AudioStreamResult, |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
5569
diff
changeset
|
1795 (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
|
1796 |
7497
10d4eec40938
fixed order of uninit (codec, demuxer, stream) - found by Jindrich Makovicka
arpi
parents:
7480
diff
changeset
|
1797 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
|
1798 if(demuxer) free_demuxer(demuxer); |
2618 | 1799 if(stream) free_stream(stream); // kill cache thread |
1800 | |
11375 | 1801 #ifdef USE_LIBAVCODEC |
1802 if(lavc_abuf != NULL) | |
1803 free(lavc_abuf); | |
1804 #endif | |
1805 | |
3320
ac8b70dd5e45
use return 1; if interrupted - patch by Artur Skawina <skawina@geocities.com>
arpi
parents:
3240
diff
changeset
|
1806 return interrupted; |
2531 | 1807 } |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1808 |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1809 static void parse_end_at() |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1810 { |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1811 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1812 end_at_type = END_AT_NONE; |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1813 if (!end_at_string) return; |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1814 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1815 /* End at size parsing */ |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1816 { |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1817 char unit[4]; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1818 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1819 end_at_type = END_AT_SIZE; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1820 |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1821 if(sscanf(end_at_string, "%lf%3s", &end_at, unit) == 2) { |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1822 if(!strcasecmp(unit, "b")) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1823 ; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1824 else if(!strcasecmp(unit, "kb")) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1825 end_at *= 1024; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1826 else if(!strcasecmp(unit, "mb")) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1827 end_at *= 1024*1024; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1828 else |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1829 end_at_type = END_AT_NONE; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1830 } |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1831 else |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1832 end_at_type = END_AT_NONE; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1833 } |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1834 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1835 /* 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
|
1836 * sscanf("%f", ...) below */ |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1837 if(end_at_type == END_AT_NONE) |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1838 { |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1839 int a,b; float d; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1840 |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1841 end_at_type = END_AT_TIME; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1842 |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1843 if (sscanf(end_at_string, "%d:%d:%f", &a, &b, &d) == 3) |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1844 end_at = 3600*a + 60*b + d; |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1845 else if (sscanf(end_at_string, "%d:%f", &a, &d) == 2) |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1846 end_at = 60*a + d; |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
1847 else if (sscanf(end_at_string, "%f", &d) == 1) |
4159
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1848 end_at = d; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1849 else |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1850 end_at_type = END_AT_NONE; |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1851 } |
42fec596fe7c
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4156
diff
changeset
|
1852 } |
4427
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1853 |
7451
8669e56d2d98
some mpcodecs option declaration moved to cfg-*, as aren;t used by
arpi
parents:
7394
diff
changeset
|
1854 #if 0 |
4427
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1855 /* 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
|
1856 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
|
1857 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
|
1858 int height) |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1859 { |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1860 uint8_t* tmp = malloc(width); |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1861 int i; |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1862 |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1863 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
|
1864 memcpy(tmp, &src[i*width], width); |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1865 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
|
1866 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
|
1867 } |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1868 |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1869 free(tmp); |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1870 return dst; |
6310422b9557
new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents:
4408
diff
changeset
|
1871 } |
7451
8669e56d2d98
some mpcodecs option declaration moved to cfg-*, as aren;t used by
arpi
parents:
7394
diff
changeset
|
1872 #endif |
8517
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1873 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1874 #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
|
1875 /* lame_presets_set |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1876 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
|
1877 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
|
1878 { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1879 int mono = 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1880 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1881 if (strcmp(preset_name, "help") == 0) { |
13122 | 1882 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_LameVersion, get_lame_version(), get_lame_url()); |
8517
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1883 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
|
1884 return -1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1885 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1886 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1887 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1888 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1889 //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
|
1890 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1891 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
|
1892 preset_name = "16"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1893 mono = 1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1894 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1895 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
|
1896 (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
|
1897 (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
|
1898 (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
|
1899 preset_name = "24"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1900 mono = 1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1901 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1902 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
|
1903 preset_name = "40"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1904 mono = 1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1905 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1906 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
|
1907 preset_name = "56"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1908 mono = 1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1909 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1910 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
|
1911 preset_name = "112"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1912 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1913 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
|
1914 (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
|
1915 preset_name = "112"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1916 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1917 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
|
1918 preset_name = "160"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1919 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1920 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
|
1921 preset_name = "192"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1922 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1923 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
|
1924 preset_name = "256"; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1925 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1926 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1927 #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
|
1928 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
|
1929 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1930 if (fast > 0) |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1931 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
|
1932 else |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1933 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
|
1934 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1935 return 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1936 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1937 #endif |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1938 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1939 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
|
1940 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1941 if (fast > 0) |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1942 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
|
1943 else |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1944 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
|
1945 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1946 return 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1947 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1948 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1949 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
|
1950 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1951 if (fast > 0) |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1952 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
|
1953 else |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1954 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
|
1955 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1956 return 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1957 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1958 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1959 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
|
1960 (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
|
1961 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1962 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
|
1963 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1964 return 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1965 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1966 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1967 // Generic ABR Preset |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1968 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
|
1969 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
|
1970 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
|
1971 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1972 if (cbr == 1 ) |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1973 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
|
1974 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1975 if (mono == 1 ) { |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1976 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
|
1977 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1978 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1979 return 0; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1980 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1981 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1982 else { |
13122 | 1983 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_LameVersion, get_lame_version(), get_lame_url()); |
1984 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_InvalidBitrateForLamePreset); | |
8517
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1985 return -1; |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1986 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1987 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1988 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1989 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1990 |
13122 | 1991 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_LameVersion, get_lame_version(), get_lame_url()); |
1992 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_InvalidLamePresetOptions); | |
1993 mencoder_exit(1, MSGTR_ErrorParsingCommandLine); | |
8517
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1994 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1995 #endif |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1996 |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
1997 #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
|
1998 /* 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
|
1999 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
|
2000 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
|
2001 { |
13122 | 2002 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_LamePresetsLongInfo); |
8517
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
2003 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
|
2004 } |
bcf1b010bf14
Presets are an easy way, to use hard to access lame options and to give
arpi
parents:
8471
diff
changeset
|
2005 #endif |
11375 | 2006 |
2007 #ifdef USE_LIBAVCODEC | |
2008 static uint32_t lavc_find_atag(char *codec) | |
2009 { | |
2010 if(codec == NULL) | |
2011 return 0; | |
2012 | |
2013 if(! strcasecmp(codec, "mp2")) | |
2014 return 0x50; | |
2015 | |
2016 if(! strcasecmp(codec, "mp3")) | |
2017 return 0x55; | |
2018 | |
2019 if(! strcasecmp(codec, "ac3")) | |
2020 return 0x2000; | |
2021 | |
2022 if(! strcasecmp(codec, "adpcm_ima_wav")) | |
2023 return 0x11; | |
2024 | |
11974 | 2025 if(! strncasecmp(codec, "bonk", 4)) |
2026 return 0x2048; | |
2027 | |
11375 | 2028 return 0; |
2029 } | |
2030 #endif | |
2031 | |
14802
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
2032 static float stop_time(demuxer_t* demuxer, muxer_stream_t* mux_v) { |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
2033 // demuxer is for future support for EDL |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
2034 float timeleft = -1; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
2035 if (play_n_frames >= 0) timeleft = mux_v->timer + play_n_frames * (double)(mux_v->h.dwScale) / mux_v->h.dwRate; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
2036 if (end_at_type == END_AT_TIME && (timeleft > end_at || timeleft == -1)) timeleft = end_at; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
2037 return timeleft; |
63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
rfelker
parents:
14762
diff
changeset
|
2038 } |