annotate mencoder.c @ 6110:7bea806b9c5f

Improvment for spu subtitles. Removed the integreted spudec in vobsub. Various cleanup/bugfix in vobsub (no more auto palette when a true one is here) HW spu rendering moved in spudec because we first need to reassable the packet before sending them to the hw. Spudec is now created only if nedded.
author albeu
date Fri, 17 May 2002 23:47:27 +0000
parents fa5d0ec52031
children 523014df7d32
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3384
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
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
4427
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
6 #define VCODEC_RAWRGB 6
4575
0245a06f9efd VfW encoding support (very alpha yet)
arpi
parents: 4557
diff changeset
7 #define VCODEC_VFW 7
5578
acfcb903b778 -ovc libdv support
arpi
parents: 5572
diff changeset
8 #define VCODEC_LIBDV 8
3361
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
9
3385
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
10 #define ACODEC_COPY 0
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
11 #define ACODEC_PCM 1
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
12 #define ACODEC_VBRMP3 2
4368
fae96d93c662 bitrate calculator for 650/700 mb cdrom
arpi
parents: 4367
diff changeset
13 #define ACODEC_NULL 3
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
14
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
15 #include <stdio.h>
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
16 #include <stdlib.h>
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
17 #include <string.h>
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
18 #include <signal.h>
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
19 #include <sys/time.h>
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
20
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
21 #include "config.h"
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
22 #include "mp_msg.h"
2978
6be2873a5a91 banner + version printed
arpi
parents: 2897
diff changeset
23 #include "version.h"
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
24 #include "help_mp.h"
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
25
2978
6be2873a5a91 banner + version printed
arpi
parents: 2897
diff changeset
26 static char* banner_text=
6be2873a5a91 banner + version printed
arpi
parents: 2897
diff changeset
27 "\n\n"
4757
4b794a67e9ca we're in the year 2002
jaf
parents: 4743
diff changeset
28 "MEncoder " VERSION "(C) 2000-2002 Arpad Gereoffy (see DOCS!)\n"
2978
6be2873a5a91 banner + version printed
arpi
parents: 2897
diff changeset
29 "\n";
6be2873a5a91 banner + version printed
arpi
parents: 2897
diff changeset
30
3323
7cd9dd989662 CPU detection added
arpi
parents: 3320
diff changeset
31 #include "cpudetect.h"
7cd9dd989662 CPU detection added
arpi
parents: 3320
diff changeset
32
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
33 #include "codec-cfg.h"
4343
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4207
diff changeset
34 #include "cfgparser.h"
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
35
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
36 #include "stream.h"
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
37 #include "demuxer.h"
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
38 #include "stheader.h"
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
39 #include "playtree.h"
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
40
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
41 #include "aviwrite.h"
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
42
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
43 #include "libvo/video_out.h"
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
44
5607
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5578
diff changeset
45 #include "libmpcodecs/dec_audio.h"
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5578
diff changeset
46 #include "libmpcodecs/dec_video.h"
2574
arpi
parents: 2571
diff changeset
47
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
48 #ifdef HAVE_MP3LAME
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
49 #include <lame/lame.h>
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
50 #endif
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
51
3521
48f3b07e174f Patch by Adam Di Carlo <adam@onshore-devel.com>:
pl
parents: 3504
diff changeset
52 #ifdef HAVE_LIBCSS
48f3b07e174f Patch by Adam Di Carlo <adam@onshore-devel.com>:
pl
parents: 3504
diff changeset
53 #include "libmpdemux/dvdauth.h"
48f3b07e174f Patch by Adam Di Carlo <adam@onshore-devel.com>:
pl
parents: 3504
diff changeset
54 #endif
48f3b07e174f Patch by Adam Di Carlo <adam@onshore-devel.com>:
pl
parents: 3504
diff changeset
55
3236
1774d0530a6d yv12 scaling (-x & -y)
michael
parents: 2978
diff changeset
56 #include <inttypes.h>
1774d0530a6d yv12 scaling (-x & -y)
michael
parents: 2978
diff changeset
57
3385
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
58 #include "fastmemcpy.h"
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
59
4388
b6b429d10296 Support for HW equalizing
nick
parents: 4387
diff changeset
60 /**************************************************************************
b6b429d10296 Support for HW equalizing
nick
parents: 4387
diff changeset
61 Video accelerated architecture
b6b429d10296 Support for HW equalizing
nick
parents: 4387
diff changeset
62 **************************************************************************/
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
63 vo_vaa_t vo_vaa; // FIXME! remove me!
5511
7a24a067f0af vo_config_count now counts calls to vo->config()
arpi
parents: 5507
diff changeset
64 int vo_doublebuffering=0;
7a24a067f0af vo_config_count now counts calls to vo->config()
arpi
parents: 5507
diff changeset
65 int vo_directrendering=0;
7a24a067f0af vo_config_count now counts calls to vo->config()
arpi
parents: 5507
diff changeset
66 int vo_config_count=0;
4388
b6b429d10296 Support for HW equalizing
nick
parents: 4387
diff changeset
67
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
68 //--------------------------
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
69
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
70 // cache2:
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
71 static int stream_cache_size=0;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
72 #ifdef USE_STREAM_CACHE
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
73 extern int cache_fill_status;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
74 #else
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
75 #define cache_fill_status 0
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
76 #endif
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
77
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
78 int vcd_track=0;
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
79 int audio_id=-1;
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
80 int video_id=-1;
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
81 int dvdsub_id=-1;
5388
3af2729c5c87 * New command line switch for mplayer & mencoder:
kmkaplan
parents: 5386
diff changeset
82 int vobsub_id=-1;
5436
6f6082d9c8ba -alang/-slang support in mencoder too
arpi
parents: 5392
diff changeset
83 char* audio_lang=NULL;
6f6082d9c8ba -alang/-slang support in mencoder too
arpi
parents: 5392
diff changeset
84 char* dvdsub_lang=NULL;
5388
3af2729c5c87 * New command line switch for mplayer & mencoder:
kmkaplan
parents: 5386
diff changeset
85 static char* spudec_ifo=NULL;
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
86
4355
4167864cfb0a Add -nosound/-sound and -ovc null to mencoder.
kmkaplan
parents: 4343
diff changeset
87 static int has_audio=1;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
88 char *audio_codec=NULL; // override audio codec
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
89 char *video_codec=NULL; // override video codec
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
90 int audio_family=-1; // override audio codec family
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
91 int video_family=-1; // override video codec family
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
92
5904
c37b0c8a9d4c -xy,-zoom,-flip available in mencoder too
arpi
parents: 5889
diff changeset
93 // libvo opts: (defiend at libmpcodecs/vd.c)
c37b0c8a9d4c -xy,-zoom,-flip available in mencoder too
arpi
parents: 5889
diff changeset
94 extern int screen_size_xy;
c37b0c8a9d4c -xy,-zoom,-flip available in mencoder too
arpi
parents: 5889
diff changeset
95 extern float movie_aspect;
c37b0c8a9d4c -xy,-zoom,-flip available in mencoder too
arpi
parents: 5889
diff changeset
96 extern int softzoom;
c37b0c8a9d4c -xy,-zoom,-flip available in mencoder too
arpi
parents: 5889
diff changeset
97 extern int flip;
c37b0c8a9d4c -xy,-zoom,-flip available in mencoder too
arpi
parents: 5889
diff changeset
98
c37b0c8a9d4c -xy,-zoom,-flip available in mencoder too
arpi
parents: 5889
diff changeset
99
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
100 #ifdef HAVE_MP3LAME
2661
11f4c2b2b70f -oac/-ovc (fake:))
arpi
parents: 2655
diff changeset
101 int out_audio_codec=ACODEC_VBRMP3;
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
102 #else
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
103 int out_audio_codec=ACODEC_PCM;
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
104 #endif
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
105
4620
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
106 int out_video_codec=
5995
fa5d0ec52031 time to make libavcodec as default
arpi
parents: 5922
diff changeset
107 #ifdef USE_LIBAVCODEC
fa5d0ec52031 time to make libavcodec as default
arpi
parents: 5922
diff changeset
108 VCODEC_LIBAVCODEC;
fa5d0ec52031 time to make libavcodec as default
arpi
parents: 5922
diff changeset
109 #else
4620
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
110 #ifdef HAVE_DIVX4ENCORE
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
111 VCODEC_DIVX4;
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
112 #else
5569
cfab2ce8a840 VCODEC_RAW fixed
arpi
parents: 5553
diff changeset
113 VCODEC_COPY;
4620
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
114 #endif
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
115 #endif
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
116
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
117 // audio stream skip/resync functions requires only for seeking.
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
118 // (they should be implemented in the audio codec layer)
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
119 //void skip_audio_frame(sh_audio_t *sh_audio){}
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
120 //void resync_audio_stream(sh_audio_t *sh_audio){}
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
121
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
122 int verbose=0; // must be global!
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
123 double video_time_usage=0;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
124 double vout_time_usage=0;
4834
fdb92826250c max & average benchmarks
nick
parents: 4767
diff changeset
125 double max_video_time_usage=0;
fdb92826250c max & average benchmarks
nick
parents: 4767
diff changeset
126 double max_vout_time_usage=0;
4838
5129860a980e frame dropping prediction with benchmarks
nick
parents: 4834
diff changeset
127 double cur_video_time_usage=0;
5129860a980e frame dropping prediction with benchmarks
nick
parents: 4834
diff changeset
128 double cur_vout_time_usage=0;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
129 static double audio_time_usage=0;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
130 static int total_time_usage_start=0;
4844
76acf5bbda78 exclude benchmark stuff execution from normal playback
nick
parents: 4838
diff changeset
131 int benchmark=0;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
132
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
133 // A-V sync:
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
134 int delay_corrected=1;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
135 static float default_max_pts_correction=-1;//0.01f;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
136 static float max_pts_correction=0;//default_max_pts_correction;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
137 static float c_total=0;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
138
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
139 float force_fps=0;
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
140 float force_ofps=0; // set to 24 for inverse telecine
5629
9b422f216fb5 -skiplimit/-noskip options to disable fps correction
arpi
parents: 5626
diff changeset
141 static int skip_limit=-1;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
142
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
143 int force_srate=0;
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
144
2626
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
145 char* out_filename="test.avi";
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
146
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
147 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
148
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
149 int pass=0;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
150 char* passtmpfile="divx2pass.log";
3377
4723f6fd750a do not fault if 2pass VbrControl can't open the logfile
alex
parents: 3363
diff changeset
151 int pass_working=0;
2643
9d0a638e211a divx4 2-pass support, -frames option
arpi
parents: 2639
diff changeset
152
9d0a638e211a divx4 2-pass support, -frames option
arpi
parents: 2639
diff changeset
153 static int play_n_frames=-1;
9d0a638e211a divx4 2-pass support, -frames option
arpi
parents: 2639
diff changeset
154
5669
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
155 #include "libvo/font_load.h"
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
156 #include "libvo/sub.h"
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
157
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
158 // sub:
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
159 char *font_name=NULL;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
160 float font_factor=0.75;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
161 char *sub_name=NULL;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
162 float sub_delay=0;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
163 float sub_fps=0;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
164 int sub_auto = 0;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
165
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
166 #ifdef USE_SUB
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
167 static subtitle* subtitles=NULL;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
168 float sub_last_pts = -303;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
169 #endif
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
170
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
171
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
172
2661
11f4c2b2b70f -oac/-ovc (fake:))
arpi
parents: 2655
diff changeset
173 //char *out_audio_codec=NULL; // override audio codec
11f4c2b2b70f -oac/-ovc (fake:))
arpi
parents: 2655
diff changeset
174 //char *out_video_codec=NULL; // override video codec
2626
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
175
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
176 //#include "libmpeg2/mpeg2.h"
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
177 //#include "libmpeg2/mpeg2_internal.h"
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
178
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
179 #ifdef HAVE_MP3LAME
2626
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
180 int lame_param_quality=0; // best
5922
30eea1bd1b64 fixed bogus overloaded "q" parameter for lame mp3 encoding
rfelker
parents: 5904
diff changeset
181 int lame_param_algqual=5; // same as old default
2626
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
182 int lame_param_vbr=vbr_default;
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
183 int lame_param_mode=-1; // unset
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
184 int lame_param_padding=-1; // unset
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
185 int lame_param_br=-1; // unset
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
186 int lame_param_ratio=-1; // unset
5848
48a0667742b9 volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents: 5685
diff changeset
187 float lame_param_scale=-1; // unset
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
188 #endif
2626
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
189
3236
1774d0530a6d yv12 scaling (-x & -y)
michael
parents: 2978
diff changeset
190 static int vo_w=0, vo_h=0;
5270
870e932096ff Support for cropping in mencoder. New options:
ksorim
parents: 5223
diff changeset
191 static int input_pitch, input_bpp;
870e932096ff Support for cropping in mencoder. New options:
ksorim
parents: 5223
diff changeset
192
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
193 //-------------------------- config stuff:
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
194
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
195 m_config_t* mconfig;
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
196
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
197 static int cfg_inc_verbose(struct config *conf){ ++verbose; return 0;}
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
198
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
199 static int cfg_include(struct config *conf, char *filename){
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
200 return m_config_parse_config_file(mconfig, filename);
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
201 }
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
202
4620
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
203 static char *seek_to_sec=NULL;
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
204 static off_t seek_to_byte=0;
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
205
4159
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
206 static int parse_end_at(struct config *conf, const char* param);
4427
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
207 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
208
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
209 #include "get_path.c"
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
210
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
211 #include "cfg-mplayer-def.h"
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
212 #include "cfg-mencoder.h"
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
213
4088
4435dc3b8bef Add DVD subtitles to menoder
kmkaplan
parents: 3979
diff changeset
214 #ifdef USE_DVDREAD
4435dc3b8bef Add DVD subtitles to menoder
kmkaplan
parents: 3979
diff changeset
215 #include "spudec.h"
4435dc3b8bef Add DVD subtitles to menoder
kmkaplan
parents: 3979
diff changeset
216 #endif
5388
3af2729c5c87 * New command line switch for mplayer & mencoder:
kmkaplan
parents: 5386
diff changeset
217 #include "vobsub.h"
4088
4435dc3b8bef Add DVD subtitles to menoder
kmkaplan
parents: 3979
diff changeset
218
4743
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
219 /* FIXME */
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
220 void mencoder_exit(int level, char *how)
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
221 {
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
222 if (how)
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
223 printf("Exiting... (%s)\n", how);
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
224 else
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
225 printf("Exiting...\n");
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
226
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
227 exit(level);
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
228 }
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
229
4488
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
230 void parse_cfgfiles( m_config_t* conf )
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
231 {
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
232 char *conffile;
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
233 if ((conffile = get_path("mencoder")) == NULL) {
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
234 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_GetpathProblem);
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
235 } else {
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
236 if (m_config_parse_config_file(conf, conffile) < 0)
4743
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
237 mencoder_exit(1,"configfile error");
4488
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
238 free(conffile);
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
239 }
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
240 }
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
241
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
242
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
243 //---------------------------------------------------------------------------
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
244
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
245 int dec_audio(sh_audio_t *sh_audio,unsigned char* buffer,int total){
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
246 int size=0;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
247 int eof=0;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
248 while(size<total && !eof){
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
249 int len=total-size;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
250 if(len>MAX_OUTBURST) len=MAX_OUTBURST;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
251 if(len>sh_audio->a_buffer_size) len=sh_audio->a_buffer_size;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
252 if(len>sh_audio->a_buffer_len){
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
253 int ret=decode_audio(sh_audio,
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
254 &sh_audio->a_buffer[sh_audio->a_buffer_len],
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
255 len-sh_audio->a_buffer_len,
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
256 sh_audio->a_buffer_size-sh_audio->a_buffer_len);
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
257 if(ret>0) sh_audio->a_buffer_len+=ret; else eof=1;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
258 }
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
259 if(len>sh_audio->a_buffer_len) len=sh_audio->a_buffer_len;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
260 memcpy(buffer+size,sh_audio->a_buffer,len);
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
261 sh_audio->a_buffer_len-=len; size+=len;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
262 if(sh_audio->a_buffer_len>0)
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
263 memcpy(sh_audio->a_buffer,&sh_audio->a_buffer[len],sh_audio->a_buffer_len);
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
264 }
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
265 return size;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
266 }
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
267
4767
8d4208df7c15 Options registration for mencoder
albeu
parents: 4757
diff changeset
268 extern void me_register_options(m_config_t* cfg);
8d4208df7c15 Options registration for mencoder
albeu
parents: 4757
diff changeset
269
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
270 //---------------------------------------------------------------------------
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
271
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
272 static int eof=0;
3320
ac8b70dd5e45 use return 1; if interrupted - patch by Artur Skawina <skawina@geocities.com>
arpi
parents: 3240
diff changeset
273 static int interrupted=0;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
274
4159
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
275 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
276 static enum end_at_type_t end_at_type = END_AT_NONE;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
277 static int end_at;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
278
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
279 static void exit_sighandler(int x){
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
280 eof=1;
3320
ac8b70dd5e45 use return 1; if interrupted - patch by Artur Skawina <skawina@geocities.com>
arpi
parents: 3240
diff changeset
281 interrupted=1;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
282 }
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
283
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
284 aviwrite_t* muxer=NULL;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
285 FILE* muxer_f=NULL;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
286
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
287 // callback for ve_*.c:
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
288 void mencoder_write_chunk(aviwrite_stream_t *s,int len,unsigned int flags){
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
289 aviwrite_write_chunk(muxer,s,muxer_f,len,flags);
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
290 }
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
291
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
292
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
293 int main(int argc,char* argv[], char *envp[]){
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
294
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
295 stream_t* stream=NULL;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
296 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
297 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
298 demuxer_t* demuxer2=NULL;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
299 demux_stream_t *d_audio=NULL;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
300 demux_stream_t *d_video=NULL;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
301 demux_stream_t *d_dvdsub=NULL;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
302 sh_audio_t *sh_audio=NULL;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
303 sh_video_t *sh_video=NULL;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
304 int file_format=DEMUXER_TYPE_UNKNOWN;
5149
66b7488f9dd4 removed pitches[] mess
arpi
parents: 4844
diff changeset
305 int i;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
306
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
307 uint32_t ptimer_start;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
308 uint32_t audiorate=0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
309 uint32_t videorate=0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
310 uint32_t audiosamples=1;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
311 uint32_t videosamples=1;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
312 uint32_t skippedframes=0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
313 uint32_t duplicatedframes=0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
314
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
315 aviwrite_stream_t* mux_a=NULL;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
316 aviwrite_stream_t* mux_v=NULL;
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
317 off_t muxer_f_size=0;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
318
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
319 #ifdef HAVE_MP3LAME
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
320 lame_global_flags *lame;
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
321 #endif
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
322
2653
a863a97f3a1c WMP compatibility fixed
arpi
parents: 2643
diff changeset
323 float audio_preload=0.5;
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
324
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
325 double v_pts_corr=0;
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
326 double v_timer_corr=0;
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
327
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
328 play_tree_t* playtree;
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
329 play_tree_iter_t* playtree_iter;
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
330 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
331 char* frameno_filename="frameno.avi";
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
332
3361
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
333 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
334 int next_frameno=-1;
3361
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
335
4387
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
336 unsigned int timer_start;
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
337
5223
8c7b6ba2b5e9 splitted mp_msg_init and mp_msg_set_level
alex
parents: 5176
diff changeset
338 mp_msg_init();
8c7b6ba2b5e9 splitted mp_msg_init and mp_msg_set_level
alex
parents: 5176
diff changeset
339 mp_msg_set_level(MSGL_STATUS);
2978
6be2873a5a91 banner + version printed
arpi
parents: 2897
diff changeset
340 mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s",banner_text);
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
341
3323
7cd9dd989662 CPU detection added
arpi
parents: 3320
diff changeset
342 /* Test for cpu capabilities (and corresponding OS support) for optimizing */
7cd9dd989662 CPU detection added
arpi
parents: 3320
diff changeset
343 #ifdef ARCH_X86
7cd9dd989662 CPU detection added
arpi
parents: 3320
diff changeset
344 GetCpuCaps(&gCpuCaps);
7cd9dd989662 CPU detection added
arpi
parents: 3320
diff changeset
345 mp_msg(MSGT_CPLAYER,MSGL_INFO,"CPUflags: Type: %d MMX: %d MMX2: %d 3DNow: %d 3DNow2: %d SSE: %d SSE2: %d\n",
7cd9dd989662 CPU detection added
arpi
parents: 3320
diff changeset
346 gCpuCaps.cpuType,gCpuCaps.hasMMX,gCpuCaps.hasMMX2,
7cd9dd989662 CPU detection added
arpi
parents: 3320
diff changeset
347 gCpuCaps.has3DNow, gCpuCaps.has3DNowExt,
7cd9dd989662 CPU detection added
arpi
parents: 3320
diff changeset
348 gCpuCaps.hasSSE, gCpuCaps.hasSSE2);
7cd9dd989662 CPU detection added
arpi
parents: 3320
diff changeset
349 #endif
7cd9dd989662 CPU detection added
arpi
parents: 3320
diff changeset
350
5889
111d2406a87a do cpudetect before anything else
arpi
parents: 5848
diff changeset
351 // check codec.conf
111d2406a87a do cpudetect before anything else
arpi
parents: 5848
diff changeset
352 if(!parse_codec_cfg(get_path("codecs.conf"))){
111d2406a87a do cpudetect before anything else
arpi
parents: 5848
diff changeset
353 if(!parse_codec_cfg(CONFDIR"/codecs.conf")){
111d2406a87a do cpudetect before anything else
arpi
parents: 5848
diff changeset
354 mp_msg(MSGT_MENCODER,MSGL_HINT,MSGTR_CopyCodecsConf);
111d2406a87a do cpudetect before anything else
arpi
parents: 5848
diff changeset
355 mencoder_exit(1,NULL);
111d2406a87a do cpudetect before anything else
arpi
parents: 5848
diff changeset
356 }
111d2406a87a do cpudetect before anything else
arpi
parents: 5848
diff changeset
357 }
111d2406a87a do cpudetect before anything else
arpi
parents: 5848
diff changeset
358
5669
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
359 // check font
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
360 #ifdef USE_OSD
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
361 if(font_name){
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
362 vo_font=read_font_desc(font_name,font_factor,verbose>1);
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
363 if(!vo_font) mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadFont,font_name);
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
364 } else {
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
365 // try default:
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
366 vo_font=read_font_desc(get_path("font/font.desc"),font_factor,verbose>1);
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
367 if(!vo_font)
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
368 vo_font=read_font_desc(DATADIR"/font/font.desc",font_factor,verbose>1);
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
369 }
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
370 #endif
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
371
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
372 vo_init_osd();
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
373
4367
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
374 // FIXME: get rid of -dvd and other tricky options and config/playtree
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
375 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
376 if(stream2){
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
377 demuxer2=demux_open(stream2,DEMUXER_TYPE_AVI,-1,-1,-2);
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
378 if(demuxer2) printf("Using pass3 control file: %s\n",frameno_filename);
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
379 }
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
380
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
381 playtree = play_tree_new();
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
382 mconfig = m_config_new(playtree);
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
383 m_config_register_options(mconfig,mencoder_opts);
4767
8d4208df7c15 Options registration for mencoder
albeu
parents: 4757
diff changeset
384 me_register_options(mconfig);
4488
7e8910727e7a config file support for mencoder
rfelker
parents: 4462
diff changeset
385 parse_cfgfiles(mconfig);
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
386
4743
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
387 if(m_config_parse_command_line(mconfig, argc, argv, envp) < 0) mencoder_exit(1, "error parsing cmdline");
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
388 playtree = play_tree_cleanup(playtree);
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
389 if(playtree) {
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
390 playtree_iter = play_tree_iter_new(playtree,mconfig);
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
391 if(playtree_iter) {
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
392 if(play_tree_iter_step(playtree_iter,0,0) != PLAY_TREE_ITER_ENTRY) {
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
393 play_tree_iter_free(playtree_iter);
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
394 playtree_iter = NULL;
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
395 }
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
396 filename = play_tree_iter_get_file(playtree_iter,1);
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
397 }
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
398 }
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
399
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4088
diff changeset
400 if(!filename && !vcd_track && !dvd_title && !tv_param_on){
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
401 printf("\nMissing filename!\n\n");
4743
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
402 mencoder_exit(1,NULL);
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
403 }
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
404
5223
8c7b6ba2b5e9 splitted mp_msg_init and mp_msg_set_level
alex
parents: 5176
diff changeset
405 mp_msg_set_level(verbose+MSGL_STATUS);
2600
51a88ac2a602 nosound fixed?
arpi
parents: 2591
diff changeset
406
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
407 stream=open_stream(filename,vcd_track,&file_format);
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
408
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
409 if(!stream){
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
410 printf("Cannot open file/device\n");
4743
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
411 mencoder_exit(1,NULL);
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
412 }
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
413
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
414 printf("success: format: %d data: 0x%X - 0x%X\n",file_format, (int)(stream->start_pos),(int)(stream->end_pos));
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
415
5436
6f6082d9c8ba -alang/-slang support in mencoder too
arpi
parents: 5392
diff changeset
416 #ifdef USE_DVDREAD
6f6082d9c8ba -alang/-slang support in mencoder too
arpi
parents: 5392
diff changeset
417 if(stream->type==STREAMTYPE_DVD){
6f6082d9c8ba -alang/-slang support in mencoder too
arpi
parents: 5392
diff changeset
418 if(audio_lang && audio_id==-1) audio_id=dvd_aid_from_lang(stream,audio_lang);
6f6082d9c8ba -alang/-slang support in mencoder too
arpi
parents: 5392
diff changeset
419 if(dvdsub_lang && dvdsub_id==-1) dvdsub_id=dvd_sid_from_lang(stream,dvdsub_lang);
6f6082d9c8ba -alang/-slang support in mencoder too
arpi
parents: 5392
diff changeset
420 }
6f6082d9c8ba -alang/-slang support in mencoder too
arpi
parents: 5392
diff changeset
421 #endif
6f6082d9c8ba -alang/-slang support in mencoder too
arpi
parents: 5392
diff changeset
422
5626
b7b40e65c070 -sb option re-added (noticed by Alexandre Oliva <oliva@lsd.ic.unicamp.br>)
arpi
parents: 5607
diff changeset
423 stream->start_pos+=seek_to_byte;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
424
3979
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
425 #ifdef HAVE_LIBCSS
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
426 // current_module="libcss";
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
427 if (dvdimportkey) {
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
428 if (dvd_import_key(dvdimportkey)) {
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
429 mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_ErrorDVDkey);
4743
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
430 mencoder_exit(1,NULL);
3979
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
431 }
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
432 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CmdlineDVDkey);
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
433 }
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
434 if (dvd_auth_device) {
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
435 // if (dvd_auth(dvd_auth_device,f)) {
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
436 if (dvd_auth(dvd_auth_device,filename)) {
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
437 mp_msg(MSGT_CPLAYER,MSGL_FATAL,"Error in DVD auth...\n");
4743
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
438 mencoder_exit(1,NULL);
3979
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
439 }
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
440 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_DVDauthOk);
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
441 }
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
442 #endif
b28af7b58f4c libcss support in mencoder, too
lgb
parents: 3894
diff changeset
443
5626
b7b40e65c070 -sb option re-added (noticed by Alexandre Oliva <oliva@lsd.ic.unicamp.br>)
arpi
parents: 5607
diff changeset
444 if(stream_cache_size) stream_enable_cache(stream,stream_cache_size*1024,0,0);
b7b40e65c070 -sb option re-added (noticed by Alexandre Oliva <oliva@lsd.ic.unicamp.br>)
arpi
parents: 5607
diff changeset
445
4367
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
446 if(!has_audio || demuxer2) audio_id=-2; /* do NOT read audio packets... */
4355
4167864cfb0a Add -nosound/-sound and -ovc null to mencoder.
kmkaplan
parents: 4343
diff changeset
447
2882
2fd108f6bc68 -aid fixed
arpi
parents: 2840
diff changeset
448 //demuxer=demux_open(stream,file_format,video_id,audio_id,dvdsub_id);
2fd108f6bc68 -aid fixed
arpi
parents: 2840
diff changeset
449 demuxer=demux_open(stream,file_format,audio_id,video_id,dvdsub_id);
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
450 if(!demuxer){
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
451 printf("Cannot open demuxer\n");
4743
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
452 mencoder_exit(1,NULL);
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
453 }
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
454
4367
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
455 d_audio=demuxer2 ? demuxer2->audio : demuxer->audio;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
456 d_video=demuxer->video;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
457 d_dvdsub=demuxer->sub;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
458 sh_audio=d_audio->sh;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
459 sh_video=d_video->sh;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
460
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
461 if(!video_read_properties(sh_video)){
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
462 printf("Couldn't read video properties\n");
4743
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
463 mencoder_exit(1,NULL);
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
464 }
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
465
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
466 mp_msg(MSGT_MENCODER,MSGL_INFO,"[V] filefmt:%d fourcc:0x%X size:%dx%d fps:%5.2f ftime:=%6.4f\n",
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
467 demuxer->file_format,sh_video->format, sh_video->disp_w,sh_video->disp_h,
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
468 sh_video->fps,sh_video->frametime
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
469 );
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
470
4620
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
471 if(sh_audio && (out_audio_codec || seek_to_sec || !sh_audio->wf)){
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
472 // Go through the codec.conf and find the best codec...
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
473 sh_audio->codec=NULL;
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
474 if(audio_family!=-1) mp_msg(MSGT_MENCODER,MSGL_INFO,MSGTR_TryForceAudioFmt,audio_family);
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
475 while(1){
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
476 sh_audio->codec=find_codec(sh_audio->format,NULL,sh_audio->codec,1);
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
477 if(!sh_audio->codec){
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
478 if(audio_family!=-1) {
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
479 sh_audio->codec=NULL; /* re-search */
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
480 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CantFindAfmtFallback);
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
481 audio_family=-1;
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
482 continue;
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
483 }
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
484 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CantFindAudioCodec,sh_audio->format);
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
485 mp_msg(MSGT_MENCODER,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf"));
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
486 sh_audio=d_audio->sh=NULL;
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
487 break;
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
488 }
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
489 if(audio_codec && strcmp(sh_audio->codec->name,audio_codec)) continue;
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
490 else if(audio_family!=-1 && sh_audio->codec->driver!=audio_family) continue;
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
491 mp_msg(MSGT_MENCODER,MSGL_INFO,"%s audio codec: [%s] drv:%d (%s)\n",audio_codec?"Forcing":"Detected",sh_audio->codec->name,sh_audio->codec->driver,sh_audio->codec->info);
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
492 break;
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
493 }
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
494 }
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
495
4620
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
496 if(sh_audio && (out_audio_codec || seek_to_sec || !sh_audio->wf)){
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
497 mp_msg(MSGT_MENCODER,MSGL_V,"Initializing audio codec...\n");
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
498 if(!init_audio(sh_audio)){
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
499 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CouldntInitAudioCodec);
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
500 sh_audio=d_audio->sh=NULL;
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
501 } else {
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
502 mp_msg(MSGT_MENCODER,MSGL_INFO,"AUDIO: srate=%d chans=%d bps=%d sfmt=0x%X ratio: %d->%d\n",sh_audio->samplerate,sh_audio->channels,sh_audio->samplesize,
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
503 sh_audio->sample_format,sh_audio->i_bps,sh_audio->o_bps);
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
504 }
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
505 }
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
506
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
507 // set up video encoder:
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
508
5388
3af2729c5c87 * New command line switch for mplayer & mencoder:
kmkaplan
parents: 5386
diff changeset
509 if (spudec_ifo) {
3af2729c5c87 * New command line switch for mplayer & mencoder:
kmkaplan
parents: 5386
diff changeset
510 unsigned int palette[16], width, height;
6110
7bea806b9c5f Improvment for spu subtitles.
albeu
parents: 5995
diff changeset
511 if (vobsub_parse_ifo(NULL,spudec_ifo, palette, &width, &height, 1) >= 0)
5388
3af2729c5c87 * New command line switch for mplayer & mencoder:
kmkaplan
parents: 5386
diff changeset
512 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
513 }
5392
d7c586ebbacf Fix bug noticed by Hajba Szilard in message <20020329151644.A23301@revai.hu>
kmkaplan
parents: 5390
diff changeset
514 #ifdef USE_DVDREAD
5388
3af2729c5c87 * New command line switch for mplayer & mencoder:
kmkaplan
parents: 5386
diff changeset
515 if (vo_spudec==NULL) {
4557
1fac3562fda5 fix spudec, faszom (C#)
pontscho
parents: 4494
diff changeset
516 vo_spudec=spudec_new_scaled(stream->type==STREAMTYPE_DVD?((dvd_priv_t *)(stream->priv))->cur_pgc->palette:NULL,
4088
4435dc3b8bef Add DVD subtitles to menoder
kmkaplan
parents: 3979
diff changeset
517 sh_video->disp_w, sh_video->disp_h);
5388
3af2729c5c87 * New command line switch for mplayer & mencoder:
kmkaplan
parents: 5386
diff changeset
518 }
4088
4435dc3b8bef Add DVD subtitles to menoder
kmkaplan
parents: 3979
diff changeset
519 #endif
4435dc3b8bef Add DVD subtitles to menoder
kmkaplan
parents: 3979
diff changeset
520
5669
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
521 #ifdef USE_SUB
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
522 // after reading video params we should load subtitles because
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
523 // we know fps so now we can adjust subtitles time to ~6 seconds AST
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
524 // check .sub
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
525 // current_module="read_subtitles_file";
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
526 if(sub_name){
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
527 subtitles=sub_read_file(sub_name, sh_video->fps);
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
528 if(!subtitles) mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadSub,sub_name);
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
529 } else
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
530 if(sub_auto) { // auto load sub file ...
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
531 subtitles=sub_read_file( filename ? sub_filename( get_path("sub/"), filename )
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
532 : "default.sub", sh_video->fps );
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
533 }
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
534 #endif
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
535
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
536
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
537 // set up output file:
2626
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
538 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
539 if(!muxer_f) {
bc648c6a464a fixes a segfault if file specified in -o can't be accessed
pl
parents: 2884
diff changeset
540 printf("Cannot open output file '%s'\n", out_filename);
4743
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
541 mencoder_exit(1,NULL);
2887
bc648c6a464a fixes a segfault if file specified in -o can't be accessed
pl
parents: 2884
diff changeset
542 }
bc648c6a464a fixes a segfault if file specified in -o can't be accessed
pl
parents: 2884
diff changeset
543
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
544 muxer=aviwrite_new_muxer();
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
545
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
546 // ============= VIDEO ===============
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
547
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
548 mux_v=aviwrite_new_stream(muxer,AVIWRITE_TYPE_VIDEO);
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
549
4575
0245a06f9efd VfW encoding support (very alpha yet)
arpi
parents: 4557
diff changeset
550 mux_v->buffer_size=0x200000; // 2MB
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
551 mux_v->buffer=malloc(mux_v->buffer_size);
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
552
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
553 mux_v->source=sh_video;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
554
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
555 mux_v->h.dwSampleSize=0; // VBR
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
556 mux_v->h.dwScale=10000;
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
557 mux_v->h.dwRate=mux_v->h.dwScale*(force_ofps?force_ofps:sh_video->fps);
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
558
2661
11f4c2b2b70f -oac/-ovc (fake:))
arpi
parents: 2655
diff changeset
559 mux_v->codec=out_video_codec;
2574
arpi
parents: 2571
diff changeset
560
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
561 mux_v->bih=NULL;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
562 sh_video->codec=NULL;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
563 sh_video->video_out=NULL;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
564 sh_video->vfilter=NULL; // fixme!
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
565
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
566 switch(mux_v->codec){
3384
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
567 case VCODEC_COPY:
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
568 if (sh_video->bih)
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
569 mux_v->bih=sh_video->bih;
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
570 else
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
571 {
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
572 mux_v->bih=malloc(sizeof(BITMAPINFOHEADER));
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
573 mux_v->bih->biSize=sizeof(BITMAPINFOHEADER);
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
574 mux_v->bih->biWidth=sh_video->disp_w;
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
575 mux_v->bih->biHeight=sh_video->disp_h;
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
576 mux_v->bih->biCompression=sh_video->format;
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
577 mux_v->bih->biPlanes=1;
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
578 mux_v->bih->biBitCount=24; // FIXME!!!
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
579 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8);
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
580 }
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
581 printf("videocodec: framecopy (%dx%d %dbpp fourcc=%x)\n",
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
582 mux_v->bih->biWidth, mux_v->bih->biHeight,
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
583 mux_v->bih->biBitCount, mux_v->bih->biCompression);
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
584 break;
3361
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
585 case VCODEC_FRAMENO:
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
586 mux_v->bih=malloc(sizeof(BITMAPINFOHEADER));
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
587 mux_v->bih->biSize=sizeof(BITMAPINFOHEADER);
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
588 mux_v->bih->biWidth=vo_w;
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
589 mux_v->bih->biHeight=vo_h;
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
590 mux_v->bih->biPlanes=1;
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
591 mux_v->bih->biBitCount=24;
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
592 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
593 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8);
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
594 break;
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
595 default:
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
596
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
597 switch(mux_v->codec){
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
598 case VCODEC_DIVX4:
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
599 sh_video->vfilter=vf_open_encoder(NULL,"divx4",mux_v); break;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
600 case VCODEC_LIBAVCODEC:
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
601 sh_video->vfilter=vf_open_encoder(NULL,"lavc",mux_v); break;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
602 case VCODEC_RAWRGB:
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
603 sh_video->vfilter=vf_open_encoder(NULL,"rawrgb",mux_v); break;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
604 case VCODEC_VFW:
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
605 sh_video->vfilter=vf_open_encoder(NULL,"vfw",mux_v); break;
5578
acfcb903b778 -ovc libdv support
arpi
parents: 5572
diff changeset
606 case VCODEC_LIBDV:
acfcb903b778 -ovc libdv support
arpi
parents: 5572
diff changeset
607 sh_video->vfilter=vf_open_encoder(NULL,"libdv",mux_v); break;
4743
171dcc22b607 using mencoder_exit instead exit and return
alex
parents: 4703
diff changeset
608 }
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
609 if(!mux_v->bih || !sh_video->vfilter){
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
610 mp_msg(MSGT_MENCODER,MSGL_FATAL,"Failed to open the encoder\n");
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
611 mencoder_exit(1,NULL);
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
612 }
5669
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
613 // append 'expand' filter, it fixes stride problems and renders osd:
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
614 sh_video->vfilter=vf_open_filter(sh_video->vfilter,"expand","-1:-1:-1:-1:1");
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
615 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
616
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
617 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
618 // Go through the codec.conf and find the best codec...
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
619 sh_video->inited=0;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
620 codecs_reset_selection(0);
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
621 if(video_codec){
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
622 // forced codec by name:
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
623 mp_msg(MSGT_CPLAYER,MSGL_INFO,"Forced video codec: %s\n",video_codec);
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
624 init_video(sh_video,video_codec,-1,-1);
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
625 } else {
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
626 int status;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
627 // try in stability order: UNTESTED, WORKING, BUGGY, BROKEN
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
628 if(video_family>=0) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_TryForceVideoFmt,video_family);
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
629 for(status=CODECS_STATUS__MAX;status>=CODECS_STATUS__MIN;--status){
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
630 if(video_family>=0) // try first the preferred codec family:
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
631 if(init_video(sh_video,NULL,video_family,status)) break;
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
632 if(init_video(sh_video,NULL,-1,status)) break;
4365
9e20866c3250 added better fourcc handling for lavc, exiting if no lavc video codec name specified
alex
parents: 4355
diff changeset
633 }
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
634 }
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
635 if(!sh_video->inited){
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
636 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindVideoCodec,sh_video->format);
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
637 mp_msg(MSGT_CPLAYER,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf"));
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
638 mencoder_exit(1,NULL);
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
639 }
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
640 mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s video codec: [%s] drv:%d prio:%d (%s)\n",
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
641 video_codec?mp_gettext("Forcing"):mp_gettext("Detected"),sh_video->codec->name,sh_video->codec->driver,sh_video->codec->priority!=-1?sh_video->codec->priority:0,sh_video->codec->info);
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
642 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
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
643
af1f8e2d693a added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents: 3563
diff changeset
644 }
af1f8e2d693a added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents: 3563
diff changeset
645
af1f8e2d693a added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents: 3563
diff changeset
646 /* 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
647 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
648 {
af1f8e2d693a added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents: 3563
diff changeset
649 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
650 force_fourcc[2], force_fourcc[3]);
af1f8e2d693a added libavcodec support (mjpeg,h263,rv10,mpeg1 codecs tested&working) and added -ffourcc option (force fourcc in ouput)
alex
parents: 3563
diff changeset
651 printf("Forcing output fourcc to %x [%.4s]\n",
4365
9e20866c3250 added better fourcc handling for lavc, exiting if no lavc video codec name specified
alex
parents: 4355
diff changeset
652 mux_v->bih->biCompression, (char *)&mux_v->bih->biCompression);
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
653 }
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
654
4370
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
655 if(demuxer->file_format!=DEMUXER_TYPE_AVI) pts_from_bps=0; // it must be 0 for mpeg/asf!
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
656
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
657 // ============= AUDIO ===============
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
658 if(sh_audio){
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
659
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
660 mux_a=aviwrite_new_stream(muxer,AVIWRITE_TYPE_AUDIO);
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
661
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
662 mux_a->buffer_size=0x100000; //16384;
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
663 mux_a->buffer=malloc(mux_a->buffer_size);
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
664
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
665 mux_a->source=sh_audio;
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
666
2661
11f4c2b2b70f -oac/-ovc (fake:))
arpi
parents: 2655
diff changeset
667 mux_a->codec=out_audio_codec;
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
668
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
669 switch(mux_a->codec){
3385
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
670 case ACODEC_COPY:
4369
b768f17c6d36 audio copy fix
arpi
parents: 4368
diff changeset
671 if (sh_audio->wf){
3385
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
672 mux_a->wf=sh_audio->wf;
4370
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
673 if(!sh_audio->i_bps) sh_audio->i_bps=mux_a->wf->nAvgBytesPerSec;
4369
b768f17c6d36 audio copy fix
arpi
parents: 4368
diff changeset
674 } else {
3385
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
675 mux_a->wf = malloc(sizeof(WAVEFORMATEX));
4370
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
676 mux_a->wf->nBlockAlign = 1; //mux_a->h.dwSampleSize;
4369
b768f17c6d36 audio copy fix
arpi
parents: 4368
diff changeset
677 mux_a->wf->wFormatTag = sh_audio->format;
3385
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
678 mux_a->wf->nChannels = sh_audio->channels;
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
679 mux_a->wf->nSamplesPerSec = sh_audio->samplerate;
4369
b768f17c6d36 audio copy fix
arpi
parents: 4368
diff changeset
680 mux_a->wf->nAvgBytesPerSec=sh_audio->i_bps; //mux_a->h.dwSampleSize*mux_a->wf->nSamplesPerSec;
3480
9943dbacb48e vcodec_raw added
alex
parents: 3385
diff changeset
681 mux_a->wf->wBitsPerSample = 16; // FIXME
3385
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
682 mux_a->wf->cbSize=0; // FIXME for l3codeca.acm
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
683 }
4370
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
684 if(sh_audio->audio.dwScale){
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
685 mux_a->h.dwSampleSize=sh_audio->audio.dwSampleSize;
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
686 mux_a->h.dwScale=sh_audio->audio.dwScale;
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
687 mux_a->h.dwRate=sh_audio->audio.dwRate;
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
688 } else {
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
689 mux_a->h.dwSampleSize=mux_a->wf->nBlockAlign;
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
690 mux_a->h.dwScale=mux_a->h.dwSampleSize;
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
691 mux_a->h.dwRate=mux_a->wf->nAvgBytesPerSec;
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
692 }
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
693 printf("audiocodec: framecopy (format=%x chans=%d rate=%d bits=%d bps=%d sample=%d)\n",
3385
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
694 mux_a->wf->wFormatTag, mux_a->wf->nChannels, mux_a->wf->nSamplesPerSec,
4370
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
695 mux_a->wf->wBitsPerSample, mux_a->wf->nAvgBytesPerSec, mux_a->h.dwSampleSize);
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
696 break;
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
697 case ACODEC_PCM:
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
698 printf("CBR PCM audio selected\n");
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
699 mux_a->h.dwSampleSize=2*sh_audio->channels;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
700 mux_a->h.dwScale=1;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
701 mux_a->h.dwRate=sh_audio->samplerate;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
702 mux_a->wf=malloc(sizeof(WAVEFORMATEX));
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
703 mux_a->wf->nBlockAlign=mux_a->h.dwSampleSize;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
704 mux_a->wf->wFormatTag=0x1; // PCM
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
705 mux_a->wf->nChannels=sh_audio->channels;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
706 mux_a->wf->nSamplesPerSec=sh_audio->samplerate;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
707 mux_a->wf->nAvgBytesPerSec=mux_a->h.dwSampleSize*mux_a->wf->nSamplesPerSec;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
708 mux_a->wf->wBitsPerSample=16;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
709 mux_a->wf->cbSize=0; // FIXME for l3codeca.acm
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
710 break;
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
711 case ACODEC_VBRMP3:
3385
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
712 printf("MP3 audio selected\n");
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
713 mux_a->h.dwSampleSize=0; // VBR
5685
a56c9404364e -srate for mp3 fixed
arpi
parents: 5673
diff changeset
714 mux_a->h.dwRate=force_srate?force_srate:sh_audio->samplerate;
a56c9404364e -srate for mp3 fixed
arpi
parents: 5673
diff changeset
715 mux_a->h.dwScale=(mux_a->h.dwRate<32000)?576:1152; // samples/frame
2635
c1e24e01601b fixed AVI header creation - now should be compatible with NaNdub
arpi
parents: 2627
diff changeset
716 if(sizeof(MPEGLAYER3WAVEFORMAT)!=30) mp_msg(MSGT_MENCODER,MSGL_WARN,"sizeof(MPEGLAYER3WAVEFORMAT)==%d!=30, maybe broken C compiler?\n",sizeof(MPEGLAYER3WAVEFORMAT));
c1e24e01601b fixed AVI header creation - now should be compatible with NaNdub
arpi
parents: 2627
diff changeset
717 mux_a->wf=malloc(sizeof(MPEGLAYER3WAVEFORMAT)); // should be 30
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
718 mux_a->wf->wFormatTag=0x55; // MP3
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
719 mux_a->wf->nChannels=sh_audio->channels;
2639
511f1983e0f0 -srate and -pp 0 fixes
arpi
parents: 2635
diff changeset
720 mux_a->wf->nSamplesPerSec=force_srate?force_srate:sh_audio->samplerate;
2635
c1e24e01601b fixed AVI header creation - now should be compatible with NaNdub
arpi
parents: 2627
diff changeset
721 mux_a->wf->nAvgBytesPerSec=192000/8; // FIXME!
5685
a56c9404364e -srate for mp3 fixed
arpi
parents: 5673
diff changeset
722 mux_a->wf->nBlockAlign=(mux_a->h.dwRate<32000)?576:1152; // requires for l3codeca.acm + WMP 6.4
2635
c1e24e01601b fixed AVI header creation - now should be compatible with NaNdub
arpi
parents: 2627
diff changeset
723 mux_a->wf->wBitsPerSample=0; //16;
c1e24e01601b fixed AVI header creation - now should be compatible with NaNdub
arpi
parents: 2627
diff changeset
724 // from NaNdub: (requires for l3codeca.acm)
c1e24e01601b fixed AVI header creation - now should be compatible with NaNdub
arpi
parents: 2627
diff changeset
725 mux_a->wf->cbSize=12;
c1e24e01601b fixed AVI header creation - now should be compatible with NaNdub
arpi
parents: 2627
diff changeset
726 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->wID=1;
c1e24e01601b fixed AVI header creation - now should be compatible with NaNdub
arpi
parents: 2627
diff changeset
727 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->fdwFlags=2;
5685
a56c9404364e -srate for mp3 fixed
arpi
parents: 5673
diff changeset
728 ((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
729 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nFramesPerBlock=1;
c1e24e01601b fixed AVI header creation - now should be compatible with NaNdub
arpi
parents: 2627
diff changeset
730 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nCodecDelay=0;
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
731 break;
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
732 }
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
733 }
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
734
2840
808fe0767cf8 fix typos - patch by Colin Marquardt <colin@marquardt-home.de>
pl
parents: 2825
diff changeset
735 printf("Writing AVI header...\n");
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
736 aviwrite_write_header(muxer,muxer_f);
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
737
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
738 decoded_frameno=0;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
739
2600
51a88ac2a602 nosound fixed?
arpi
parents: 2591
diff changeset
740 if(sh_audio)
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
741 switch(mux_a->codec){
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
742 #ifdef HAVE_MP3LAME
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
743 case ACODEC_VBRMP3:
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
744
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
745 lame=lame_init();
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
746 lame_set_bWriteVbrTag(lame,0);
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
747 lame_set_in_samplerate(lame,sh_audio->samplerate);
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
748 lame_set_num_channels(lame,mux_a->wf->nChannels);
2639
511f1983e0f0 -srate and -pp 0 fixes
arpi
parents: 2635
diff changeset
749 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
750 lame_set_quality(lame,lame_param_algqual); // 0 = best q
2626
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
751 if(lame_param_vbr){ // VBR:
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
752 lame_set_VBR(lame,lame_param_vbr); // vbr mode
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
753 lame_set_VBR_q(lame,lame_param_quality+1); // 1 = best vbr q 6=~128k
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
754 if(lame_param_br>0) lame_set_VBR_mean_bitrate_kbps(lame,lame_param_br);
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
755 } else { // CBR:
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
756 if(lame_param_br>0) lame_set_brate(lame,lame_param_br);
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
757 }
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
758 if(lame_param_mode>=0) lame_set_mode(lame,lame_param_mode); // j-st
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
759 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
760 if(lame_param_scale>0) {
48a0667742b9 volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents: 5685
diff changeset
761 printf("Setting audio input gain to %f\n", lame_param_scale);
48a0667742b9 volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents: 5685
diff changeset
762 lame_set_scale(lame,lame_param_scale);
48a0667742b9 volume setting with lame - patch by silicon@falcon.sch.bme.hu
arpi
parents: 5685
diff changeset
763 }
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
764 lame_init_params(lame);
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
765 if(verbose){
2626
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
766 lame_print_config(lame);
da9777831e1b divx4 and lame subconfig support
arpi
parents: 2622
diff changeset
767 lame_print_internals(lame);
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
768 }
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
769 break;
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
770 #endif
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
771 }
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
772
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
773 signal(SIGINT,exit_sighandler); // Interrupt from keyboard
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
774 signal(SIGQUIT,exit_sighandler); // Quit from keyboard
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
775 signal(SIGTERM,exit_sighandler); // kill
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
776
4387
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
777 timer_start=GetTimerMS();
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
778
4620
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
779 if (seek_to_sec) {
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
780 int a,b; float d;
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
781
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
782 if (sscanf(seek_to_sec, "%d:%d:%f", &a,&b,&d)==3)
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
783 d += 3600*a + 60*b;
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
784 else if (sscanf(seek_to_sec, "%d:%f", &a, &d)==2)
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
785 d += 60*a;
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
786 else
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
787 sscanf(seek_to_sec, "%f", &d);
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
788
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
789 demux_seek(demuxer, d, 1);
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
790 }
9ad42931f595 initial seeking (-ss) support in mencoder
rfelker
parents: 4575
diff changeset
791
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
792 if(tv_param_on == 1)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
793 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
794 fprintf(stderr,"Forcing audio preload to 0, max pts correction to 0\n");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
795 audio_preload = 0.0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
796 default_max_pts_correction = 0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
797 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
798
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
799 while(!eof){
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
800
2571
13608ff3d1e6 simplified
arpi
parents: 2531
diff changeset
801 float frame_time=0;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
802 int blit_frame=0;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
803 float a_pts=0;
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
804 float v_pts=0;
2574
arpi
parents: 2571
diff changeset
805 unsigned char* start=NULL;
arpi
parents: 2571
diff changeset
806 int in_size;
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
807 int skip_flag=0; // 1=skip -1=duplicate
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
808
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
809 if((end_at_type == END_AT_SIZE && end_at <= ftello(muxer_f)) ||
4159
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
810 (end_at_type == END_AT_TIME && end_at < sh_video->timer))
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
811 break;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
812
2643
9d0a638e211a divx4 2-pass support, -frames option
arpi
parents: 2639
diff changeset
813 if(play_n_frames>=0){
9d0a638e211a divx4 2-pass support, -frames option
arpi
parents: 2639
diff changeset
814 --play_n_frames;
9d0a638e211a divx4 2-pass support, -frames option
arpi
parents: 2639
diff changeset
815 if(play_n_frames<0) break;
9d0a638e211a divx4 2-pass support, -frames option
arpi
parents: 2639
diff changeset
816 }
9d0a638e211a divx4 2-pass support, -frames option
arpi
parents: 2639
diff changeset
817
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
818 if(sh_audio){
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
819 // get audio:
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
820 while(mux_a->timer-audio_preload<mux_v->timer){
2653
a863a97f3a1c WMP compatibility fixed
arpi
parents: 2643
diff changeset
821 int len=0;
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
822
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
823 ptimer_start = GetTimerMS();
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
824
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
825 if(mux_a->h.dwSampleSize){
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
826 // CBR - copy 0.5 sec of audio
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
827 switch(mux_a->codec){
3385
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
828 case ACODEC_COPY: // copy
4370
18f73fb0380e more audiocopy fixes (especially for .asf)
arpi
parents: 4369
diff changeset
829 len=mux_a->wf->nAvgBytesPerSec/2;
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
830 len/=mux_a->h.dwSampleSize;if(len<1) len=1;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
831 len*=mux_a->h.dwSampleSize;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
832 len=demux_read_data(sh_audio->ds,mux_a->buffer,len);
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
833 break;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
834 case ACODEC_PCM:
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
835 len=mux_a->h.dwSampleSize*(mux_a->h.dwRate/2);
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
836 len=dec_audio(sh_audio,mux_a->buffer,len);
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
837 break;
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
838 }
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
839 } else {
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
840 // VBR - encode/copy an audio frame
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
841 switch(mux_a->codec){
3385
6975a75a47fb fixed cbr audiocopy (if no sh_audio->wf)
alex
parents: 3384
diff changeset
842 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
843 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
844 // printf("VBR audio framecopy not yet implemented!\n");
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
845 break;
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
846 #ifdef HAVE_MP3LAME
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
847 case ACODEC_VBRMP3:
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
848 while(mux_a->buffer_len<4){
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
849 unsigned char tmp[2304];
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
850 int len=dec_audio(sh_audio,tmp,2304);
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
851 if(len<=0) break; // eof
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
852 len=lame_encode_buffer_interleaved(lame,
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
853 tmp,len/4,
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
854 mux_a->buffer+mux_a->buffer_len,mux_a->buffer_size-mux_a->buffer_len);
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
855 if(len<0) break; // error
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
856 mux_a->buffer_len+=len;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
857 }
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
858 if(mux_a->buffer_len<4) break;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
859 len=mp_decode_mp3_header(mux_a->buffer);
2639
511f1983e0f0 -srate and -pp 0 fixes
arpi
parents: 2635
diff changeset
860 //printf("%d\n",len);
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
861 if(len<=0) break; // bad frame!
5685
a56c9404364e -srate for mp3 fixed
arpi
parents: 5673
diff changeset
862 // printf("[%d]\n",mp_mp3_get_lsf(mux_a->buffer));
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
863 while(mux_a->buffer_len<len){
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
864 unsigned char tmp[2304];
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
865 int len=dec_audio(sh_audio,tmp,2304);
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
866 if(len<=0) break; // eof
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
867 len=lame_encode_buffer_interleaved(lame,
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
868 tmp,len/4,
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
869 mux_a->buffer+mux_a->buffer_len,mux_a->buffer_size-mux_a->buffer_len);
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
870 if(len<0) break; // error
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
871 mux_a->buffer_len+=len;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
872 }
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
873 break;
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
874 #endif
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
875 }
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
876 }
2583
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
877 if(len<=0) break; // EOF?
3dce775d82cb PCM audio
arpi
parents: 2581
diff changeset
878 aviwrite_write_chunk(muxer,mux_a,muxer_f,len,0);
2655
40fbed77bbb8 avg bps calc fixed
arpi
parents: 2653
diff changeset
879 if(!mux_a->h.dwSampleSize && mux_a->timer>0)
3354
c68f5da1c61c Using CBR stream format for CBR mp3 audio
arpi
parents: 3323
diff changeset
880 mux_a->wf->nAvgBytesPerSec=0.5f+(double)mux_a->size/mux_a->timer; // avg bps (VBR)
2591
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
881 if(mux_a->buffer_len>=len){
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
882 mux_a->buffer_len-=len;
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
883 memcpy(mux_a->buffer,mux_a->buffer+len,mux_a->buffer_len);
f4b01c45b1ea libmp3lame vbr mp3 support
arpi
parents: 2583
diff changeset
884 }
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
885
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
886
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
887 audiosamples++;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
888 audiorate+= (GetTimerMS() - ptimer_start);
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
889 }
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
890 }
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
891
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
892 // get video frame!
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
893
2581
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
894 in_size=video_read_frame(sh_video,&frame_time,&start,force_fps);
e94a20dec331 avi audio stream copy support
arpi
parents: 2577
diff changeset
895 if(in_size<0){ eof=1; break; }
3361
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
896 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
897
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
898 v_timer_corr-=frame_time-(float)mux_v->h.dwScale/mux_v->h.dwRate;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
899
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
900 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
901 // find our frame:
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
902 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
903 int* start;
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
904 int len=ds_get_packet(demuxer2->video,(unsigned char**) &start);
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
905 if(len<0){ eof=1;break;}
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
906 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
907 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
908 }
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
909 if(eof) break;
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
910 // 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
911 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
912 // find next frame:
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
913 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
914 int* start;
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
915 int len=ds_get_packet(demuxer2->video,(unsigned char**) &start);
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
916 if(len<0){ eof=1;break;}
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
917 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
918 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
919 }
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
920 // if(eof) break;
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
921 // 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
922 } else {
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
923
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
924 // check frame duplicate/drop:
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
925
5629
9b422f216fb5 -skiplimit/-noskip options to disable fps correction
arpi
parents: 5626
diff changeset
926 if(v_timer_corr>=(float)mux_v->h.dwScale/mux_v->h.dwRate &&
9b422f216fb5 -skiplimit/-noskip options to disable fps correction
arpi
parents: 5626
diff changeset
927 (skip_limit<0 || skip_flag<skip_limit) ){
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
928 v_timer_corr-=(float)mux_v->h.dwScale/mux_v->h.dwRate;
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
929 ++skip_flag; // skip
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
930 } else
5629
9b422f216fb5 -skiplimit/-noskip options to disable fps correction
arpi
parents: 5626
diff changeset
931 while(v_timer_corr<=-(float)mux_v->h.dwScale/mux_v->h.dwRate &&
9b422f216fb5 -skiplimit/-noskip options to disable fps correction
arpi
parents: 5626
diff changeset
932 (skip_limit<0 || (-skip_flag)<skip_limit) ){
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
933 v_timer_corr+=(float)mux_v->h.dwScale/mux_v->h.dwRate;
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
934 --skip_flag; // dup
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
935 }
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
936
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
937 while( (v_pts_corr<=-(float)mux_v->h.dwScale/mux_v->h.dwRate && skip_flag>0)
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
938 || (v_pts_corr<=-2*(float)mux_v->h.dwScale/mux_v->h.dwRate) ){
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
939 v_pts_corr+=(float)mux_v->h.dwScale/mux_v->h.dwRate;
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
940 --skip_flag; // dup
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
941 }
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
942 if( (v_pts_corr>=(float)mux_v->h.dwScale/mux_v->h.dwRate && skip_flag<0)
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
943 || (v_pts_corr>=2*(float)mux_v->h.dwScale/mux_v->h.dwRate) )
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
944 if(skip_flag<=0){ // we can't skip more than 1 frame now
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
945 v_pts_corr-=(float)mux_v->h.dwScale/mux_v->h.dwRate;
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
946 ++skip_flag; // skip
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
947 }
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
948
4367
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
949 } // demuxer2
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
950
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
951 ptimer_start = GetTimerMS();
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
952
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
953 switch(mux_v->codec){
3384
cff2875ad6e6 fixed framecopy
alex
parents: 3378
diff changeset
954 case VCODEC_COPY:
2574
arpi
parents: 2571
diff changeset
955 mux_v->buffer=start;
2639
511f1983e0f0 -srate and -pp 0 fixes
arpi
parents: 2635
diff changeset
956 if(skip_flag<=0) aviwrite_write_chunk(muxer,mux_v,muxer_f,in_size,(sh_video->ds->flags&1)?0x10:0);
2574
arpi
parents: 2571
diff changeset
957 break;
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
958 case VCODEC_FRAMENO:
3361
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
959 mux_v->buffer=&decoded_frameno; // tricky
3363
1459912caea5 set all frames to keyframes for -ovc frameno - allow seeking in resulting audio-only avi
arpi
parents: 3362
diff changeset
960 if(skip_flag<=0) aviwrite_write_chunk(muxer,mux_v,muxer_f,sizeof(int),0x10);
4575
0245a06f9efd VfW encoding support (very alpha yet)
arpi
parents: 4557
diff changeset
961 break;
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
962 default:
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
963 // decode_video will callback down to ve_*.c encoders, through the video filters
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
964 blit_frame=decode_video(sh_video,start,in_size,(skip_flag>0)?1:0);
2639
511f1983e0f0 -srate and -pp 0 fixes
arpi
parents: 2635
diff changeset
965 if(skip_flag>0) break;
5553
38697931adf4 video codecs moved to libmpencoders, crop/scale removed, use -vop for that
arpi
parents: 5546
diff changeset
966 if(!blit_frame) aviwrite_write_chunk(muxer,mux_v,muxer_f,0,0); // empty.
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
967 }
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
968
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
969 videosamples++;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
970 videorate+=(GetTimerMS() - ptimer_start);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
971
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
972 if(skip_flag<0){
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
973 // duplicate frame
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
974 if(!tv_param_on && !verbose) printf("\nduplicate %d frame(s)!!! \n",-skip_flag);
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
975 while(skip_flag<0){
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
976 duplicatedframes++;
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
977 aviwrite_write_chunk(muxer,mux_v,muxer_f,0,0);
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
978 ++skip_flag;
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
979 }
2639
511f1983e0f0 -srate and -pp 0 fixes
arpi
parents: 2635
diff changeset
980 } else
511f1983e0f0 -srate and -pp 0 fixes
arpi
parents: 2635
diff changeset
981 if(skip_flag>0){
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
982 // skip frame
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
983 if(!tv_param_on && !verbose) printf("\nskip frame!!! \n");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
984 skippedframes++;
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
985 --skip_flag;
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
986 }
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
987
4367
c2be4fb65cee 3-pass encoding support (reads frame skip/dup control and audio stream from frameno.avi)
arpi
parents: 4365
diff changeset
988 if(sh_audio && !demuxer2){
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
989 float AV_delay,x;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
990 // A-V sync!
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
991 if(pts_from_bps){
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
992 unsigned int samples=(sh_audio->audio.dwSampleSize)?
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
993 ((ds_tell(d_audio)-sh_audio->a_in_buffer_len)/sh_audio->audio.dwSampleSize) :
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
994 (d_audio->pack_no); // <- used for VBR audio
4378
9cf9516e74cb debug printfs... - 10l
arpi
parents: 4377
diff changeset
995 // printf("samples=%d \n",samples);
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
996 a_pts=samples*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
997 delay_corrected=1;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
998 } else {
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
999 // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec)
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1000 a_pts=d_audio->pts;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1001 if(!delay_corrected) if(a_pts) delay_corrected=1;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1002 //printf("*** %5.3f ***\n",a_pts);
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1003 a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1004 }
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1005 v_pts=d_video->pts;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1006 // av = compensated (with out buffering delay) A-V diff
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
1007 AV_delay=(a_pts-v_pts); AV_delay-=mux_a->timer-(mux_v->timer-(v_timer_corr+v_pts_corr));
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1008 // compensate input video timer by av:
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1009 x=AV_delay*0.1f;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1010 if(x<-max_pts_correction) x=-max_pts_correction; else
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1011 if(x> max_pts_correction) x= max_pts_correction;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1012 if(default_max_pts_correction>=0)
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1013 max_pts_correction=default_max_pts_correction;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1014 else
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1015 max_pts_correction=sh_video->frametime*0.10; // +-10% of time
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1016 // sh_video->timer-=x;
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1017 c_total+=x;
2613
156efe748b3d new A-V sync correction and fps conversion stuff
arpi
parents: 2605
diff changeset
1018 v_pts_corr+=x;
4387
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1019 }
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1020
4387
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1021 // printf("A:%6.1f V:%6.1f A-V:%7.3f oAV:%7.3f diff:%7.3f ct:%7.3f vpc:%7.3f \r",
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1022 // a_pts,v_pts,a_pts-v_pts,
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1023 // (float)(mux_a->timer-mux_v->timer),
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1024 // AV_delay, c_total, v_pts_corr );
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1025 // printf("V:%6.1f \r", d_video->pts );
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1026
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1027 #if 0
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1028 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",
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1029 a_pts,v_pts,a_pts-v_pts,c_total,
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1030 (int)sh_video->num_frames,(int)sh_video->num_frames_decoded,
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1031 (sh_video->timer>0.5)?(int)(100.0*video_time_usage/(double)sh_video->timer):0,
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1032 (sh_video->timer>0.5)?(int)(100.0*vout_time_usage/(double)sh_video->timer):0,
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1033 (sh_video->timer>0.5)?(100.0*audio_time_usage/(double)sh_video->timer):0
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1034 ,cache_fill_status
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1035 );
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1036 #endif
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1037
4387
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1038 { float t=(GetTimerMS()-timer_start)*0.001f;
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1039 float len=(demuxer->movi_end-demuxer->movi_start);
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1040 float p=len>1000 ? (float)(demuxer->filepos-demuxer->movi_start) / len : 0;
4393
177e31fc74eb ETA/Esize for 3pass encoding from stdin
arpi
parents: 4392
diff changeset
1041 if(!len && sh_audio && sh_audio->audio.dwLength>100){
177e31fc74eb ETA/Esize for 3pass encoding from stdin
arpi
parents: 4392
diff changeset
1042 p=(sh_audio->audio.dwSampleSize? ds_tell(sh_audio->ds)/sh_audio->audio.dwSampleSize : sh_audio->ds->pack_no)
177e31fc74eb ETA/Esize for 3pass encoding from stdin
arpi
parents: 4392
diff changeset
1043 / (float)(sh_audio->audio.dwLength);
177e31fc74eb ETA/Esize for 3pass encoding from stdin
arpi
parents: 4392
diff changeset
1044 }
4392
b50b2b0c65ea status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents: 4388
diff changeset
1045 #if 0
b50b2b0c65ea status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents: 4388
diff changeset
1046 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
1047 (int)demuxer->movi_start,
b50b2b0c65ea status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents: 4388
diff changeset
1048 (int)demuxer->filepos,
b50b2b0c65ea status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents: 4388
diff changeset
1049 (int)demuxer->movi_end);
b50b2b0c65ea status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents: 4388
diff changeset
1050 #else
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1051 if(verbose) {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1052 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/S %d/%d \r",
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1053 mux_v->timer, decoded_frameno, (int)(p*100),
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1054 (t>1) ? (int)(decoded_frameno/t) : 0,
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1055 (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
1056 (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
1057 v_pts_corr,
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1058 (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
1059 (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
1060 audiorate/audiosamples, videorate/videosamples,
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1061 duplicatedframes, skippedframes
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1062 );
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1063 } else
4394
e8b73a96b736 show actual video:audio bitrates at status line
arpi
parents: 4393
diff changeset
1064 mp_msg(MSGT_AVSYNC,MSGL_STATUS,"Pos:%6.1fs %6df (%2d%%) %3dfps Trem:%4dmin %3dmb A-V:%5.3f [%d:%d]\r",
4387
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1065 mux_v->timer, decoded_frameno, (int)(p*100),
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1066 (t>1) ? (int)(decoded_frameno/t) : 0,
4392
b50b2b0c65ea status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents: 4388
diff changeset
1067 (p>0.001) ? (int)((t/p-t)/60) : 0,
4387
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1068 (p>0.001) ? (int)(ftell(muxer_f)/p/1024/1024) : 0,
4394
e8b73a96b736 show actual video:audio bitrates at status line
arpi
parents: 4393
diff changeset
1069 v_pts_corr,
e8b73a96b736 show actual video:audio bitrates at status line
arpi
parents: 4393
diff changeset
1070 (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
1071 (mux_a && mux_a->timer>1) ? (int)(mux_a->size/mux_a->timer/125) : 0
4387
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1072 );
4392
b50b2b0c65ea status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents: 4388
diff changeset
1073 #endif
4387
df705351885a ETA/Esize/fps and some more... - new statusline
arpi
parents: 4378
diff changeset
1074 }
2605
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1075 fflush(stdout);
f629b154ecbf input A-V sync correction
arpi
parents: 2600
diff changeset
1076
5669
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1077 #ifdef USE_SUB
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1078 // find sub
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1079 if(subtitles && d_video->pts>0){
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1080 float pts=d_video->pts;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1081 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
1082 if (pts > sub_last_pts || pts < sub_last_pts-1.0 ) {
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1083 find_sub(subtitles,sub_uses_time?(100*(pts+sub_delay)):((pts+sub_delay)*sub_fps)); // FIXME! frame counter...
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1084 sub_last_pts = pts;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1085 }
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1086 }
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1087 #endif
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1088
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1089 #ifdef USE_DVDREAD
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1090 // DVD sub:
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1091 if(vo_spudec){
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1092 unsigned char* packet=NULL;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1093 int len;
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1094 while((len=ds_get_packet_sub(d_dvdsub,&packet))>0){
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1095 mp_msg(MSGT_MENCODER,MSGL_V,"\rDVD sub: len=%d v_pts=%5.3f s_pts=%5.3f \n",len,d_video->pts,d_dvdsub->pts);
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1096 spudec_assemble(vo_spudec,packet,len,90000*d_dvdsub->pts);
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1097 }
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1098 spudec_heartbeat(vo_spudec,90000*d_video->pts);
5670
bf171d329546 DVD subs fixed
arpi
parents: 5669
diff changeset
1099 vo_osd_changed(OSDTYPE_SPU);
5669
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1100 }
391931fa79a6 enabled new OSD code in -vop expand, subtitles rendering support to mencoder
arpi
parents: 5629
diff changeset
1101 #endif
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
1102
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
1103
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
1104 } // while(!eof)
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
1105
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
1106 #ifdef HAVE_MP3LAME
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
1107 // fixup CBR mp3 audio header:
3354
c68f5da1c61c Using CBR stream format for CBR mp3 audio
arpi
parents: 3323
diff changeset
1108 if(sh_audio && mux_a->codec==ACODEC_VBRMP3 && !lame_param_vbr){
c68f5da1c61c Using CBR stream format for CBR mp3 audio
arpi
parents: 3323
diff changeset
1109 mux_a->h.dwSampleSize=1;
5673
1186930949c0 cbr mp3 + wmp fixed (hopefully, untested)
arpi
parents: 5670
diff changeset
1110 ((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nBlockSize=
1186930949c0 cbr mp3 + wmp fixed (hopefully, untested)
arpi
parents: 5670
diff changeset
1111 (mux_a->size+(mux_a->h.dwLength>>1))/mux_a->h.dwLength;
1186930949c0 cbr mp3 + wmp fixed (hopefully, untested)
arpi
parents: 5670
diff changeset
1112 mux_a->h.dwLength=mux_a->size;
3354
c68f5da1c61c Using CBR stream format for CBR mp3 audio
arpi
parents: 3323
diff changeset
1113 mux_a->h.dwRate=mux_a->wf->nAvgBytesPerSec;
c68f5da1c61c Using CBR stream format for CBR mp3 audio
arpi
parents: 3323
diff changeset
1114 mux_a->h.dwScale=1;
5673
1186930949c0 cbr mp3 + wmp fixed (hopefully, untested)
arpi
parents: 5670
diff changeset
1115 mux_a->wf->nBlockAlign=1;
1186930949c0 cbr mp3 + wmp fixed (hopefully, untested)
arpi
parents: 5670
diff changeset
1116 printf("\n\nCBR audio: %d bytes/sec, %d bytes/block\n",
1186930949c0 cbr mp3 + wmp fixed (hopefully, untested)
arpi
parents: 5670
diff changeset
1117 mux_a->h.dwRate,((MPEGLAYER3WAVEFORMAT*)(mux_a->wf))->nBlockSize);
3354
c68f5da1c61c Using CBR stream format for CBR mp3 audio
arpi
parents: 3323
diff changeset
1118 }
3357
1fa5d7dda911 libmp3lame optional
arpi
parents: 3354
diff changeset
1119 #endif
3354
c68f5da1c61c Using CBR stream format for CBR mp3 audio
arpi
parents: 3323
diff changeset
1120
2840
808fe0767cf8 fix typos - patch by Colin Marquardt <colin@marquardt-home.de>
pl
parents: 2825
diff changeset
1121 printf("\nWriting AVI index...\n");
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
1122 aviwrite_write_index(muxer,muxer_f);
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1123 muxer_f_size=ftello(muxer_f);
2622
fb7220c79b69 verbose fixed
arpi
parents: 2618
diff changeset
1124 printf("Fixup AVI header...\n");
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
1125 fseek(muxer_f,0,SEEK_SET);
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
1126 aviwrite_write_header(muxer,muxer_f); // update header
4377
a7aa414b1bcf bitrate calculator fix?
arpi
parents: 4370
diff changeset
1127 fclose(muxer_f);
4368
fae96d93c662 bitrate calculator for 650/700 mb cdrom
arpi
parents: 4367
diff changeset
1128
fae96d93c662 bitrate calculator for 650/700 mb cdrom
arpi
parents: 4367
diff changeset
1129 if(out_video_codec==VCODEC_FRAMENO && mux_v->timer>100){
4392
b50b2b0c65ea status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents: 4388
diff changeset
1130 printf("Recommended video bitrate for 650MB CD: %d\n",(int)((650*1024*1024-muxer_f_size)/mux_v->timer/125));
b50b2b0c65ea status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents: 4388
diff changeset
1131 printf("Recommended video bitrate for 700MB CD: %d\n",(int)((700*1024*1024-muxer_f_size)/mux_v->timer/125));
b50b2b0c65ea status print fixes - DVD estimation worx, print remaining time instead of total
arpi
parents: 4388
diff changeset
1132 printf("Recommended video bitrate for 800MB CD: %d\n",(int)((800*1024*1024-muxer_f_size)/mux_v->timer/125));
4368
fae96d93c662 bitrate calculator for 650/700 mb cdrom
arpi
parents: 4367
diff changeset
1133 }
fae96d93c662 bitrate calculator for 650/700 mb cdrom
arpi
parents: 4367
diff changeset
1134
4355
4167864cfb0a Add -nosound/-sound and -ovc null to mencoder.
kmkaplan
parents: 4343
diff changeset
1135 printf("\nVideo stream: %8.3f kbit/s (%d bps) size: %d bytes %5.3f secs %d frames\n",
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1136 (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
1137 if(sh_audio)
5d70491f438c new video codec: frameno (just the number of frame - for 3-pass encoding)
arpi
parents: 3357
diff changeset
1138 printf("\nAudio stream: %8.3f kbit/s (%d bps) size: %d bytes %5.3f secs\n",
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5569
diff changeset
1139 (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
1140
2618
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
1141 if(stream) free_stream(stream); // kill cache thread
47a338888698 mencoder commandline handling
arpi
parents: 2613
diff changeset
1142
3320
ac8b70dd5e45 use return 1; if interrupted - patch by Artur Skawina <skawina@geocities.com>
arpi
parents: 3240
diff changeset
1143 return interrupted;
2531
cf6a236b2d00 very alpha code - needs Makefile modifications to compile
arpi
parents:
diff changeset
1144 }
4159
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1145
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1146 static int parse_end_at(struct config *conf, const char* param)
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1147 {
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1148 int i;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1149
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1150 end_at_type = END_AT_NONE;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1151
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1152 /* End at size parsing */
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1153 {
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1154 char unit[4];
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1155
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1156 end_at_type = END_AT_SIZE;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1157
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1158 if(sscanf(param, "%d%3s", &end_at, unit) == 2) {
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1159 if(!strcasecmp(unit, "b"))
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1160 ;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1161 else if(!strcasecmp(unit, "kb"))
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1162 end_at *= 1024;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1163 else if(!strcasecmp(unit, "mb"))
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1164 end_at *= 1024*1024;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1165 else
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1166 end_at_type = END_AT_NONE;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1167 }
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1168 else
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1169 end_at_type = END_AT_NONE;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1170 }
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1171
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1172 /* 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
1173 * sscanf("%f", ...) below */
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1174 if(end_at_type == END_AT_NONE)
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1175 {
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1176 int a,b; float d;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1177
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1178 end_at_type = END_AT_TIME;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1179
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1180 if (sscanf(param, "%d:%d:%f", &a, &b, &d) == 3)
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1181 end_at = 3600*a + 60*b + d;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1182 else if (sscanf(param, "%d:%f", &a, &d) == 2)
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1183 end_at = 60*a + d;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1184 else if (sscanf(param, "%f", &d) == 1)
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1185 end_at = d;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1186 else
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1187 end_at_type = END_AT_NONE;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1188 }
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1189
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1190 if(end_at_type == END_AT_NONE)
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1191 return ERR_FUNC_ERR;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1192
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1193 return 1;
42fec596fe7c -endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4156
diff changeset
1194 }
4427
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1195
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1196 /* 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
1197 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
1198 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
1199 int height)
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1200 {
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1201 uint8_t* tmp = malloc(width);
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1202 int i;
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1203
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1204 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
1205 memcpy(tmp, &src[i*width], width);
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1206 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
1207 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
1208 }
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1209
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1210 free(tmp);
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1211 return dst;
6310422b9557 new video format: yuvrgb. patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4408
diff changeset
1212 }
5270
870e932096ff Support for cropping in mencoder. New options:
ksorim
parents: 5223
diff changeset
1213