annotate mplayer.c @ 1334:061cabfbc07b

some more cleanup
author arpi
date Mon, 16 Jul 2001 17:07:13 +0000
parents b4457de47804
children 345585097137
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1237
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1 // AVI & MPEG Player v0.18 (C) 2000-2001. by A'rpi/ESP-team
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4 #include <stdlib.h>
109
ed4178146cc5 small code cleanup, removed unused variables
arpi_esp
parents: 103
diff changeset
5 #include <string.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 #include <signal.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 #include <sys/ioctl.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 #include <unistd.h>
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
11 #include <time.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 #include <sys/mman.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 #include <sys/types.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 #include <sys/wait.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16 #include <sys/time.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 #include <sys/stat.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 #include <fcntl.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 #include "version.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21 #include "config.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
23 #ifdef __FreeBSD__
1177
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1156
diff changeset
24 #include <sys/cdrio.h>
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
25 #endif
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
26
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
27 #ifdef sun
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
28 #define DEFAULT_CDROM_DEVICE "/vol/dev/aliases/cdrom0"
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
29 #else
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
30 #define DEFAULT_CDROM_DEVICE "/dev/cdrom"
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
31 #endif
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
32
147
0a0d7dd8fb51 new command line/config file parser
szabii
parents: 117
diff changeset
33 #include "cfgparser.h"
151
9708d4b2765b cfgparser fix
szabii
parents: 150
diff changeset
34 #include "cfg-mplayer-def.h"
147
0a0d7dd8fb51 new command line/config file parser
szabii
parents: 117
diff changeset
35
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
36 #include "subreader.h"
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
37
36
846535ace7a2 libmpeg2-0.2.0 merge
arpi_esp
parents: 33
diff changeset
38 #include "libvo/video_out.h"
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
39 #include "libvo/sub.h"
36
846535ace7a2 libmpeg2-0.2.0 merge
arpi_esp
parents: 33
diff changeset
40
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
41 #include "libao2/audio_out.h"
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
42
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 #include "libmpeg2/mpeg2.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 #include "libmpeg2/mpeg2_internal.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46 #include "loader.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 #include "wine/avifmt.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
49 #include "codec-cfg.h"
175
d43c7e6412f0 added DirectShow support
arpi_esp
parents: 162
diff changeset
50
492
888a85621f50 preliminary DVD support using libcss
lgb
parents: 487
diff changeset
51 #include "dvdauth.h"
560
28ae99036574 Separated dvdsub code to be able to work with it easier
lgb
parents: 557
diff changeset
52 #include "spudec.h"
492
888a85621f50 preliminary DVD support using libcss
lgb
parents: 487
diff changeset
53
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54 extern char* win32_codec_name; // must be set before calling DrvOpen() !!!
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 #include "linux/getch2.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57 #include "linux/keycodes.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58 #include "linux/timer.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 #include "linux/shmem.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61 #ifdef HAVE_LIRC
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 #include "lirc_mp.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 #include "help_mp.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66
842
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
67 #ifdef STREAMING
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
68 #include "url.h"
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
69 #include "network.h"
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
70 static URL_t* url;
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
71 #endif
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
72
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
73
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74 #define DEBUG if(0)
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
75 #ifdef HAVE_GUI
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
76 int nogui=1;
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
77 #endif
362
463699f15eb4 static removed from verbose definition
szabii
parents: 360
diff changeset
78 int verbose=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
80 #define ABS(x) (((x)>=0)?(x):(-(x)))
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
81
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
82 void find_sub(subtitle* subtitles,int key);
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
83
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
84 static int
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
85 usec_sleep(int usec_delay)
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
86 {
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
87 #if 1
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
88 struct timespec ts;
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
89 ts.tv_sec = usec_delay / 1000000;
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
90 ts.tv_nsec = (usec_delay % 1000000) * 1000;
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
91 return nanosleep(&ts, NULL);
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
92 #else
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
93 return usleep(usec_delay);
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
94 #endif
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
95 }
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
96
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
97 //**************************************************************************//
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
98 // Config file
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
99 //**************************************************************************//
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
100
153
8e55121885b2 new configfile/cmdline parser
arpi_esp
parents: 151
diff changeset
101 static int cfg_inc_verbose(struct config *conf){
8e55121885b2 new configfile/cmdline parser
arpi_esp
parents: 151
diff changeset
102 ++verbose;
8e55121885b2 new configfile/cmdline parser
arpi_esp
parents: 151
diff changeset
103 return 0;
8e55121885b2 new configfile/cmdline parser
arpi_esp
parents: 151
diff changeset
104 }
8e55121885b2 new configfile/cmdline parser
arpi_esp
parents: 151
diff changeset
105
162
effc62af528c new option: -include
szabii
parents: 154
diff changeset
106 static int cfg_include(struct config *conf, char *filename){
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
107 return parse_config_file(conf, filename);
162
effc62af528c new option: -include
szabii
parents: 154
diff changeset
108 }
effc62af528c new option: -include
szabii
parents: 154
diff changeset
109
178
55206b791586 get_path()
szabii
parents: 175
diff changeset
110 char *get_path(char *filename){
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
111 char *homedir;
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
112 char *buff;
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
113 static char *config_dir = "/.mplayer";
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
114 int len;
178
55206b791586 get_path()
szabii
parents: 175
diff changeset
115
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
116 if ((homedir = getenv("HOME")) == NULL)
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
117 return NULL;
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
118 len = strlen(homedir) + strlen(config_dir) + 1;
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
119 if (filename == NULL) {
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
120 if ((buff = (char *) malloc(len)) == NULL)
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
121 return NULL;
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
122 sprintf(buff, "%s%s", homedir, config_dir);
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
123 } else {
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
124 len += strlen(filename) + 1;
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
125 if ((buff = (char *) malloc(len)) == NULL)
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
126 return NULL;
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
127 sprintf(buff, "%s%s/%s", homedir, config_dir, filename);
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
128 }
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
129 return buff;
178
55206b791586 get_path()
szabii
parents: 175
diff changeset
130 }
55206b791586 get_path()
szabii
parents: 175
diff changeset
131
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
132 //**************************************************************************//
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
133 //**************************************************************************//
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
134 // Input media streaming & demultiplexer:
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
135 //**************************************************************************//
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
136
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
137 static int max_framesize=0;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
138
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 577
diff changeset
139 #include "stream.h"
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
140 #include "demuxer.h"
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
141
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
142 #include "stheader.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
144 static int avi_bitrate=0;
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
145
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
146 sh_audio_t* new_sh_audio(demuxer_t *demuxer,int id){
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
147 if(demuxer->a_streams[id]){
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
148 printf("Warning! Audio stream header %d redefined!\n",id);
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
149 } else {
500
c2b3a1f340c8 MPEG-ES segfault fixed, stream list printfs moved v 1->0
arpi_esp
parents: 495
diff changeset
150 printf("==> Found audio stream: %d\n",id);
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
151 demuxer->a_streams[id]=malloc(sizeof(sh_audio_t));
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
152 memset(demuxer->a_streams[id],0,sizeof(sh_audio_t));
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
153 }
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
154 return demuxer->a_streams[id];
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
155 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
156
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
157 sh_video_t* new_sh_video(demuxer_t *demuxer,int id){
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
158 if(demuxer->v_streams[id]){
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
159 printf("Warning! video stream header %d redefined!\n",id);
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
160 } else {
500
c2b3a1f340c8 MPEG-ES segfault fixed, stream list printfs moved v 1->0
arpi_esp
parents: 495
diff changeset
161 printf("==> Found video stream: %d\n",id);
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
162 demuxer->v_streams[id]=malloc(sizeof(sh_video_t));
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
163 memset(demuxer->v_streams[id],0,sizeof(sh_video_t));
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
164 }
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
165 return demuxer->v_streams[id];
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
166 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
168 char* encode_name=NULL;
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
169 char* encode_index_name=NULL;
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
170 int encode_bitrate=0;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 273
diff changeset
171
1015
9744b50fe87f some cleanup, old unused stuff removed
arpi_esp
parents: 1014
diff changeset
172 extern int asf_packetsize; // for seeking
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
173
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
174 extern float avi_audio_pts;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
175 extern float avi_video_pts;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
176 extern float avi_video_ftime;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
177 extern int skip_video_frames;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
178
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
179 void read_avi_header(demuxer_t *demuxer,int index_mode);
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
180 demux_stream_t* demux_avi_select_stream(demuxer_t *demux,unsigned int id);
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
181
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
182 int asf_check_header(demuxer_t *demuxer);
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
183 int read_asf_header(demuxer_t *demuxer);
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
184
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 // MPEG video stream parser:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 #include "parse_es.c"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187
1015
9744b50fe87f some cleanup, old unused stuff removed
arpi_esp
parents: 1014
diff changeset
188 extern int num_elementary_packets100; // for MPEG-ES fileformat detection
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
189 extern int num_elementary_packets101;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
190
1015
9744b50fe87f some cleanup, old unused stuff removed
arpi_esp
parents: 1014
diff changeset
191 extern picture_t *picture; // exported from libmpeg2/decode.c
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
192
112
b69d29c06b3f code cleanup around codecctrl
arpi_esp
parents: 111
diff changeset
193 static const int frameratecode2framerate[16] = {
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
194 0,
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
195 // Official mpeg1/2 framerates:
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
196 24000*10000/1001, 24*10000,25*10000, 30000*10000/1001, 30*10000,50*10000,60000*10000/1001, 60*10000,
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
197 // libmpeg3's "Unofficial economy rates":
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
198 1*10000,5*10000,10*10000,12*10000,15*10000,0,0
112
b69d29c06b3f code cleanup around codecctrl
arpi_esp
parents: 111
diff changeset
199 };
b69d29c06b3f code cleanup around codecctrl
arpi_esp
parents: 111
diff changeset
200
111
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
201 //**************************************************************************//
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 //**************************************************************************//
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203
112
b69d29c06b3f code cleanup around codecctrl
arpi_esp
parents: 111
diff changeset
204 // Common FIFO functions, and keyboard/event FIFO code
b69d29c06b3f code cleanup around codecctrl
arpi_esp
parents: 111
diff changeset
205 #include "fifo.c"
b69d29c06b3f code cleanup around codecctrl
arpi_esp
parents: 111
diff changeset
206
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207 //**************************************************************************//
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209 static vo_functions_t *video_out=NULL;
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
210 static ao_functions_t *audio_out=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
211
1291
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
212 double video_time_usage=0;
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
213 double vout_time_usage=0;
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
214 static double audio_time_usage=0;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
215 static int total_time_usage_start=0;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
216 static int benchmark=0;
1124
0e95f30ffd4c -frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents: 1059
diff changeset
217
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
218 static int play_in_bg=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
219
606
0b1f9eda1ea6 warnings killed
szabii
parents: 598
diff changeset
220 extern void avi_fixate();
0b1f9eda1ea6 warnings killed
szabii
parents: 598
diff changeset
221
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
222 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
223 #include "../Gui/mplayer/psignal.h"
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
224 #define GUI_MSG(x) if ( !nogui ) { mplSendMessage( x ); usec_sleep( 10000 ); }
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
225 #else
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
226 #define GUI_MSG(x)
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
227 #endif
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
228
1014
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
229 // options:
1015
9744b50fe87f some cleanup, old unused stuff removed
arpi_esp
parents: 1014
diff changeset
230 int osd_level=2;
1014
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
231 int divx_quality=0;
937
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
232 char *seek_to_sec=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 int seek_to_byte=0;
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
234 int has_audio=1;
1286
543a94b241a2 Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents: 1285
diff changeset
235 char *audio_codec=NULL; // override audio codec
543a94b241a2 Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents: 1285
diff changeset
236 char *video_codec=NULL; // override video codec
1299
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
237 int audio_family=-1; // override audio codec family
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
238 int video_family=-1; // override video codec family
1285
202d9e2dc202 -vcodec option (maybe some other name would be better though) to select between driver types without editing codecs.conf. mplayer will default to normal codec search loop if it does not find codec for the specified driver type. config range checking for the parameter (an integer) should be cleaned, IMHO
lgb
parents: 1255
diff changeset
239
1299
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
240 // IMHO this stuff is no longer of use, or is there a special
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
241 // reason why dshow should be completely disabled? - atmos ::
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1302
diff changeset
242 // yes, people without working c++ compiler can disable it - A'rpi
626
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
243 #ifdef USE_DIRECTSHOW
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
244 int allow_dshow=1;
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
245 #else
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
246 int allow_dshow=0;
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
247 #endif
1014
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
248
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
249 //#ifdef ALSA_TIMER
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
250 //int alsa=1;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
251 //#else
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
252 //int alsa=0;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
253 //#endif
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
254
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
255 // streaming:
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
256 int audio_id=-1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
257 int video_id=-1;
552
c2a449f90087 dvd sub support reading
arpi_esp
parents: 549
diff changeset
258 int dvdsub_id=-1;
1014
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
259 int vcd_track=0;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
260 char *stream_dump_name=NULL;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
261 int stream_dump_type=0;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
262 int index_mode=-1; // -1=untouched 0=don't use index 1=use (geneate) index
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
263 int force_ni=0;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
264
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
265 float default_max_pts_correction=-1;//0.01f;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266 #ifdef AVI_SYNC_BPS
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267 int pts_from_bps=1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
268 #else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269 int pts_from_bps=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270 #endif
1014
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
271
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
272 float force_fps=0;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
273 int force_srate=0;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
274 float audio_delay=0;
798
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
275 int frame_dropping=0; // option 0=no drop 1= drop vo 2= drop decode
1124
0e95f30ffd4c -frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents: 1059
diff changeset
276 int play_n_frames=-1;
1014
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
277
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
278 // screen info:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
279 char* video_driver=NULL; //"mga"; // default
956
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
280 char* audio_driver=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
281 int fullscreen=0;
208
ae0f909ccc7c Adds code to deal with vidmode selection. -- mgraffam
mgraffam
parents: 190
diff changeset
282 int vidmode=0;
337
3ca0b1b739a5 changed fs+vm+zoom flags for libvo
arpi_esp
parents: 332
diff changeset
283 int softzoom=0;
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
284 int flip=-1;
337
3ca0b1b739a5 changed fs+vm+zoom flags for libvo
arpi_esp
parents: 332
diff changeset
285 int screen_size_x=0;//SCREEN_SIZE_X;
3ca0b1b739a5 changed fs+vm+zoom flags for libvo
arpi_esp
parents: 332
diff changeset
286 int screen_size_y=0;//SCREEN_SIZE_Y;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
287 int screen_size_xy=0;
1014
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
288
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
289 // sub:
212
7034ef1f685d new option: -font
arpi_esp
parents: 208
diff changeset
290 char *font_name=NULL;
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 212
diff changeset
291 float font_factor=0.75;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
292 char *sub_name=NULL;
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
293 float sub_delay=0;
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
294 float sub_fps=0;
510
2951d138ddaf add sub autoread & remove 'c' key
pontscho
parents: 500
diff changeset
295 int sub_auto = 1;
1255
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
296 /*DSP!!char *dsp=NULL;*/
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
297
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
298 float rel_seek_secs=0;
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
299
1183
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
300 extern char *vo_subdevice;
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
301 extern char *ao_subdevice;
1156
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
302
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
303 void exit_player(char* how){
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
304 total_time_usage_start=GetTimer()-total_time_usage_start;
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
305
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
306 #ifdef HAVE_GUI
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
307 if ( !nogui )
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
308 {
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
309 if ( how != NULL )
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
310 {
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
311 if ( !strcmp( how,"Quit" ) ) mplSendMessage( mplEndOfFile );
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
312 if ( !strcmp( how,"End of file" ) ) mplSendMessage( mplEndOfFile );
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
313 if ( !strcmp( how,"audio_init" ) ) mplSendMessage( mplAudioError );
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
314 }
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
315 else mplSendMessage( mplUnknowError );
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
316 }
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
317 #endif
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
318
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
319 if(how) printf("\nExiting... (%s)\n",how);
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
320 if(verbose) printf("max framesize was %d bytes\n",max_framesize);
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
321 if(benchmark){
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
322 double tot=video_time_usage+vout_time_usage+audio_time_usage;
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
323 double total_time_usage=(float)total_time_usage_start*0.000001;
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
324 printf("BENCHMARKs: V:%8.3fs VO:%8.3fs A:%8.3fs Sys:%8.3fs = %8.3fs\n",
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
325 video_time_usage,vout_time_usage,audio_time_usage,
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
326 total_time_usage-tot,total_time_usage);
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
327 if(total_time_usage>0.0)
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
328 printf("BENCHMARK%%: V:%8.4f%% VO:%8.4f%% A:%8.4f%% Sys:%8.4f%% = %8.4f%%\n",
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
329 100.0*video_time_usage/total_time_usage,
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
330 100.0*vout_time_usage/total_time_usage,
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
331 100.0*audio_time_usage/total_time_usage,
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
332 100.0*(total_time_usage-tot)/total_time_usage,
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
333 100.0);
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
334 }
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
335 // restore terminal:
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
336 #ifdef HAVE_GUI
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
337 if ( nogui )
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
338 #endif
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
339 getch2_disable();
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
340 if(video_out) video_out->uninit();
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
341 if(audio_out && has_audio) audio_out->uninit();
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
342 if(encode_name) avi_fixate();
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
343 #ifdef HAVE_LIRC
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
344 #ifdef HAVE_GUI
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
345 if ( nogui )
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
346 #endif
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
347 lirc_mp_cleanup();
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
348 #endif
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
349 exit(1);
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
350 }
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
351
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
352 static char* current_module=NULL; // for debugging
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
353
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
354 void exit_sighandler(int x){
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
355 static int sig_count=0;
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
356 ++sig_count;
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
357 if(sig_count==2) exit(1);
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
358 if(sig_count>2){
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
359 // can't stop :(
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
360 kill(getpid(),SIGKILL);
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
361 }
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
362 fprintf(stderr,"\nMPlayer interrupted by signal %d in module: %s \n",x,
1156
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
363 current_module?current_module:"unknown"
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
364 );
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
365 #ifdef HAVE_GUI
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
366 if ( !nogui )
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
367 {
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
368 mplShMem->items.error.signal=x;
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
369 strcpy( mplShMem->items.error.module,current_module?current_module:"unknown" );
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
370 }
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
371 #endif
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
372 exit_player(NULL);
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
373 }
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
374
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
375 extern int vcd_get_track_end(int fd,int track);
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
376 extern void write_avi_header_1(FILE *f,int fcc,float fps,int width,int height);
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1302
diff changeset
377
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1302
diff changeset
378 // dec_audio.c:
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1302
diff changeset
379 extern int init_audio(sh_audio_t *sh_audio);
1156
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
380 extern int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen);
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1302
diff changeset
381 extern void resync_audio_stream(sh_audio_t *sh_audio);
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1302
diff changeset
382 extern void skip_audio_frame(sh_audio_t *sh_audio);
1156
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
383
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1302
diff changeset
384 // dec_video.c:
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1302
diff changeset
385 extern int init_video(sh_video_t *sh_video);
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1302
diff changeset
386 extern int decode_video(vo_functions_t *video_out,sh_video_t *sh_video,unsigned char *start,int in_size,int drop_frame);
1156
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
387
459
9dfad88a8107 add mixer support
pontscho
parents: 458
diff changeset
388 #include "mixer.h"
147
0a0d7dd8fb51 new command line/config file parser
szabii
parents: 117
diff changeset
389 #include "cfg-mplayer.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
390
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
391 void parse_cfgfiles( void )
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
392 {
1014
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
393 char *conffile;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
394 int conffile_fd;
147
0a0d7dd8fb51 new command line/config file parser
szabii
parents: 117
diff changeset
395 if (parse_config_file(conf, "/etc/mplayer.conf") < 0)
0a0d7dd8fb51 new command line/config file parser
szabii
parents: 117
diff changeset
396 exit(1);
178
55206b791586 get_path()
szabii
parents: 175
diff changeset
397 if ((conffile = get_path("")) == NULL) {
147
0a0d7dd8fb51 new command line/config file parser
szabii
parents: 117
diff changeset
398 printf("Can't find HOME dir\n");
0a0d7dd8fb51 new command line/config file parser
szabii
parents: 117
diff changeset
399 } else {
178
55206b791586 get_path()
szabii
parents: 175
diff changeset
400 mkdir(conffile, 0777);
55206b791586 get_path()
szabii
parents: 175
diff changeset
401 free(conffile);
55206b791586 get_path()
szabii
parents: 175
diff changeset
402 if ((conffile = get_path("config")) == NULL) {
55206b791586 get_path()
szabii
parents: 175
diff changeset
403 printf("get_path(\"config\") sziiiivas\n");
55206b791586 get_path()
szabii
parents: 175
diff changeset
404 } else {
55206b791586 get_path()
szabii
parents: 175
diff changeset
405 if ((conffile_fd = open(conffile, O_CREAT | O_EXCL | O_WRONLY, 0666)) != -1) {
55206b791586 get_path()
szabii
parents: 175
diff changeset
406 printf("Creating config file: %s\n", conffile);
55206b791586 get_path()
szabii
parents: 175
diff changeset
407 write(conffile_fd, default_config, strlen(default_config));
55206b791586 get_path()
szabii
parents: 175
diff changeset
408 close(conffile_fd);
55206b791586 get_path()
szabii
parents: 175
diff changeset
409 }
55206b791586 get_path()
szabii
parents: 175
diff changeset
410 if (parse_config_file(conf, conffile) < 0)
55206b791586 get_path()
szabii
parents: 175
diff changeset
411 exit(1);
55206b791586 get_path()
szabii
parents: 175
diff changeset
412 free(conffile);
151
9708d4b2765b cfgparser fix
szabii
parents: 150
diff changeset
413 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
414 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
415 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
416
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
417 #ifndef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
418 int main(int argc,char* argv[], char *envp[]){
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
419 #else
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
420 int mplayer(int argc,char* argv[], char *envp[]){
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
421 #endif
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
422
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
423 static subtitle* subtitles=NULL;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
424
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
425 static demuxer_t *demuxer=NULL;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
426
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
427 static demux_stream_t *d_audio=NULL;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
428 static demux_stream_t *d_video=NULL;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
429 static demux_stream_t *d_dvdsub=NULL;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
430
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
431 static sh_audio_t *sh_audio=NULL;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
432 static sh_video_t *sh_video=NULL;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
433
1014
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
434 char* filename=NULL; //"MI2-Trailer.avi";
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
435 stream_t* stream=NULL;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
436 int file_format=DEMUXER_TYPE_UNKNOWN;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
437 //
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
438 int delay_corrected=1;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
439 float initial_pts_delay=0;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
440 #ifdef VCD_CACHE
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
441 int vcd_cache_size=128;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
442 #endif
1177
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1156
diff changeset
443 #ifdef __FreeBSD__
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1156
diff changeset
444 int bsize = VCD_SECTOR_SIZE;
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1156
diff changeset
445 #endif
1014
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
446 char* title="MPlayer";
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
447
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
448 // movie info:
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
449 int out_fmt=0;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
450
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
451 int osd_visible=100;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
452 int osd_function=OSD_PLAY;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
453 int osd_last_pts=-303;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
454
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
455 float a_frame=0; // Audio
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
456
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
457 float rel_seek_secs=0;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
458
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
459 int i;
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
460 int f; // filedes
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
461
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
462 printf("%s",banner_text);
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
463
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
464 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
465 if ( nogui )
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
466 {
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
467 #endif
751
1417d8a4a96c *** empty log message ***
pontscho
parents: 750
diff changeset
468 parse_cfgfiles();
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
469 if (parse_command_line(conf, argc, argv, envp, &filename) < 0) exit(1);
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
470
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
471 // Many users forget to include command line in bugreports...
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
472 if(verbose){
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
473 printf("CommandLine:");
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
474 for(i=1;i<argc;i++)printf(" '%s'",argv[i]);
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
475 printf("\n");
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
476 }
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
477
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
478 if(video_driver && strcmp(video_driver,"help")==0){
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
479 printf("Available video output drivers:\n");
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
480 i=0;
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
481 while (video_out_drivers[i]) {
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
482 const vo_info_t *info = video_out_drivers[i++]->get_info ();
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
483 printf("\t%s\t%s\n", info->short_name, info->name);
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
484 }
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
485 printf("\n");
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
486 exit(0);
956
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
487 }
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
488 if(audio_driver && strcmp(audio_driver,"help")==0){
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
489 printf("Available audio output drivers:\n");
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
490 i=0;
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
491 while (audio_out_drivers[i]) {
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
492 const ao_info_t *info = audio_out_drivers[i++]->info;
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
493 printf("\t%s\t%s\n", info->short_name, info->name);
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
494 }
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
495 printf("\n");
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
496 exit(0);
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
497 }
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
498 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
499 }
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
500 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
501
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
502 if(!filename){
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
503 if(vcd_track) filename=DEFAULT_CDROM_DEVICE;
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
504 else {
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
505 printf("%s",help_text); exit(0);
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
506 }
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
507 }
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
508
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
509 // check video_out driver name:
1183
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
510 if (video_driver)
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
511 if ((i = strcspn(video_driver, ":")) > 0)
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
512 {
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
513 size_t i2 = strlen(video_driver);
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
514
1190
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
515 if (video_driver[i] == ':')
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
516 {
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
517 vo_subdevice = malloc(i2-i);
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
518 if (vo_subdevice != NULL)
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
519 strncpy(vo_subdevice, (char *)(video_driver+i+1), i2-i);
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
520 video_driver[i] = '\0';
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
521 }
1183
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
522 // printf("video_driver: %s, subdevice: %s\n", video_driver, vo_subdevice);
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
523 }
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
524 if(!video_driver)
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
525 video_out=video_out_drivers[0];
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
526 else
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
527 for (i=0; video_out_drivers[i] != NULL; i++){
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
528 const vo_info_t *info = video_out_drivers[i]->get_info ();
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
529 if(strcmp(info->short_name,video_driver) == 0){
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
530 video_out = video_out_drivers[i];break;
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
531 }
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
532 }
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
533 if(!video_out){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
534 fprintf(stderr,"Invalid video output driver name: %s\nUse '-vo help' to get a list of available video drivers.\n",video_driver);
956
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
535 return 0;
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
536 }
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
537
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
538 // check audio_out driver name:
1183
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
539 if (audio_driver)
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
540 if ((i = strcspn(audio_driver, ":")) > 0)
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
541 {
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
542 size_t i2 = strlen(audio_driver);
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
543
1190
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
544 if (audio_driver[i] == ':')
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
545 {
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
546 ao_subdevice = malloc(i2-i);
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
547 if (ao_subdevice != NULL)
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
548 strncpy(ao_subdevice, (char *)(audio_driver+i+1), i2-i);
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
549 audio_driver[i] = '\0';
98f732a23cb4 egy hulye kis checking kimaradt az strcspn fv. jovoltabol
al3x
parents: 1183
diff changeset
550 }
1183
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
551 // printf("audio_driver: %s, subdevice: %s\n", audio_driver, ao_subdevice);
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
552 }
956
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
553 if(!audio_driver)
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
554 audio_out=audio_out_drivers[0];
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
555 else
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
556 for (i=0; audio_out_drivers[i] != NULL; i++){
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
557 const ao_info_t *info = audio_out_drivers[i]->info;
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
558 if(strcmp(info->short_name,audio_driver) == 0){
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
559 audio_out = audio_out_drivers[i];break;
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
560 }
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
561 }
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 955
diff changeset
562 if (!audio_out){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
563 fprintf(stderr,"Invalid audio output driver name: %s\nUse '-ao help' to get a list of available audio drivers.\n",audio_driver);
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
564 return 0;
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
565 }
1255
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
566 /*DSP!! if(dsp) audio_out->control(AOCONTROL_SET_DEVICE,(int)dsp);*/
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
567
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
568 // check codec.conf
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
569 if(!parse_codec_cfg(get_path("codecs.conf"))){
1296
32f5d26baf86 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1295
diff changeset
570 fprintf(stderr,"(copy/link DOCS/codecs.conf to ~/.mplayer/codecs.conf)\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
571 GUI_MSG( mplCodecConfNotFound )
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
572 exit(1);
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
573 }
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
574
212
7034ef1f685d new option: -font
arpi_esp
parents: 208
diff changeset
575 // check font
7034ef1f685d new option: -font
arpi_esp
parents: 208
diff changeset
576 if(font_name){
337
3ca0b1b739a5 changed fs+vm+zoom flags for libvo
arpi_esp
parents: 332
diff changeset
577 vo_font=read_font_desc(font_name,font_factor,verbose>1);
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
578 if(!vo_font) fprintf(stderr,"Can't load font: %s\n",font_name);
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
579 } else {
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
580 // try default:
337
3ca0b1b739a5 changed fs+vm+zoom flags for libvo
arpi_esp
parents: 332
diff changeset
581 vo_font=read_font_desc(get_path("font/font.desc"),font_factor,verbose>1);
212
7034ef1f685d new option: -font
arpi_esp
parents: 208
diff changeset
582 }
7034ef1f685d new option: -font
arpi_esp
parents: 208
diff changeset
583
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
584 // check .sub
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
585 if(sub_name){
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
586 subtitles=sub_read_file(sub_name);
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
587 if(!subtitles) fprintf(stderr,"Can't load subtitles: %s\n",sub_name);
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
588 } else {
510
2951d138ddaf add sub autoread & remove 'c' key
pontscho
parents: 500
diff changeset
589 if ( sub_auto )
2951d138ddaf add sub autoread & remove 'c' key
pontscho
parents: 500
diff changeset
590 {
2951d138ddaf add sub autoread & remove 'c' key
pontscho
parents: 500
diff changeset
591 // auto load sub file ...
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 889
diff changeset
592 subtitles=sub_read_file( sub_filename( get_path("sub/"), filename ) );
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 889
diff changeset
593 }
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 889
diff changeset
594 if ( subtitles == NULL ) subtitles=sub_read_file(get_path("default.sub")); // try default:
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
595 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
596
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
597
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
598 if(vcd_track){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
599 //============ Open VideoCD track ==============
598
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 595
diff changeset
600 int ret,ret2;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
601 f=open(filename,O_RDONLY);
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
602 if(f<0){ fprintf(stderr,"CD-ROM Device '%s' not found!\n",filename);return 1; }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
603 vcd_read_toc(f);
598
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 595
diff changeset
604 ret2=vcd_get_track_end(f,vcd_track);
1296
32f5d26baf86 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1295
diff changeset
605 if(ret2<0){ fprintf(stderr,"Error selecting VCD track! (get)\n");return 1;}
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 577
diff changeset
606 ret=vcd_seek_to_track(f,vcd_track);
1296
32f5d26baf86 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1295
diff changeset
607 if(ret<0){ fprintf(stderr,"Error selecting VCD track! (seek)\n");return 1;}
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 577
diff changeset
608 seek_to_byte+=ret;
598
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 595
diff changeset
609 if(verbose) printf("VCD start byte position: 0x%X end: 0x%X\n",seek_to_byte,ret2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
610 #ifdef VCD_CACHE
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
611 vcd_cache_init(vcd_cache_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
612 #endif
1177
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1156
diff changeset
613 #ifdef __FreeBSD__
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1156
diff changeset
614 if (ioctl (f, CDRIOCSETBLOCKSIZE, &bsize) == -1) {
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1156
diff changeset
615 perror ( "Error in CDRIOCSETBLOCKSIZE");
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1156
diff changeset
616 }
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1156
diff changeset
617 #endif
598
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 595
diff changeset
618 stream=new_stream(f,STREAMTYPE_VCD);
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 595
diff changeset
619 stream->start_pos=ret;
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 595
diff changeset
620 stream->end_pos=ret2;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
621 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
622 //============ Open plain FILE ============
598
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 595
diff changeset
623 int len;
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 651
diff changeset
624 if(!strcmp(filename,"-")){
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 651
diff changeset
625 // read from stdin
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 651
diff changeset
626 printf("Reading from stdin...\n");
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 651
diff changeset
627 f=0; // 0=stdin
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 651
diff changeset
628 stream=new_stream(f,STREAMTYPE_STREAM);
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 651
diff changeset
629 } else {
842
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
630 #ifdef STREAMING
906
8eca9b7aafae Changed streaming functions call.
bertrand
parents: 894
diff changeset
631 url = url_new(filename);
842
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
632 if(url==NULL) {
906
8eca9b7aafae Changed streaming functions call.
bertrand
parents: 894
diff changeset
633 // failed to create a new URL, so it's not an URL (or a malformed URL)
842
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
634 #endif
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
635 f=open(filename,O_RDONLY);
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
636 if(f<0){ fprintf(stderr,"File not found: '%s'\n",filename);return 1; }
842
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
637 len=lseek(f,0,SEEK_END); lseek(f,0,SEEK_SET);
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
638 stream=new_stream(f,STREAMTYPE_FILE);
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
639 stream->end_pos=len;
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
640 #ifdef STREAMING
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
641 } else {
1002
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
642 file_format=autodetectProtocol( url, &f );
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
643 if( file_format==DEMUXER_TYPE_UNKNOWN ) {
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
644 fprintf(stderr,"Unable to open URL: %s\n", filename);
906
8eca9b7aafae Changed streaming functions call.
bertrand
parents: 894
diff changeset
645 url_free(url);
842
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
646 return 1;
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
647 } else {
1002
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
648 f=streaming_start( &url, f, file_format );
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
649 if(f<0){ fprintf(stderr,"Unable to open URL: %s\n", url->url); return 1; }
842
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
650 printf("Connected to server: %s\n", url->hostname );
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
651 }
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
652 stream=new_stream(f,STREAMTYPE_STREAM);
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
653 }
80698f8030b9 Now Check if the 'filename' is an URL and connect to the server.
bertrand
parents: 815
diff changeset
654 #endif
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 651
diff changeset
655 }
598
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 595
diff changeset
656 }
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 595
diff changeset
657
492
888a85621f50 preliminary DVD support using libcss
lgb
parents: 487
diff changeset
658 #ifdef HAVE_LIBCSS
546
22ed5f5821e2 command line requested DVD key support for Arpi :)
lgb
parents: 535
diff changeset
659 if (dvdimportkey) {
22ed5f5821e2 command line requested DVD key support for Arpi :)
lgb
parents: 535
diff changeset
660 if (dvd_import_key(dvdimportkey)) {
22ed5f5821e2 command line requested DVD key support for Arpi :)
lgb
parents: 535
diff changeset
661 fprintf(stderr,"Error processing DVD KEY.\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
662 GUI_MSG( mplErrorDVDKeyProcess )
546
22ed5f5821e2 command line requested DVD key support for Arpi :)
lgb
parents: 535
diff changeset
663 exit(1);
22ed5f5821e2 command line requested DVD key support for Arpi :)
lgb
parents: 535
diff changeset
664 }
22ed5f5821e2 command line requested DVD key support for Arpi :)
lgb
parents: 535
diff changeset
665 printf("DVD command line requested key is stored for descrambling.\n");
22ed5f5821e2 command line requested DVD key support for Arpi :)
lgb
parents: 535
diff changeset
666 }
1018
e5fc7ec51fa3 -dvd is renamed to -dvdauth, variable dvd_device is renamed to dvd_auth_device. These changes are needed for future DVD playback developmenting
lgb
parents: 1015
diff changeset
667 if (dvd_auth_device) {
1042
b333271f4e7c Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents: 1039
diff changeset
668 // if (dvd_auth(dvd_auth_device,f)) {
b333271f4e7c Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents: 1039
diff changeset
669 if (dvd_auth(dvd_auth_device,filename)) {
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
670 GUI_MSG( mplErrorDVDAuth )
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
671 exit(0);
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
672 }
492
888a85621f50 preliminary DVD support using libcss
lgb
parents: 487
diff changeset
673 printf("DVD auth sequence seems to be OK.\n");
888a85621f50 preliminary DVD support using libcss
lgb
parents: 487
diff changeset
674 }
888a85621f50 preliminary DVD support using libcss
lgb
parents: 487
diff changeset
675 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
676
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
677 //============ Open & Sync stream and detect file format ===============
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
678
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
679 if(!has_audio) audio_id=-2; // do NOT read audio packets...
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
680
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
681 //=============== Try to open as AVI file: =================
1002
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
682 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_AVI){
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
683 stream_reset(stream);
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
684 demuxer=new_demuxer(stream,DEMUXER_TYPE_AVI,audio_id,video_id,dvdsub_id);
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
685 stream_seek(demuxer->stream,seek_to_byte);
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
686 { //---- RIFF header:
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
687 int id=stream_read_dword_le(demuxer->stream); // "RIFF"
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
688 if(id==mmioFOURCC('R','I','F','F')){
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
689 stream_read_dword_le(demuxer->stream); //filesize
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
690 id=stream_read_dword_le(demuxer->stream); // "AVI "
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
691 if(id==formtypeAVI){
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
692 printf("Detected AVI file format!\n");
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
693 file_format=DEMUXER_TYPE_AVI;
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
694 }
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
695 }
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
696 }
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
697 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
698 //=============== Try to open as ASF file: =================
1002
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
699 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_ASF){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
700 stream_reset(stream);
552
c2a449f90087 dvd sub support reading
arpi_esp
parents: 549
diff changeset
701 demuxer=new_demuxer(stream,DEMUXER_TYPE_ASF,audio_id,video_id,dvdsub_id);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
702 stream_seek(demuxer->stream,seek_to_byte);
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
703 if(asf_check_header(demuxer)){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
704 printf("Detected ASF file format!\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
705 file_format=DEMUXER_TYPE_ASF;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
706 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
707 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
708 //=============== Try to open as MPEG-PS file: =================
1002
f035bd1f2749 Streaming function return the file_format and should be tested.
bertrand
parents: 984
diff changeset
709 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MPEG_PS){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
710 stream_reset(stream);
552
c2a449f90087 dvd sub support reading
arpi_esp
parents: 549
diff changeset
711 demuxer=new_demuxer(stream,DEMUXER_TYPE_MPEG_PS,audio_id,video_id,dvdsub_id);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
712 stream_seek(demuxer->stream,seek_to_byte);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
713 if(ds_fill_buffer(demuxer->video)){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
714 printf("Detected MPEG-PS file format!\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
715 file_format=DEMUXER_TYPE_MPEG_PS;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
716 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
717 // some hack to get meaningfull error messages to our unhappy users:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
718 if(num_elementary_packets100>=2 && num_elementary_packets101>=2 &&
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
719 abs(num_elementary_packets101-num_elementary_packets100)<8){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
720 file_format=DEMUXER_TYPE_MPEG_ES; // <-- hack is here :)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
721 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
722 if(demuxer->synced==2)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
723 printf("Missing MPEG video stream!? contact the author, it may be a bug :(\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
724 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
725 printf("Not MPEG System Stream format... (maybe Transport Stream?)\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
726 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
727 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
728 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
729 //=============== Try to open as MPEG-ES file: =================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
730 if(file_format==DEMUXER_TYPE_MPEG_ES){ // little hack, see above!
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
731 stream_reset(stream);
552
c2a449f90087 dvd sub support reading
arpi_esp
parents: 549
diff changeset
732 demuxer=new_demuxer(stream,DEMUXER_TYPE_MPEG_ES,audio_id,video_id,dvdsub_id);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
733 stream_seek(demuxer->stream,seek_to_byte);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
734 if(!ds_fill_buffer(demuxer->video)){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
735 printf("Invalid MPEG-ES stream??? contact the author, it may be a bug :(\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
736 file_format=DEMUXER_TYPE_UNKNOWN;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
737 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
738 printf("Detected MPEG-ES file format!\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
739 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
740 }
1255
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
741 #ifdef MOV
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
742 //=============== Try to open as MOV file: =================
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
743 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MOV){
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
744 stream_reset(stream);
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
745 demuxer=new_demuxer(stream,DEMUXER_TYPE_MOV,audio_id,video_id,dvdsub_id);
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
746 // stream_seek(demuxer->stream,seek_to_byte);
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
747 if(mov_check_file(demuxer)){
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
748 printf("Detected QuickTime/MOV file format!\n");
1255
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
749 file_format=DEMUXER_TYPE_MOV;
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
750 }
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
751 }
94f2853ec6f4 -dsp option removed, displaying help text (-ao oss:dsp_path)
alex
parents: 1250
diff changeset
752 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
753 //=============== Unknown, exiting... ===========================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
754 if(file_format==DEMUXER_TYPE_UNKNOWN){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
755 fprintf(stderr,"============= Sorry, this file format not recognized/supported ===============\n");
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
756 fprintf(stderr,"=== If this file is an AVI, ASF or MPEG stream, please contact the author! ===\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
757 GUI_MSG( mplUnknowFileType )
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
758 exit(1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
759 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
760 //====== File format recognized, set up these for compatibility: =========
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
761 d_audio=demuxer->audio;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
762 d_video=demuxer->video;
554
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
763 d_dvdsub=demuxer->sub;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
764
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
765 sh_audio=NULL;
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
766 sh_video=NULL;
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
767
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
768 switch(file_format){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
769 case DEMUXER_TYPE_AVI: {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
770 //---- AVI header:
1039
881b949b6c68 avi streaming fixed
arpi_esp
parents: 1038
diff changeset
771 read_avi_header(demuxer,(stream->type!=STREAMTYPE_STREAM)?index_mode:-2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
772 stream_reset(demuxer->stream);
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
773 stream_seek(demuxer->stream,demuxer->movi_start);
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
774 demuxer->idx_pos=0;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
775 demuxer->idx_pos_a=0;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
776 demuxer->idx_pos_v=0;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
777 if(demuxer->idx_size>0){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
778 // decide index format:
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
779 if(((AVIINDEXENTRY *)demuxer->idx)[0].dwChunkOffset<demuxer->movi_start)
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
780 demuxer->idx_offset=demuxer->movi_start-4;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
781 else
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
782 demuxer->idx_offset=0;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
783 if(verbose) printf("AVI index offset: %d\n",demuxer->idx_offset);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
784 }
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
785 // demuxer->endpos=avi_header.movi_end;
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
786
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
787 if(demuxer->idx_size>0){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
788 // check that file is non-interleaved:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
789 int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
790 int a_pos=-1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
791 int v_pos=-1;
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
792 for(i=0;i<demuxer->idx_size;i++){
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
793 AVIINDEXENTRY* idx=&((AVIINDEXENTRY *)demuxer->idx)[i];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
794 demux_stream_t* ds=demux_avi_select_stream(demuxer,idx->ckid);
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
795 int pos=idx->dwChunkOffset+demuxer->idx_offset;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
796 if(a_pos==-1 && ds==demuxer->audio){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
797 a_pos=pos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
798 if(v_pos!=-1) break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
799 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
800 if(v_pos==-1 && ds==demuxer->video){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
801 v_pos=pos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
802 if(a_pos!=-1) break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
803 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
804 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
805 if(v_pos==-1){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
806 fprintf(stderr,"AVI_NI: missing video stream!? contact the author, it may be a bug :(\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
807 GUI_MSG( mplErrorAVINI )
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
808 exit(1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
809 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
810 if(a_pos==-1){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
811 printf("AVI_NI: No audio stream found -> nosound\n");
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
812 has_audio=0;sh_audio=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
813 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
814 if(force_ni || abs(a_pos-v_pos)>0x100000){ // distance > 1MB
1296
32f5d26baf86 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1295
diff changeset
815 printf("%s NON-INTERLEAVED AVI file-format!\n",force_ni?"Forced":"Detected");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
816 demuxer->type=DEMUXER_TYPE_AVI_NI; // HACK!!!!
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
817 pts_from_bps=1; // force BPS sync!
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
818 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
819 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
820 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
821 // no index
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
822 if(force_ni){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
823 printf("Using NON-INTERLEAVED Broken AVI file-format!\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
824 demuxer->type=DEMUXER_TYPE_AVI_NINI; // HACK!!!!
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
825 demuxer->idx_pos_a=
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
826 demuxer->idx_pos_v=demuxer->movi_start;
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
827 pts_from_bps=1; // force BPS sync!
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
828 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
829 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
830 if(!ds_fill_buffer(d_video)){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
831 fprintf(stderr,"AVI: missing video stream!? contact the author, it may be a bug :(\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
832 GUI_MSG( mplAVIErrorMissingVideoStream )
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
833 exit(1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
834 }
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
835 sh_video=d_video->sh;sh_video->ds=d_video;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
836 if(has_audio){
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
837 if(verbose) printf("AVI: Searching for audio stream (id:%d)\n",d_audio->id);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
838 if(!ds_fill_buffer(d_audio)){
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
839 printf("AVI: No Audio stream found... ->nosound\n");
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
840 has_audio=0;sh_audio=NULL;
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
841 } else {
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
842 sh_audio=d_audio->sh;sh_audio->ds=d_audio;
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
843 sh_audio->format=sh_audio->wf->wFormatTag;
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
844 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
845 }
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
846 // calc. FPS:
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
847 sh_video->fps=(float)sh_video->video.dwRate/(float)sh_video->video.dwScale;
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
848 sh_video->frametime=(float)sh_video->video.dwScale/(float)sh_video->video.dwRate;
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
849 // calculating video bitrate:
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
850 avi_bitrate=demuxer->movi_end-demuxer->movi_start-demuxer->idx_size*8;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
851 if(sh_audio) avi_bitrate-=sh_audio->audio.dwLength;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
852 if(verbose) printf("AVI video length=%d\n",avi_bitrate);
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
853 avi_bitrate=((float)avi_bitrate/(float)sh_video->video.dwLength)*sh_video->fps;
606
0b1f9eda1ea6 warnings killed
szabii
parents: 598
diff changeset
854 printf("VIDEO: [%.4s] %ldx%ld %dbpp %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n",
0b1f9eda1ea6 warnings killed
szabii
parents: 598
diff changeset
855 (char *)&sh_video->bih->biCompression,
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
856 sh_video->bih->biWidth,
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
857 sh_video->bih->biHeight,
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
858 sh_video->bih->biBitCount,
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
859 sh_video->fps,
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
860 avi_bitrate*0.008f,
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
861 avi_bitrate/1024.0f );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
862 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
863 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
864 case DEMUXER_TYPE_ASF: {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
865 //---- ASF header:
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
866 read_asf_header(demuxer);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
867 stream_reset(demuxer->stream);
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
868 stream_seek(demuxer->stream,demuxer->movi_start);
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
869 demuxer->idx_pos=0;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
870 // demuxer->endpos=avi_header.movi_end;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
871 if(!ds_fill_buffer(d_video)){
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
872 printf("ASF: no video stream found!\n");
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
873 sh_video=NULL;
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
874 //printf("ASF: missing video stream!? contact the author, it may be a bug :(\n");
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
875 //GUI_MSG( mplASFErrorMissingVideoStream )
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
876 //exit(1);
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
877 } else {
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
878 sh_video=d_video->sh;sh_video->ds=d_video;
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
879 sh_video->fps=1000.0f; sh_video->frametime=0.001f; // 1ms
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
880 printf("VIDEO: [%.4s] %ldx%ld %dbpp\n",
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
881 (char *)&sh_video->bih->biCompression,
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
882 sh_video->bih->biWidth,
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
883 sh_video->bih->biHeight,
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
884 sh_video->bih->biBitCount);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
885 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
886 if(has_audio){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
887 if(verbose) printf("ASF: Searching for audio stream (id:%d)\n",d_audio->id);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
888 if(!ds_fill_buffer(d_audio)){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
889 printf("ASF: No Audio stream found... ->nosound\n");
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
890 has_audio=0;sh_audio=NULL;
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
891 } else {
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
892 sh_audio=d_audio->sh;sh_audio->ds=d_audio;
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
893 sh_audio->format=sh_audio->wf->wFormatTag;
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
894 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
895 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
896 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
897 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
898 case DEMUXER_TYPE_MPEG_ES: {
500
c2b3a1f340c8 MPEG-ES segfault fixed, stream list printfs moved v 1->0
arpi_esp
parents: 495
diff changeset
899 has_audio=0;sh_audio=NULL; // ES streams has no audio channel
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1286
diff changeset
900 d_video->sh=new_sh_video(demuxer,0); // create dummy video stream header, id=0
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
901 break;
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
902 }
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
903 case DEMUXER_TYPE_MPEG_PS: {
606
0b1f9eda1ea6 warnings killed
szabii
parents: 598
diff changeset
904 if(has_audio) {
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
905 if(!ds_fill_buffer(d_audio)){
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
906 printf("MPEG: No Audio stream found... ->nosound\n");
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
907 has_audio=0;sh_audio=NULL;
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
908 } else {
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
909 sh_audio=d_audio->sh;sh_audio->ds=d_audio;
1331
b4457de47804 ds->type removed - using id-based audio format detection in mplayer.c
arpi
parents: 1330
diff changeset
910 switch(d_audio->id & 0xE0){ // 1110 0000 b (high 3 bit: type low 5: id)
b4457de47804 ds->type removed - using id-based audio format detection in mplayer.c
arpi
parents: 1330
diff changeset
911 case 0x00: sh_audio->format=0x50;break; // mpeg
b4457de47804 ds->type removed - using id-based audio format detection in mplayer.c
arpi
parents: 1330
diff changeset
912 case 0xA0: sh_audio->format=0x10001;break; // dvd pcm
b4457de47804 ds->type removed - using id-based audio format detection in mplayer.c
arpi
parents: 1330
diff changeset
913 case 0x80: sh_audio->format=0x2000;break; // ac3
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
914 default: has_audio=0;sh_audio=NULL; // unknown type
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
915 }
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
916 }
606
0b1f9eda1ea6 warnings killed
szabii
parents: 598
diff changeset
917 }
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
918 break;
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
919 }
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
920 } // switch(file_format)
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
921
792
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
922 // DUMP STREAMS:
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
923 if(stream_dump_type){
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
924 FILE *f;
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
925 demux_stream_t *ds=NULL;
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
926 // select stream to dump
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
927 switch(stream_dump_type){
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
928 case 1: ds=d_audio;break;
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
929 case 2: ds=d_video;break;
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
930 case 3: ds=d_dvdsub;break;
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
931 }
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
932 if(!ds){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
933 fprintf(stderr,"dump: FATAL: selected stream missing!\n");
792
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
934 exit(1);
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
935 }
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
936 // disable other streams:
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
937 if(d_audio && d_audio!=ds) {ds_free_packs(d_audio); d_audio->id=-2; }
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
938 if(d_video && d_video!=ds) {ds_free_packs(d_video); d_video->id=-2; }
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
939 if(d_dvdsub && d_dvdsub!=ds) {ds_free_packs(d_dvdsub); d_dvdsub->id=-2; }
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
940 // let's dump it!
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
941 f=fopen(stream_dump_name?stream_dump_name:"stream.dump","wb");
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
942 if(!f){ fprintf(stderr,"Can't open dump file!!!\n");exit(1); }
792
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
943 while(!ds->eof){
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
944 unsigned char* start;
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
945 int in_size=ds_get_packet(ds,&start);
1246
7f69c1dd1e91 -dumpvideo stores frame size for avi/asf video frames (for ffmpeg testing)
arpi
parents: 1237
diff changeset
946 if( (file_format==DEMUXER_TYPE_AVI || file_format==DEMUXER_TYPE_ASF)
7f69c1dd1e91 -dumpvideo stores frame size for avi/asf video frames (for ffmpeg testing)
arpi
parents: 1237
diff changeset
947 && stream_dump_type==2) fwrite(&in_size,1,4,f);
792
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
948 if(in_size>0) fwrite(start,in_size,1,f);
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
949 }
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
950 fclose(f);
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
951 printf("core dumped :)\n");
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
952 exit(1);
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
953 }
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
954
62d7f36e6127 dump stuff moved before header parsing
arpi_esp
parents: 782
diff changeset
955
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
956 // Determine image properties:
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
957 switch(file_format){
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
958 case DEMUXER_TYPE_AVI:
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
959 case DEMUXER_TYPE_ASF: {
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
960 // display info:
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
961 if(sh_video){
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
962 sh_video->format=sh_video->bih->biCompression;
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
963 sh_video->disp_w=sh_video->bih->biWidth;
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
964 sh_video->disp_h=abs(sh_video->bih->biHeight);
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
965 }
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
966 break;
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
967 }
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
968 case DEMUXER_TYPE_MPEG_ES:
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
969 case DEMUXER_TYPE_MPEG_PS: {
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
970 // Find sequence_header first:
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
971 if(verbose) printf("Searching for sequence header... ");fflush(stdout);
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
972 while(1){
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
973 int i=sync_video_packet(d_video);
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
974 if(i==0x1B3) break; // found it!
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
975 if(!i || !skip_video_packet(d_video)){
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
976 if(verbose) printf("NONE :(\n");
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
977 fprintf(stderr,"MPEG: FATAL: EOF while searching for sequence header\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
978 GUI_MSG( mplMPEGErrorSeqHeaderSearch )
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
979 exit(1);
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
980 }
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
981 }
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
982 if(verbose) printf("OK!\n");
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
983 sh_video=d_video->sh;sh_video->ds=d_video;
894
11bcf34c0a3e mpeg fourcc changed
arpi_esp
parents: 892
diff changeset
984 sh_video->format=0x10000001; // mpeg video
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
985 mpeg2_init();
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
986 // ========= Read & process sequence header & extension ============
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
987 videobuffer=shmem_alloc(VIDEOBUFFER_SIZE);
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
988 if(!videobuffer){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
989 fprintf(stderr,"Cannot allocate shared memory\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
990 GUI_MSG( mplErrorShMemAlloc )
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
991 exit(0);
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
992 }
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
993 videobuf_len=0;
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
994 if(!read_video_packet(d_video)){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
995 fprintf(stderr,"FATAL: Cannot read sequence header!\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
996 GUI_MSG( mplMPEGErrorCannotReadSeqHeader )
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
997 exit(1);
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
998 }
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
999 if(header_process_sequence_header (picture, &videobuffer[4])) {
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1000 printf ("bad sequence header!\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
1001 GUI_MSG( mplMPEGErrorBadSeqHeader )
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1002 exit(1);
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1003 }
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1004 if(sync_video_packet(d_video)==0x1B5){ // next packet is seq. ext.
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1005 videobuf_len=0;
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1006 if(!read_video_packet(d_video)){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
1007 fprintf(stderr,"FATAL: Cannot read sequence header extension!\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
1008 GUI_MSG( mplMPEGErrorCannotReadSeqHeaderExt )
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1009 exit(1);
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1010 }
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1011 if(header_process_extension (picture, &videobuffer[4])) {
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1012 printf ("bad sequence header extension!\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
1013 GUI_MSG( mplMPEGErrorBadSeqHeaderExt )
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1014 exit(1);
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1015 }
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1016 }
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1017 // display info:
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1018 sh_video->fps=frameratecode2framerate[picture->frame_rate_code]*0.0001f;
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1019 if(!sh_video->fps){
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1020 if(!force_fps){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
1021 fprintf(stderr,"FPS not specified (or invalid) in the header! Use the -fps option!\n");
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1022 exit(1);
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1023 }
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1024 sh_video->frametime=0;
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1025 } else {
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1026 sh_video->frametime=10000.0f/(float)frameratecode2framerate[picture->frame_rate_code];
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1027 }
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1028 sh_video->disp_w=picture->display_picture_width;
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1029 sh_video->disp_h=picture->display_picture_height;
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1030 // info:
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1031 if(verbose) printf("mpeg bitrate: %d (%X)\n",picture->bitrate,picture->bitrate);
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1032 printf("VIDEO: %s %dx%d (aspect %d) %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n",
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1033 picture->mpeg1?"MPEG1":"MPEG2",
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1034 sh_video->disp_w,sh_video->disp_h,
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1035 picture->aspect_ratio_information,
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1036 sh_video->fps,
375
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1037 picture->bitrate*0.5f,
28cc43e013fd some cleanup of init_video
arpi_esp
parents: 374
diff changeset
1038 picture->bitrate/16.0f );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1039 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1040 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1041 } // switch(file_format)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1042
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1043 //if(verbose) printf("file successfully opened (has_audio=%d)\n",has_audio);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1044
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1045 if(sh_video)
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1046 printf("[V] filefmt:%d fourcc:0x%X size:%dx%d fps:%5.2f ftime:=%6.4f\n",
1183
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
1047 file_format,sh_video->format, sh_video->disp_w,sh_video->disp_h,
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1048 sh_video->fps,sh_video->frametime
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1049 );
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1050
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1051 fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1052
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1053 if(!sh_video){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
1054 fprintf(stderr,"Sorry, no video stream... it's unplayable yet\n");
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1055 exit(1);
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1056 }
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1057
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1058 //================== Init AUDIO (codec) ==========================
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1059 if(has_audio){
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1060 // Go through the codec.conf and find the best codec...
626
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1061 sh_audio->codec=NULL;
1302
2460ebcb6e69 Fixed a typo and wrong varname.
atmos4
parents: 1299
diff changeset
1062 if(audio_family!=-1) printf("Trying to force audio codec driver family %d ...\n",audio_family);
626
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1063 while(1){
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1064 sh_audio->codec=find_codec(sh_audio->format,NULL,sh_audio->codec,1);
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1065 if(!sh_audio->codec){
1299
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1066 if(audio_family!=-1) {
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1067 sh_audio->codec=NULL; /* re-search */
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1068 printf("Can't find audio codec for forced driver family, fallback to other drivers.\n");
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1069 audio_family=-1;
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1070 continue;
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1071 }
626
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1072 printf("Can't find codec for audio format 0x%X !\n",sh_audio->format);
919
da072473937a Extended message for misisng codecs
arpi_esp
parents: 906
diff changeset
1073 printf("*** Try to upgrade %s from DOCS/codecs.conf\n",get_path("codecs.conf"));
da072473937a Extended message for misisng codecs
arpi_esp
parents: 906
diff changeset
1074 printf("*** If it's still not OK, then read DOCS/CODECS!\n");
626
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1075 has_audio=0;
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1076 break;
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1077 }
1286
543a94b241a2 Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents: 1285
diff changeset
1078 if(audio_codec && strcmp(sh_audio->codec->name,audio_codec)) continue;
1299
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1079 else if(audio_family!=-1 && sh_audio->codec->driver!=audio_family) continue;
1286
543a94b241a2 Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents: 1285
diff changeset
1080 printf("%s audio codec: [%s] drv:%d (%s)\n",audio_codec?"Forcing":"Detected",sh_audio->codec->name,sh_audio->codec->driver,sh_audio->codec->info);
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1081 //has_audio=sh_audio->codec->driver;
626
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1082 break;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1083 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1084 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1085
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1086 if(has_audio){
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1087 if(verbose) printf("Initializing audio codec...\n");
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1088 if(!init_audio(sh_audio)){
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1089 printf("Couldn't initialize audio codec! -> nosound\n");
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1090 has_audio=0;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1091 } else {
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 751
diff changeset
1092 printf("AUDIO: srate=%d chans=%d bps=%d sfmt=0x%X ratio: %d->%d\n",sh_audio->samplerate,sh_audio->channels,sh_audio->samplesize,
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 751
diff changeset
1093 sh_audio->sample_format,sh_audio->i_bps,sh_audio->o_bps);
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1094 }
175
d43c7e6412f0 added DirectShow support
arpi_esp
parents: 162
diff changeset
1095 }
d43c7e6412f0 added DirectShow support
arpi_esp
parents: 162
diff changeset
1096
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1097 //================== Init VIDEO (codec & libvo) ==========================
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1098
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1099 // Go through the codec.conf and find the best codec...
626
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1100 sh_video->codec=NULL;
1299
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1101 if(video_family!=-1) printf("Trying to force video codec driver family %d ...\n",video_family);
626
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1102 while(1){
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1103 sh_video->codec=find_codec(sh_video->format,
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1104 sh_video->bih?((unsigned int*) &sh_video->bih->biCompression):NULL,sh_video->codec,0);
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1105 if(!sh_video->codec){
1299
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1106 if(video_family!=-1) {
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1107 sh_video->codec=NULL; /* re-search */
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1108 printf("Can't find video codec for forced driver family, fallback to other drivers.\n");
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1109 video_family=-1;
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1110 continue;
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1111 }
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1112 printf("Can't find codec for video format 0x%X !\n",sh_video->format);
919
da072473937a Extended message for misisng codecs
arpi_esp
parents: 906
diff changeset
1113 printf("*** Try to upgrade %s from DOCS/codecs.conf\n",get_path("codecs.conf"));
da072473937a Extended message for misisng codecs
arpi_esp
parents: 906
diff changeset
1114 printf("*** If it's still not OK, then read DOCS/CODECS!\n");
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1115 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1116 if ( !nogui )
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1117 {
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1118 mplShMem->items.videodata.format=sh_video->format;
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1119 mplSendMessage( mplCantFindCodecForVideoFormat );
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1120 usec_sleep( 10000 );
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1121 }
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1122 #endif
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1123 exit(1);
626
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1124 }
1286
543a94b241a2 Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents: 1285
diff changeset
1125 // is next line needed anymore? - atmos ::
626
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1126 if(!allow_dshow && sh_video->codec->driver==4) continue; // skip DShow
1286
543a94b241a2 Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents: 1285
diff changeset
1127 else if(video_codec && strcmp(sh_video->codec->name,video_codec)) continue;
1299
fa50e6bc6091 As promised, -afm and -vfm to prefer audio/video driver family, -ac and -vc have higher precedence, so they can override -afm/-vfm.
atmos4
parents: 1296
diff changeset
1128 else if(video_family!=-1 && sh_video->codec->driver!=video_family) continue;
626
550ea1eba1a1 -nodshow/-dshow added, -afm is working again
arpi_esp
parents: 606
diff changeset
1129 break;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1130 }
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1131
1286
543a94b241a2 Replaced LGBs video codec forcing change with mine for audio and video codecs, which is IMHO more convenient cause codecs are selected by name instead of number, one unclearity is left to me, that's why audio_format is used once before codecs selection for MPEG_PS files, that's why I left -afm in for that one.
atmos4
parents: 1285
diff changeset
1132 printf("%s video codec: [%s] drv:%d (%s)\n",video_codec?"Forcing":"Detected",sh_video->codec->name,sh_video->codec->driver,sh_video->codec->info);
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1133
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1134 for(i=0;i<CODECS_MAX_OUTFMT;i++){
487
5dd417ed3a21 vo_debug printfs...
arpi_esp
parents: 482
diff changeset
1135 int ret;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1136 out_fmt=sh_video->codec->outfmt[i];
534
2a45d5adcc88 do not query vo drivers for format 0xFFFFFFFF (thanx to szabi)
arpi_esp
parents: 510
diff changeset
1137 if(out_fmt==0xFFFFFFFF) continue;
487
5dd417ed3a21 vo_debug printfs...
arpi_esp
parents: 482
diff changeset
1138 ret=video_out->query_format(out_fmt);
1183
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
1139 if(verbose) printf("vo_debug: query(%s) returned 0x%X\n",vo_format_name(out_fmt),ret);
487
5dd417ed3a21 vo_debug printfs...
arpi_esp
parents: 482
diff changeset
1140 if(ret) break;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1141 }
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1142 if(i>=CODECS_MAX_OUTFMT){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
1143 fprintf(stderr,"Sorry, selected video_out device is incompatible with this codec.\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
1144 GUI_MSG( mplIncompatibleVideoOutDevice )
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1145 exit(1);
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1146 }
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1147 sh_video->outfmtidx=i;
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1148
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1149 if(flip==-1){
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1150 // autodetect flipping
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1151 flip=0;
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1152 if(sh_video->codec->outflags[i]&CODECS_FLAG_FLIP)
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1153 if(!(sh_video->codec->outflags[i]&CODECS_FLAG_NOFLIP))
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1154 flip=1;
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1155 }
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1156
1183
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
1157 if(verbose) printf("vo_debug1: out_fmt=%s\n",vo_format_name(out_fmt));
487
5dd417ed3a21 vo_debug printfs...
arpi_esp
parents: 482
diff changeset
1158
1291
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1159 if(!init_video(sh_video)){
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1160 fprintf(stderr,"FATAL: Couldn't initialize video codec :(\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
1161 GUI_MSG( mplUnknowError )
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1162 exit(1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1163 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1164
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1165 // ================== Init output files for encoding ===============
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1166 if(encode_name){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1167 // encode file!!!
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1168 FILE *encode_file=fopen(encode_name,"rb");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1169 if(encode_file){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1170 fclose(encode_file);
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
1171 fprintf(stderr,"File already exists: %s (don't overwrite your favourite AVI!)\n",encode_name);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1172 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1173 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1174 encode_file=fopen(encode_name,"wb");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1175 if(!encode_file){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
1176 fprintf(stderr,"Cannot create file for encoding\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1177 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1178 }
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1179 write_avi_header_1(encode_file,mmioFOURCC('d', 'i', 'v', 'x'),sh_video->fps,sh_video->disp_w,sh_video->disp_h);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1180 fclose(encode_file);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1181 encode_index_name=malloc(strlen(encode_name)+8);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1182 strcpy(encode_index_name,encode_name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1183 strcat(encode_index_name,".index");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1184 if((encode_file=fopen(encode_index_name,"wb")))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1185 fclose(encode_file);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1186 else encode_index_name=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1187 has_audio=0; // disable audio !!!!!
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1188 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1189
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1190 // ========== Init keyboard FIFO (connection to libvo) ============
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1191
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1192 make_pipe(&keyb_fifo_get,&keyb_fifo_put);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1193
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1194 // ========== Init display (sh_video->disp_w*sh_video->disp_h/out_fmt) ============
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1195
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1196 #ifdef X11_FULLSCREEN
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1197 if(fullscreen){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1198 if(vo_init()){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1199 //if(verbose) printf("X11 running at %dx%d depth: %d\n",vo_screenwidth,vo_screenheight,vo_depthonscreen);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1200 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1201 if(!screen_size_xy) screen_size_xy=vo_screenwidth; // scale with asp.ratio
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1202 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1203 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1204
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1205 if(screen_size_xy>0){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1206 if(screen_size_xy<=8){
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1207 screen_size_x=screen_size_xy*sh_video->disp_w;
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1208 screen_size_y=screen_size_xy*sh_video->disp_h;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1209 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1210 screen_size_x=screen_size_xy;
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1211 screen_size_y=screen_size_xy*sh_video->disp_h/sh_video->disp_w;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1212 }
337
3ca0b1b739a5 changed fs+vm+zoom flags for libvo
arpi_esp
parents: 332
diff changeset
1213 } else if(!vidmode){
3ca0b1b739a5 changed fs+vm+zoom flags for libvo
arpi_esp
parents: 332
diff changeset
1214 if(!screen_size_x) screen_size_x=SCREEN_SIZE_X;
3ca0b1b739a5 changed fs+vm+zoom flags for libvo
arpi_esp
parents: 332
diff changeset
1215 if(!screen_size_y) screen_size_y=SCREEN_SIZE_Y;
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1216 if(screen_size_x<=8) screen_size_x*=sh_video->disp_w;
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1217 if(screen_size_y<=8) screen_size_y*=sh_video->disp_h;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1218 }
208
ae0f909ccc7c Adds code to deal with vidmode selection. -- mgraffam
mgraffam
parents: 190
diff changeset
1219
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1220 { const vo_info_t *info = video_out->get_info();
1183
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
1221 printf("VO: [%s] %dx%d => %dx%d %s %s%s%s%s\n",info->short_name,
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1222 sh_video->disp_w,sh_video->disp_h,
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1223 screen_size_x,screen_size_y,
1183
6fbcfe7f7f10 vo/ao_subdevice implemented
al3x
parents: 1177
diff changeset
1224 vo_format_name(out_fmt),
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1225 fullscreen?"fs ":"",
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1226 vidmode?"vm ":"",
766
479f753a66ae Added -flip passing to init.
atmosfear
parents: 758
diff changeset
1227 softzoom?"zoom ":"",
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1228 (flip==1)?"flip ":""
766
479f753a66ae Added -flip passing to init.
atmosfear
parents: 758
diff changeset
1229 // fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3)
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1230 );
1237
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1231 printf("VO: Description: %s\n"
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1232 "VO: Author: %s\n",
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1233 info->name,
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1234 info->author
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1235 );
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1236 if(strlen(info->comment) > 0)
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1237 printf("VO: Comment: %s\n", info->comment);
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1238 }
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1239
337
3ca0b1b739a5 changed fs+vm+zoom flags for libvo
arpi_esp
parents: 332
diff changeset
1240 if(verbose) printf("video_out->init(%dx%d->%dx%d,flags=%d,'%s',0x%X)\n",
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1241 sh_video->disp_w,sh_video->disp_h,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1242 screen_size_x,screen_size_y,
766
479f753a66ae Added -flip passing to init.
atmosfear
parents: 758
diff changeset
1243 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3),
337
3ca0b1b739a5 changed fs+vm+zoom flags for libvo
arpi_esp
parents: 332
diff changeset
1244 title,out_fmt);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1245
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1246 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1247 if ( !nogui )
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1248 {
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1249 mplShMem->items.videodata.width=sh_video->disp_w;
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1250 mplShMem->items.videodata.height=sh_video->disp_h;
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1251 mplSendMessage( mplSetVideoData );
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1252 }
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1253 #endif
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1254
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1255 if(video_out->init(sh_video->disp_w,sh_video->disp_h,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1256 screen_size_x,screen_size_y,
766
479f753a66ae Added -flip passing to init.
atmosfear
parents: 758
diff changeset
1257 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3),
337
3ca0b1b739a5 changed fs+vm+zoom flags for libvo
arpi_esp
parents: 332
diff changeset
1258 title,out_fmt)){
1217
149beb275b64 fatal-error printfs moved stdout->stderr
arpi_esp
parents: 1204
diff changeset
1259 fprintf(stderr,"FATAL: Cannot initialize video driver!\n");
748
717e4677d9ce stime compile bug fixed. and GUI_MSG macro defined.
pontscho
parents: 746
diff changeset
1260 GUI_MSG( mplCantInitVideoDriver )
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1261 exit(1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1262 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1263 if(verbose) printf("INFO: Video OUT driver init OK!\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1264
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1265 fflush(stdout);
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1266
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1267 //================== MAIN: ==========================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1268 {
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1269
1334
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
1270 float frame_correction=0; // average of A-V timestamp differences
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1271 int frame_corr_num=0; //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1272 float v_frame=0; // Video
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1273 float time_frame=0; // Timer
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1274 float c_total=0;
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1275 float max_pts_correction=0;//default_max_pts_correction;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1276 int eof=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1277 int force_redraw=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1278 float num_frames=0; // number of frames played
36
846535ace7a2 libmpeg2-0.2.0 merge
arpi_esp
parents: 33
diff changeset
1279 int grab_frames=0;
212
7034ef1f685d new option: -font
arpi_esp
parents: 208
diff changeset
1280 char osd_text_buffer[64];
715
2bd7c16d89e1 frame dropping hack
arpi_esp
parents: 701
diff changeset
1281 int drop_frame=0;
2bd7c16d89e1 frame dropping hack
arpi_esp
parents: 701
diff changeset
1282 int drop_frame_cnt=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1283
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1284 #ifdef HAVE_LIRC
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1285 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1286 if ( nogui )
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1287 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1288 lirc_mp_setup();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1289 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1290
1005
90682d6f84f5 terminal reset bug with gui fixed
pontscho
parents: 1002
diff changeset
1291 #ifdef HAVE_GUI
90682d6f84f5 terminal reset bug with gui fixed
pontscho
parents: 1002
diff changeset
1292 if ( nogui )
90682d6f84f5 terminal reset bug with gui fixed
pontscho
parents: 1002
diff changeset
1293 {
90682d6f84f5 terminal reset bug with gui fixed
pontscho
parents: 1002
diff changeset
1294 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1295 #ifdef USE_TERMCAP
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1296 load_termcap(NULL); // load key-codes
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1297 #endif
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 651
diff changeset
1298 if(f) getch2_enable();
1005
90682d6f84f5 terminal reset bug with gui fixed
pontscho
parents: 1002
diff changeset
1299 #ifdef HAVE_GUI
90682d6f84f5 terminal reset bug with gui fixed
pontscho
parents: 1002
diff changeset
1300 }
90682d6f84f5 terminal reset bug with gui fixed
pontscho
parents: 1002
diff changeset
1301 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1302
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1303 //========= Catch terminate signals: ================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1304 // terminate requests:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1305 signal(SIGTERM,exit_sighandler); // kill
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1306 signal(SIGHUP,exit_sighandler); // kill -HUP / xterm closed
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1307
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1308 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1309 if ( nogui )
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1310 #endif
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1311 signal(SIGINT,exit_sighandler); // Interrupt from keyboard
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1312
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1313 signal(SIGQUIT,exit_sighandler); // Quit from keyboard
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1314 // fatal errors:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1315 signal(SIGBUS,exit_sighandler); // bus error
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1316 signal(SIGSEGV,exit_sighandler); // segfault
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1317 signal(SIGILL,exit_sighandler); // illegal instruction
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1318 signal(SIGFPE,exit_sighandler); // floating point exc.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1319 signal(SIGABRT,exit_sighandler); // abort()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1320
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1321 //================ SETUP AUDIO ==========================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1322 current_module="setup_audio";
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1323
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1324 if(has_audio){
1237
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1325
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1326 const ao_info_t *info=audio_out->info;
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1327 printf("AO: [%s] %iHz %s %s\n"
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1328 "AO: Description: %s\n"
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1329 "AO: Author: %s\n",
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1330 info->short_name,
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1331 force_srate?force_srate:sh_audio->samplerate,
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1332 sh_audio->channels>1?"Stereo":"Mono",
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1333 audio_out_format_name(sh_audio->sample_format),
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1334 info->name,
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1335 info->author
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1336 );
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1337 if(strlen(info->comment) > 0)
53b23aee5aa7 Added some nice vo/ao info.
atmos4
parents: 1217
diff changeset
1338 printf("AO: Comment: %s\n", info->comment);
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1339
969
a2a296d46bff new option: -srate
arpi_esp
parents: 967
diff changeset
1340 if(!audio_out->init(force_srate?force_srate:sh_audio->samplerate,
a2a296d46bff new option: -srate
arpi_esp
parents: 967
diff changeset
1341 sh_audio->channels,sh_audio->sample_format,0)){
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1342 printf("couldn't open/init audio device -> NOSOUND\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1343 has_audio=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1344 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1345
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1346 // printf("Audio buffer size: %d bytes, delay: %5.3fs\n",audio_buffer_size,audio_buffer_delay);
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1347
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 751
diff changeset
1348 // fixup audio buffer size:
782
14bac9d91e22 audio buffering fixed
arpi_esp
parents: 780
diff changeset
1349 // if(outburst<MAX_OUTBURST){
14bac9d91e22 audio buffering fixed
arpi_esp
parents: 780
diff changeset
1350 // sh_audio->a_buffer_size=sh_audio->audio_out_minsize+outburst;
14bac9d91e22 audio buffering fixed
arpi_esp
parents: 780
diff changeset
1351 // printf("Audio out buffer size reduced to %d bytes\n",sh_audio->a_buffer_size);
14bac9d91e22 audio buffering fixed
arpi_esp
parents: 780
diff changeset
1352 // }
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 751
diff changeset
1353
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1354 // a_frame=-(audio_buffer_delay);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1355 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1356
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1357 a_frame=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1358
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1359 if(!has_audio){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1360 printf("Audio: no sound\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1361 if(verbose) printf("Freeing %d unused audio chunks\n",d_audio->packs);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1362 ds_free_packs(d_audio); // free buffered chunks
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1363 d_audio->id=-2; // do not read audio chunks
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1364 if(sh_audio) if(sh_audio->a_buffer) free(sh_audio->a_buffer);
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1365 sh_audio=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1366 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1367
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1368 current_module=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1369
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1370 //==================== START PLAYING =======================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1371
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1372 if(file_format==DEMUXER_TYPE_AVI && has_audio){
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1373 //a_pts=d_audio->pts;
1334
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
1374 if(verbose) printf("Initial frame delay A: %d V: %d\n",(int)sh_audio->audio.dwInitialFrames,(int)sh_video->video.dwInitialFrames);
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1375 if(!pts_from_bps){
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1376 float x=(float)(sh_audio->audio.dwInitialFrames-sh_video->video.dwInitialFrames)*sh_video->frametime;
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1377 audio_delay-=x;
1334
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
1378 if(verbose) printf("AVI Initial frame delay: %5.3f\n",x);
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1379 }
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1380 if(verbose){
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1381 // printf("v: audio_delay=%5.3f buffer_delay=%5.3f a_pts=%5.3f a_frame=%5.3f\n",
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1382 // audio_delay,audio_buffer_delay,a_pts,a_frame);
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1383 printf("START: a_pts=%5.3f v_pts=%5.3f \n",d_audio->pts,d_video->pts);
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1384 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1385 delay_corrected=0; // has to correct PTS diffs
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1386 d_video->pts=0;d_audio->pts=0; // PTS is outdated now!
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1387 } else {
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1388 pts_from_bps=0; // it must be 0 for mpeg/asf !
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1389 }
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1390 if(force_fps){
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1391 sh_video->fps=force_fps;
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1392 sh_video->frametime=1.0f/sh_video->fps;
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1393 printf("FPS forced to be %5.3f (ftime: %5.3f)\n",sh_video->fps,sh_video->frametime);
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1394 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1395
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1396 printf("Start playing...\n");fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1397
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1398 InitTimer();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1399
1124
0e95f30ffd4c -frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents: 1059
diff changeset
1400 total_time_usage_start=GetTimer();
0e95f30ffd4c -frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents: 1059
diff changeset
1401
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1402 while(!eof){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1403
1125
3ec8f4779e81 -frames 0 fixed
arpi_esp
parents: 1124
diff changeset
1404 if(play_n_frames>=0){
3ec8f4779e81 -frames 0 fixed
arpi_esp
parents: 1124
diff changeset
1405 --play_n_frames;
3ec8f4779e81 -frames 0 fixed
arpi_esp
parents: 1124
diff changeset
1406 if(play_n_frames<0) exit_player("Requested number of frames played");
3ec8f4779e81 -frames 0 fixed
arpi_esp
parents: 1124
diff changeset
1407 }
3ec8f4779e81 -frames 0 fixed
arpi_esp
parents: 1124
diff changeset
1408
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1409 /*========================== PLAY AUDIO ============================*/
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1410 while(has_audio){
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1411 unsigned int t;
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1412 int playsize=audio_out->get_space();
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1413
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1414 if(!playsize) break; // buffer is full, do not block here!!!
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1415
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1416 if(playsize>MAX_OUTBURST) playsize=MAX_OUTBURST; // we shouldn't exceed it!
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1417 //if(playsize>outburst) playsize=outburst;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 273
diff changeset
1418
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 273
diff changeset
1419 // Update buffer if needed
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1420 t=GetTimer();
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1421 current_module="decode_audio"; // Enter AUDIO decoder module
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1422 while(sh_audio->a_buffer_len<playsize && !d_audio->eof){
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1423 int ret=decode_audio(sh_audio,&sh_audio->a_buffer[sh_audio->a_buffer_len],
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1424 playsize-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len);
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
1425 if(ret>0) sh_audio->a_buffer_len+=ret; else break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1426 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1427 current_module=NULL; // Leave AUDIO decoder module
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 273
diff changeset
1428 t=GetTimer()-t;audio_time_usage+=t*0.000001;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1429
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1430 if(playsize>sh_audio->a_buffer_len) playsize=sh_audio->a_buffer_len;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1431
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1432 playsize=audio_out->play(sh_audio->a_buffer,playsize,0);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1433
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1434 if(playsize>0){
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1435 sh_audio->a_buffer_len-=playsize;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1436 memcpy(sh_audio->a_buffer,&sh_audio->a_buffer[playsize],sh_audio->a_buffer_len);
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1437 a_frame+=playsize/(float)(sh_audio->o_bps);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1438 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1439
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1440 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1441 } // if(has_audio)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1442
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1443 /*========================== UPDATE TIMERS ============================*/
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1444 #if 0
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1445 if(alsa){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1446 // Use system timer for sync, not audio card/driver
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1447 time_frame-=GetRelativeTime();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1448 if(time_frame<-0.1 || time_frame>0.1){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1449 time_frame=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1450 } else {
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1451 while(time_frame>0.022){
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1452 usec_sleep(time_frame-0.022);
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1453 time_frame-=GetRelativeTime();
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1454 }
103
506d7560279c timer fixes
arpi_esp
parents: 92
diff changeset
1455 while(time_frame>0.007){
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1456 usec_sleep(1000); // sleeps 1 clock tick (10ms)!
103
506d7560279c timer fixes
arpi_esp
parents: 92
diff changeset
1457 time_frame-=GetRelativeTime();
506d7560279c timer fixes
arpi_esp
parents: 92
diff changeset
1458 }
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1459 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1460 }
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1461 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1462
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1463 /*========================== PLAY VIDEO ============================*/
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1464
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1465 if(1)
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1466 while(1){
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1467
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1468 float frame_time=1;
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1469 float pts1=d_video->pts;
1291
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1470 int blit_frame=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1471
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1472 current_module="decode_video";
715
2bd7c16d89e1 frame dropping hack
arpi_esp
parents: 701
diff changeset
1473
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1474 //-------------------- Decode a frame: -----------------------
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1475
1291
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1476 if(file_format==DEMUXER_TYPE_MPEG_ES || file_format==DEMUXER_TYPE_MPEG_PS){
111
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1477 int in_frame=0;
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1478 float newfps;
111
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1479 videobuf_len=0;
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1480 while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1481 int i=sync_video_packet(d_video);
1295
f1199bd41d81 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1291
diff changeset
1482 void* buffer=&videobuffer[videobuf_len+4];
111
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1483 if(in_frame){
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1484 if(i<0x101 || i>=0x1B0){ // not slice code -> end of frame
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1485 #if 1
111
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1486 // send END OF FRAME code:
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1487 videobuffer[videobuf_len+0]=0;
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1488 videobuffer[videobuf_len+1]=0;
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1489 videobuffer[videobuf_len+2]=1;
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1490 videobuffer[videobuf_len+3]=0xFF;
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1491 videobuf_len+=4;
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1492 #endif
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1493 if(!i) eof=1; // EOF
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1494 break;
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1495 }
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1496 } else {
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1497 //if(i==0x100) in_frame=1; // picture startcode
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1498 if(i>=0x101 && i<0x1B0) in_frame=1; // picture startcode
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1499 else if(!i){ eof=1; break;} // EOF
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1500 }
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1501 if(grab_frames==2 && (i==0x1B3 || i==0x1B8)) grab_frames=1;
111
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1502 if(!read_video_packet(d_video)){ eof=1; break;} // EOF
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1503 //printf("read packet 0x%X, len=%d\n",i,videobuf_len);
1295
f1199bd41d81 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1291
diff changeset
1504 if(sh_video->codec->driver!=1){
1296
32f5d26baf86 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1295
diff changeset
1505 // if not libmpeg2:
1295
f1199bd41d81 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1291
diff changeset
1506 switch(i){
f1199bd41d81 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1291
diff changeset
1507 case 0x1B3: header_process_sequence_header (picture, buffer);break;
f1199bd41d81 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1291
diff changeset
1508 case 0x1B5: header_process_extension (picture, buffer);break;
f1199bd41d81 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1291
diff changeset
1509 }
f1199bd41d81 mpeg2 timing & fps fix for ffmpeg12 codec
arpi
parents: 1291
diff changeset
1510 }
111
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1511 }
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1512
111
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1513 if(videobuf_len>max_framesize) max_framesize=videobuf_len; // debug
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1514 //printf("--- SEND %d bytes\n",videobuf_len);
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1515 if(grab_frames==1){
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1516 FILE *f=fopen("grab.mpg","ab");
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1517 fwrite(videobuffer,videobuf_len-4,1,f);
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1518 fclose(f);
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1519 }
1291
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1520
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1521 blit_frame=decode_video(video_out,sh_video,videobuffer,videobuf_len,drop_frame);
111
3b4ccfecb823 using setjmp/longjmp to handle sig11 in libmpeg2
arpi_esp
parents: 109
diff changeset
1522
1291
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1523 // get mpeg fps:
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1524 newfps=frameratecode2framerate[picture->frame_rate_code]*0.0001f;
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1525 if(ABS(sh_video->fps-newfps)>0.01f) if(!force_fps){
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1526 printf("Warning! FPS changed %5.3f -> %5.3f (%f) [%d] \n",sh_video->fps,newfps,sh_video->fps-newfps,picture->frame_rate_code);
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1527 sh_video->fps=newfps;
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1528 sh_video->frametime=10000.0f/(float)frameratecode2framerate[picture->frame_rate_code];
1291
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1529 }
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1530
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1531 // fix mpeg2 frametime:
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1532 frame_time=(100+picture->repeat_count)*0.01f;
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1533 picture->repeat_count=0;
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1534
1291
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1535 } else {
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1536 // frame-based file formats: (AVI,ASF,MOV)
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1537 unsigned char* start=NULL;
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1538 int in_size=ds_get_packet(d_video,&start);
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1539 if(in_size<0){ eof=1;break;}
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1540 if(in_size>max_framesize) max_framesize=in_size;
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1541 blit_frame=decode_video(video_out,sh_video,start,in_size,drop_frame);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1542 }
1291
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
1543
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1544 //------------------------ frame decoded. --------------------
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1545
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1546 // Increase video timers:
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1547 num_frames+=frame_time;
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1548 frame_time*=sh_video->frametime;
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1549 if(file_format==DEMUXER_TYPE_ASF && !force_fps){
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1550 // .ASF files has no fixed FPS - just frame durations!
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1551 float d=d_video->pts-pts1;
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1552 if(d>=0 && d<5) frame_time=d;
595
12922295d3a8 OSD fixes
arpi_esp
parents: 591
diff changeset
1553 if(d>0){
12922295d3a8 OSD fixes
arpi_esp
parents: 591
diff changeset
1554 if(verbose)
12922295d3a8 OSD fixes
arpi_esp
parents: 591
diff changeset
1555 if((int)sh_video->fps==1000)
12922295d3a8 OSD fixes
arpi_esp
parents: 591
diff changeset
1556 printf("\rASF framerate: %d fps \n",(int)(1.0f/d));
12922295d3a8 OSD fixes
arpi_esp
parents: 591
diff changeset
1557 sh_video->frametime=d; // 1ms
12922295d3a8 OSD fixes
arpi_esp
parents: 591
diff changeset
1558 sh_video->fps=1.0f/d;
12922295d3a8 OSD fixes
arpi_esp
parents: 591
diff changeset
1559 }
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1560 }
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1561 v_frame+=frame_time;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1562 time_frame+=frame_time; // for nosound
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1563
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1564 if(file_format==DEMUXER_TYPE_MPEG_PS) d_video->pts+=frame_time;
940
108ac8795d19 -fps 1 fixed
arpi_esp
parents: 939
diff changeset
1565
108ac8795d19 -fps 1 fixed
arpi_esp
parents: 939
diff changeset
1566 if(verbose>1) printf("*** ftime=%5.3f ***\n",frame_time);
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1567
798
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1568 if(drop_frame){
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1569
798
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1570 if(has_audio){
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1571 int delay=audio_out->get_delay();
798
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1572 if(verbose>1)printf("delay=%d\n",delay);
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1573 time_frame=v_frame;
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1574 time_frame-=a_frame-(float)delay/(float)sh_audio->o_bps;
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1575 if(time_frame>-2*frame_time) {
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1576 drop_frame=0; // stop dropping frames
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1577 if (verbose>0) printf("\nstop frame drop %.2f\n", time_frame);
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1578 }else{
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1579 ++drop_frame_cnt;
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1580 if (verbose > 0 && drop_frame_cnt%10 == 0)
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1581 printf("\nstill dropping, %.2f\n", time_frame);
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1582 }
798
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1583 }
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1584
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1585 } else {
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1586 // It's time to sleep...
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1587 current_module="sleep";
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1588
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1589 time_frame-=GetRelativeTime(); // reset timer
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1590
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1591 if(has_audio){
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1592 int delay=audio_out->get_delay();
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 751
diff changeset
1593 if(verbose>1)printf("delay=%d\n",delay);
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1594 time_frame=v_frame;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1595 time_frame-=a_frame-(float)delay/(float)sh_audio->o_bps;
798
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1596 // we are out of time... drop next frame!
940
108ac8795d19 -fps 1 fixed
arpi_esp
parents: 939
diff changeset
1597 if(time_frame<-2*frame_time){
798
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1598 drop_frame=frame_dropping; // tricky!
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1599 ++drop_frame_cnt;
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1600 if (verbose>0) printf("\nframe drop %d, %.2f\n", drop_frame, time_frame);
798
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1601 }
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1602 } else {
1124
0e95f30ffd4c -frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents: 1059
diff changeset
1603 if( (time_frame<-3*frame_time || time_frame>3*frame_time) || benchmark)
0e95f30ffd4c -frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents: 1059
diff changeset
1604 time_frame=0;
0e95f30ffd4c -frames and -benchmark options to make chl & gabucino happy
arpi_esp
parents: 1059
diff changeset
1605
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1606 }
798
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1607
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 751
diff changeset
1608 if(verbose>1)printf("sleep: %5.3f a:%6.3f v:%6.3f \n",time_frame,a_frame,v_frame);
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1609
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1610 while(time_frame>0.005){
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1611 if(time_frame<=0.020)
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1612 usec_sleep(10000); // sleeps 1 clock tick (10ms)!
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1613 else
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1614 usec_sleep(1000000*(time_frame-0.002));
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1615 time_frame-=GetRelativeTime();
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1616 }
117
b21b7c2fa180 common vo->flip_page() call
arpi_esp
parents: 112
diff changeset
1617
715
2bd7c16d89e1 frame dropping hack
arpi_esp
parents: 701
diff changeset
1618 current_module="flip_page";
1250
76263a48a57b libavcodec zero frame DivX flickering fixed
arpi
parents: 1248
diff changeset
1619 if(blit_frame) video_out->flip_page();
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1620 // usec_sleep(50000); // test only!
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1621
715
2bd7c16d89e1 frame dropping hack
arpi_esp
parents: 701
diff changeset
1622 }
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1623
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1624 current_module=NULL;
715
2bd7c16d89e1 frame dropping hack
arpi_esp
parents: 701
diff changeset
1625
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1626 if(eof) break;
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1627 if(force_redraw){
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1628 --force_redraw;
577
feeb61dd92ea Fixed broken pause function.
atmosfear
parents: 564
diff changeset
1629 if(!force_redraw) osd_function=OSD_PLAY;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1630 continue;
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1631 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1632
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1633 // printf("A:%6.1f V:%6.1f A-V:%7.3f frame=%5.2f \r",d_audio->pts,d_video->pts,d_audio->pts-d_video->pts,a_frame);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1634 // fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1635
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1636 #if 1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1637 /*================ A-V TIMESTAMP CORRECTION: =========================*/
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1638 if(has_audio){
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1639 float a_pts=0;
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1640 float v_pts=0;
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1641
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1642 // unplayed bytes in our and soundcard/dma buffer:
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1643 int delay_bytes=audio_out->get_delay()+sh_audio->a_buffer_len;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1644 float delay=(float)delay_bytes/(float)sh_audio->o_bps;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1645
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1646 if(pts_from_bps){
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1647 // PTS = (audio position)/(bytes per sec)
815
e34052fd9633 i_bps vs. nAvgBytesPerSec
arpi_esp
parents: 798
diff changeset
1648 // a_pts=(ds_tell(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps;
e34052fd9633 i_bps vs. nAvgBytesPerSec
arpi_esp
parents: 798
diff changeset
1649 a_pts=(ds_tell(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->wf->nAvgBytesPerSec;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1650 delay_corrected=1; // hack
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1651 v_pts=d_video->pack_no*(float)sh_video->video.dwScale/(float)sh_video->video.dwRate;
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1652 if(verbose)printf("%5.3f|",v_pts-d_video->pts);
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1653 } else {
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1654 if(!delay_corrected && d_audio->pts){
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1655 float x=d_audio->pts-d_video->pts-(delay+audio_delay);
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1656 float y=-(delay+audio_delay);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1657 printf("Initial PTS delay: %5.3f sec (calculated: %5.3f)\n",x,y);
933
f5dbe3470eae -nobps seeking fixed
arpi_esp
parents: 924
diff changeset
1658 initial_pts_delay+=x;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1659 audio_delay+=x;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1660 delay_corrected=1;
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 337
diff changeset
1661 if(verbose)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1662 printf("v: audio_delay=%5.3f buffer_delay=%5.3f a.pts=%5.3f v.pts=%5.3f\n",
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1663 audio_delay,delay,d_audio->pts,d_video->pts);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1664 }
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1665 // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec)
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1666 a_pts=d_audio->pts;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1667 a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps;
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1668 v_pts=d_video->pts-frame_time;
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1669 }
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1670
933
f5dbe3470eae -nobps seeking fixed
arpi_esp
parents: 924
diff changeset
1671 if(verbose>1)printf("### A:%8.3f (%8.3f) V:%8.3f A-V:%7.4f \n",a_pts,a_pts-audio_delay-delay,v_pts,(a_pts-delay-audio_delay)-v_pts);
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1672
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1673 if(frame_corr_num==1){
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1674 float x=frame_correction;
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1675 if(delay_corrected){
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1676 // printf("A:%6.1f V:%6.1f A-V:%7.3f",a_pts-audio_delay-delay,v_pts,x);
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1677 printf("A:%6.1f (%6.1f) V:%6.1f A-V:%7.3f",a_pts,a_pts-audio_delay-delay,v_pts,x);
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1678 x*=0.1f;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1679 if(x<-max_pts_correction) x=-max_pts_correction; else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1680 if(x> max_pts_correction) x= max_pts_correction;
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1681 if(default_max_pts_correction>=0)
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1682 max_pts_correction=default_max_pts_correction;
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1683 else
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1684 max_pts_correction=sh_video->frametime*0.10; // +-10% of time
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1685 a_frame+=x; c_total+=x;
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1686 printf(" ct:%7.3f %3d %2d%% %2d%% %4.1f%% %d\r",c_total,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1687 (int)num_frames,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1688 (v_frame>0.5)?(int)(100.0*video_time_usage/(double)v_frame):0,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1689 (v_frame>0.5)?(int)(100.0*vout_time_usage/(double)v_frame):0,
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1690 (v_frame>0.5)?(100.0*audio_time_usage/(double)v_frame):0
798
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1691 ,drop_frame_cnt
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1692 );
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1693 fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1694 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1695 frame_corr_num=0; frame_correction=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1696 }
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1697
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1698 if(frame_corr_num>=0) frame_correction+=(a_pts-delay-audio_delay)-v_pts;
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1699
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1700 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1701 // No audio:
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
1702 //if(d_video->pts)
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
1703 float v_pts=d_video->pts;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1704 if(frame_corr_num==5){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1705 // printf("A: --- V:%6.1f \r",v_pts);
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1706 printf("V:%6.1f %3d %2d%% %2d%% %3.1f%% \r",v_pts,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1707 (int)num_frames,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1708 (v_frame>0.5)?(int)(100.0*video_time_usage/(double)v_frame):0,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1709 (v_frame>0.5)?(int)(100.0*vout_time_usage/(double)v_frame):0,
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1710 (v_frame>0.5)?(100.0*audio_time_usage/(double)v_frame):0
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1711 );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1712
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1713 fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1714 frame_corr_num=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1715 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1716 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1717 ++frame_corr_num;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1718 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1719
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1720 if(osd_visible){
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1721 --osd_visible;
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1722 if(!osd_visible) vo_osd_progbar_type=-1; // disable
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1723 }
371
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
1724
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
1725 if(osd_function==OSD_PAUSE){
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
1726 printf("\n------ PAUSED -------\r");fflush(stdout);
1156
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
1727 if (audio_out && has_audio)
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
1728 audio_out->pause(); // pause audio, keep data if possible
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1729 #ifdef HAVE_GUI
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1730 if ( nogui )
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1731 {
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1732 #endif
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1733 while(
371
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
1734 #ifdef HAVE_LIRC
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1735 lirc_mp_getinput()<=0 &&
371
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
1736 #endif
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1737 (!f || getch2(20)<=0) && mplayer_get_key()<=0){
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1738 video_out->check_events();
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1739 if(!f) usec_sleep(1000); // do not eat the CPU
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1740 }
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1741 osd_function=OSD_PLAY;
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1742 #ifdef HAVE_GUI
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1743 } else while( osd_function != OSD_PLAY ) usec_sleep( 1000 );
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1744 #endif
1156
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
1745 if (audio_out && has_audio)
5dc01778e055 has_audio checkings at reset and exit added
al3x
parents: 1125
diff changeset
1746 audio_out->resume(); // resume audio
371
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
1747 }
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
1748
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1749
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1750 if(!force_redraw) break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1751 } // while(v_frame<a_frame || force_redraw)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1752
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1753
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1754 //================= Keyboard events, SEEKing ====================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1755
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
1756 { int c;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1757 while(
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1758 #ifdef HAVE_LIRC
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1759 (c=lirc_mp_getinput())>0 ||
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1760 #endif
701
14c720e7b85c Fixed bug of mplayer freezing - better
arpi_esp
parents: 695
diff changeset
1761 (f && (c=getch2(0))>0) || (c=mplayer_get_key())>0) switch(c){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1762 // seek 10 sec
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1763 case KEY_RIGHT:
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1764 osd_function=OSD_FFW;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1765 rel_seek_secs+=10;break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1766 case KEY_LEFT:
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1767 osd_function=OSD_REW;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1768 rel_seek_secs-=10;break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1769 // seek 1 min
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1770 case KEY_UP:
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1771 osd_function=OSD_FFW;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1772 rel_seek_secs+=60;break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1773 case KEY_DOWN:
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1774 osd_function=OSD_REW;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1775 rel_seek_secs-=60;break;
651
617ae66624b3 -ss patch by Loring Holden
arpi_esp
parents: 645
diff changeset
1776 // seek 10 min
617ae66624b3 -ss patch by Loring Holden
arpi_esp
parents: 645
diff changeset
1777 case KEY_PAGE_UP:
617ae66624b3 -ss patch by Loring Holden
arpi_esp
parents: 645
diff changeset
1778 rel_seek_secs+=600;break;
617ae66624b3 -ss patch by Loring Holden
arpi_esp
parents: 645
diff changeset
1779 case KEY_PAGE_DOWN:
617ae66624b3 -ss patch by Loring Holden
arpi_esp
parents: 645
diff changeset
1780 rel_seek_secs-=600;break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1781 // delay correction:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1782 case '+':
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1783 audio_delay+=0.1; // increase audio buffer delay
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1784 a_frame-=0.1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1785 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1786 case '-':
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
1787 audio_delay-=0.1; // decrease audio buffer delay
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1788 a_frame+=0.1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1789 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1790 // quit
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1791 case KEY_ESC: // ESC
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1792 case KEY_ENTER: // ESC
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1793 case 'q': exit_player("Quit");
36
846535ace7a2 libmpeg2-0.2.0 merge
arpi_esp
parents: 33
diff changeset
1794 case 'g': grab_frames=2;break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1795 // pause
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1796 case 'p':
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1797 case ' ':
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
1798 osd_function=OSD_PAUSE;
371
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
1799 break;
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
1800 case 'o': // toggle OSD
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
1801 osd_level=(osd_level+1)%3;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1802 break;
939
ac9237ee06e1 Subtitle sync with 'z' and 'x'
laaz
parents: 937
diff changeset
1803 case 'z':
ac9237ee06e1 Subtitle sync with 'z' and 'x'
laaz
parents: 937
diff changeset
1804 sub_delay -= 0.1;
ac9237ee06e1 Subtitle sync with 'z' and 'x'
laaz
parents: 937
diff changeset
1805 break;
ac9237ee06e1 Subtitle sync with 'z' and 'x'
laaz
parents: 937
diff changeset
1806 case 'x':
ac9237ee06e1 Subtitle sync with 'z' and 'x'
laaz
parents: 937
diff changeset
1807 sub_delay += 0.1;
ac9237ee06e1 Subtitle sync with 'z' and 'x'
laaz
parents: 937
diff changeset
1808 break;
459
9dfad88a8107 add mixer support
pontscho
parents: 458
diff changeset
1809 case '*':
555
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1810 case '/': {
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1811 float mixer_l, mixer_r;
555
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1812 mixer_getvolume( &mixer_l,&mixer_r );
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1813 if(c=='*'){
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1814 mixer_l++; if ( mixer_l > 100 ) mixer_l = 100;
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1815 mixer_r++; if ( mixer_r > 100 ) mixer_r = 100;
555
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1816 } else {
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1817 mixer_l--; if ( mixer_l < 0 ) mixer_l = 0;
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1026
diff changeset
1818 mixer_r--; if ( mixer_r < 0 ) mixer_r = 0;
555
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1819 }
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1820 mixer_setvolume( mixer_l,mixer_r );
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1821
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1822 if(osd_level){
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1823 osd_visible=sh_video->fps; // 1 sec
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1824 vo_osd_progbar_type=OSD_VOLUME;
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1825 vo_osd_progbar_value=(mixer_l+mixer_r)*5/4;
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1826 //printf("volume: %d\n",vo_osd_progbar_value);
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1827 }
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1828 }
5bfbe42747e5 OSD progress bar for volume
arpi_esp
parents: 554
diff changeset
1829 break;
459
9dfad88a8107 add mixer support
pontscho
parents: 458
diff changeset
1830 case 'm':
510
2951d138ddaf add sub autoread & remove 'c' key
pontscho
parents: 500
diff changeset
1831 mixer_usemaster=!mixer_usemaster;
459
9dfad88a8107 add mixer support
pontscho
parents: 458
diff changeset
1832 break;
715
2bd7c16d89e1 frame dropping hack
arpi_esp
parents: 701
diff changeset
1833 case 'd':
798
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1834 frame_dropping=(frame_dropping+1)%3;
cfb984ecb5fd frame dropping...
arpi_esp
parents: 795
diff changeset
1835 printf("== drop: %d == \n",frame_dropping);
715
2bd7c16d89e1 frame dropping hack
arpi_esp
parents: 701
diff changeset
1836 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1837 }
651
617ae66624b3 -ss patch by Loring Holden
arpi_esp
parents: 645
diff changeset
1838 if (seek_to_sec) {
937
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
1839 int a,b; float d;
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
1840
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
1841 if (sscanf(seek_to_sec, "%d:%d:%f", &a,&b,&d)==3)
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
1842 rel_seek_secs += 3600*a +60*b +d ;
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
1843 else if (sscanf(seek_to_sec, "%d:%f", &a, &d)==2)
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
1844 rel_seek_secs += 60*a +d;
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
1845 else if (sscanf(seek_to_sec, "%f", &d)==1)
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
1846 rel_seek_secs += d;
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
1847
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
1848 seek_to_sec = NULL;
651
617ae66624b3 -ss patch by Loring Holden
arpi_esp
parents: 645
diff changeset
1849 }
937
a8a34da9c17f when using -ss:
laaz
parents: 933
diff changeset
1850
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1851 if(rel_seek_secs)
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1852 if(file_format==DEMUXER_TYPE_AVI && demuxer->idx_size<=0){
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1853 printf("Can't seek in raw .AVI streams! (index required, try with the -idx switch!) \n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1854 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1855 int skip_audio_bytes=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1856 float skip_audio_secs=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1857
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1858 // clear demux buffers:
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1859 if(has_audio){ ds_free_packs(d_audio);sh_audio->a_buffer_len=0;}
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1860 ds_free_packs(d_video);
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1861
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
1862 // printf("sh_audio->a_buffer_len=%d \n",sh_audio->a_buffer_len);
778
13c0dfde813b removed dummy audio track for -nosound, vo: flip detection
arpi_esp
parents: 766
diff changeset
1863
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1864
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1865 switch(file_format){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1866
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1867 case DEMUXER_TYPE_AVI: {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1868 //================= seek in AVI ==========================
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
1869 int rel_seek_frames=rel_seek_secs*sh_video->fps;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1870 int curr_audio_pos=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1871 int audio_chunk_pos=-1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1872 int video_chunk_pos=d_video->pos;
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1873
940
108ac8795d19 -fps 1 fixed
arpi_esp
parents: 939
diff changeset
1874 skip_video_frames=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1875 avi_audio_pts=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1876
940
108ac8795d19 -fps 1 fixed
arpi_esp
parents: 939
diff changeset
1877 // find nearest video keyframe chunk pos:
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1878 if(rel_seek_frames>0){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1879 // seek forward
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1880 while(video_chunk_pos<demuxer->idx_size){
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1881 int id=((AVIINDEXENTRY *)demuxer->idx)[video_chunk_pos].ckid;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1882 if(avi_stream_id(id)==d_video->id){ // video frame
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1883 if((--rel_seek_frames)<0 && ((AVIINDEXENTRY *)demuxer->idx)[video_chunk_pos].dwFlags&AVIIF_KEYFRAME) break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1884 ++skip_audio_bytes;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1885 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1886 ++video_chunk_pos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1887 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1888 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1889 // seek backward
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1890 while(video_chunk_pos>=0){
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1891 int id=((AVIINDEXENTRY *)demuxer->idx)[video_chunk_pos].ckid;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1892 if(avi_stream_id(id)==d_video->id){ // video frame
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1893 if((++rel_seek_frames)>0 && ((AVIINDEXENTRY *)demuxer->idx)[video_chunk_pos].dwFlags&AVIIF_KEYFRAME) break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1894 --skip_audio_bytes;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1895 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1896 --video_chunk_pos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1897 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1898 }
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1899 demuxer->idx_pos_a=demuxer->idx_pos_v=demuxer->idx_pos=video_chunk_pos;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1900 // printf("%d frames skipped\n",skip_audio_bytes);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1901
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1902 // re-calc video pts:
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1903 d_video->pack_no=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1904 for(i=0;i<video_chunk_pos;i++){
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1905 int id=((AVIINDEXENTRY *)demuxer->idx)[i].ckid;
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1906 if(avi_stream_id(id)==d_video->id) ++d_video->pack_no;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1907 }
1014
e01dc1a88edf fixed punkso's mess... local variables moved back to main()
arpi_esp
parents: 1009
diff changeset
1908 num_frames=d_video->pack_no;
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1909 avi_video_pts=d_video->pack_no*(float)sh_video->video.dwScale/(float)sh_video->video.dwRate;
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1910
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1911 if(has_audio){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1912 int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1913 int apos=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1914 int last=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1915 int len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1916
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1917 // calc new audio position in audio stream: (using avg.bps value)
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1918 curr_audio_pos=(avi_video_pts) * sh_audio->wf->nAvgBytesPerSec;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1919 if(curr_audio_pos<0)curr_audio_pos=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1920 #if 1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1921 curr_audio_pos&=~15; // requires for PCM formats!!!
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1922 #else
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1923 curr_audio_pos/=sh_audio->wf->nBlockAlign;
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1924 curr_audio_pos*=sh_audio->wf->nBlockAlign;
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1925 demuxer->audio_seekable=1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1926 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1927
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1928 // find audio chunk pos:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1929 for(i=0;i<video_chunk_pos;i++){
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1930 int id=((AVIINDEXENTRY *)demuxer->idx)[i].ckid;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1931 if(avi_stream_id(id)==d_audio->id){
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1932 len=((AVIINDEXENTRY *)demuxer->idx)[i].dwChunkLength;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1933 last=i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1934 if(apos<=curr_audio_pos && curr_audio_pos<(apos+len)){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1935 if(verbose)printf("break;\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1936 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1937 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1938 apos+=len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1939 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1940 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1941 if(verbose)printf("XXX i=%d last=%d apos=%d curr_audio_pos=%d \n",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1942 i,last,apos,curr_audio_pos);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1943 // audio_chunk_pos=last; // maybe wrong (if not break; )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1944 audio_chunk_pos=i; // maybe wrong (if not break; )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1945 skip_audio_bytes=curr_audio_pos-apos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1946
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1947 // update stream position:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1948 d_audio->pos=audio_chunk_pos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1949 d_audio->dpos=apos;
933
f5dbe3470eae -nobps seeking fixed
arpi_esp
parents: 924
diff changeset
1950 d_audio->pts=initial_pts_delay+(float)apos/(float)sh_audio->wf->nAvgBytesPerSec;
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1951 demuxer->idx_pos_a=demuxer->idx_pos_v=demuxer->idx_pos=audio_chunk_pos;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1952
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
1953 if(!(sh_audio->codec->flags&CODECS_FLAG_SEEKABLE)){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1954 #if 0
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1955 // curr_audio_pos=apos; // selected audio codec can't seek in chunk
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1956 skip_audio_secs=(float)skip_audio_bytes/(float)sh_audio->wf->nAvgBytesPerSec;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1957 //printf("Seek_AUDIO: %d bytes --> %5.3f secs\n",skip_audio_bytes,skip_audio_secs);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1958 skip_audio_bytes=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1959 #else
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1960 int d=skip_audio_bytes % sh_audio->wf->nBlockAlign;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1961 skip_audio_bytes-=d;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1962 // curr_audio_pos-=d;
442
0828c5d13418 fixed mplayer.c
gabucino
parents: 440
diff changeset
1963 skip_audio_secs=(float)d/(float)sh_audio->wf->nAvgBytesPerSec;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1964 //printf("Seek_AUDIO: %d bytes --> %5.3f secs\n",d,skip_audio_secs);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1965 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1966 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1967 // now: audio_chunk_pos=pos in index
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1968 // skip_audio_bytes=bytes to skip from that chunk
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1969 // skip_audio_secs=time to play audio before video (if can't skip)
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1970
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1971 // calc skip_video_frames & adjust video pts counter:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1972 // i=last;
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1973 for(i=demuxer->idx_pos;i<video_chunk_pos;i++){
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1974 int id=((AVIINDEXENTRY *)demuxer->idx)[i].ckid;
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1975 if(avi_stream_id(id)==d_video->id) ++skip_video_frames;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1976 }
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1977 // requires for correct audio pts calculation (demuxer):
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
1978 avi_video_pts-=skip_video_frames*(float)sh_video->video.dwScale/(float)sh_video->video.dwRate;
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
1979
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1980 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1981
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1982 if(verbose) printf("SEEK: idx=%d (a:%d v:%d) v.skip=%d a.skip=%d/%4.3f \n",
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1983 demuxer->idx_pos,audio_chunk_pos,video_chunk_pos,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1984 skip_video_frames,skip_audio_bytes,skip_audio_secs);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1985
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1986 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1987 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1988
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1989 case DEMUXER_TYPE_ASF: {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1990 //================= seek in ASF ==========================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1991 float p_rate=10; // packets / sec
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1992 int rel_seek_packs=rel_seek_secs*p_rate;
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 578
diff changeset
1993 int rel_seek_bytes=rel_seek_packs*asf_packetsize;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1994 int newpos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1995 //printf("ASF: packs: %d duration: %d \n",(int)fileh.packets,*((int*)&fileh.duration));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1996 // printf("ASF_seek: %d secs -> %d packs -> %d bytes \n",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1997 // rel_seek_secs,rel_seek_packs,rel_seek_bytes);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1998 newpos=demuxer->filepos+rel_seek_bytes;
638
db92248b5e78 'asf seeking before start' bug fixed
arpi_esp
parents: 626
diff changeset
1999 if(newpos<0 || newpos<demuxer->movi_start) newpos=demuxer->movi_start;
645
aae0cdcf6748 asf seek debug printf removed
arpi_esp
parents: 641
diff changeset
2000 // printf("\r -- asf: newpos=%d -- \n",newpos);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2001 stream_seek(demuxer->stream,newpos);
1009
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2002
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2003 ds_fill_buffer(d_video);
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2004 if(has_audio) ds_fill_buffer(d_audio);
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2005
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2006 while(1){
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2007 if(has_audio){
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2008 // sync audio:
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2009 if (d_video->pts > d_audio->pts){
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2010 if(!ds_fill_buffer(d_audio)) has_audio=0; // skip audio. EOF?
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2011 continue;
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2012 }
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2013 }
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2014 if(d_video->flags&1) break; // found a keyframe!
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2015 if(!ds_fill_buffer(d_video)) break; // skip frame. EOF?
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2016 }
c51d7e4853d6 finished .asf seeking
arpi_esp
parents: 1005
diff changeset
2017
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2018 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2019 break;
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
2020
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2021 case DEMUXER_TYPE_MPEG_ES:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2022 case DEMUXER_TYPE_MPEG_PS: {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2023 //================= seek in MPEG ==========================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2024 int newpos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2025 if(picture->bitrate==0x3FFFF) // unspecified?
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2026 newpos=demuxer->filepos+2324*75*rel_seek_secs; // 174.3 kbyte/sec
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2027 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2028 newpos=demuxer->filepos+(picture->bitrate*1000/16)*rel_seek_secs;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2029
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2030 if(newpos<seek_to_byte) newpos=seek_to_byte;
495
d4eb6bd44bbc Seeking to sector boundary (STREAM_BUFFER_SIZE) for MPEGs
lgb
parents: 492
diff changeset
2031 newpos&=~(STREAM_BUFFER_SIZE-1); /* sector boundary */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2032 stream_seek(demuxer->stream,newpos);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2033 // re-sync video:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2034 videobuf_code_len=0; // reset ES stream buffer
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2035 while(1){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2036 int i=sync_video_packet(d_video);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2037 if(i==0x1B3 || i==0x1B8) break; // found it!
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2038 if(!i || !skip_video_packet(d_video)){ eof=1; break;} // EOF
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2039 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2040 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2041 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2042
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2043 } // switch(file_format)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2044
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2045 //====================== re-sync audio: =====================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2046 if(has_audio){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2047
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2048 if(skip_audio_bytes){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2049 demux_read_data(d_audio,NULL,skip_audio_bytes);
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
2050 //d_audio->pts=0; // PTS is outdated because of the raw data skipping
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2051 }
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
2052
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2053 current_module="resync_audio";
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1302
diff changeset
2054 resync_audio_stream(sh_audio);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2055
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2056 // re-sync PTS (MPEG-PS only!!!)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2057 if(file_format==DEMUXER_TYPE_MPEG_PS)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2058 if(d_video->pts && d_audio->pts){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2059 if (d_video->pts < d_audio->pts){
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
2060
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2061 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2062 while(d_video->pts > d_audio->pts){
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1302
diff changeset
2063 skip_audio_frame(sh_audio);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2064 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2065 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2066 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2067
1334
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2068 current_module="audio_reset";
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2069 audio_out->reset(); // stop audio, throwing away buffered data
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
2070 current_module=NULL;
722
b570318ac2f4 audio_reset nosound fix
arpi_esp
parents: 721
diff changeset
2071
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2072 c_total=0; // kell ez?
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2073 printf("A:%6.1f V:%6.1f A-V:%7.3f",d_audio->pts,d_video->pts,0.0f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2074 printf(" ct:%7.3f \r",c_total);fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2075 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2076 printf("A: --- V:%6.1f \r",d_video->pts);fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2077 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2078
1334
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2079 // Set OSD:
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2080 if(osd_level){
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2081 int len=((demuxer->movi_end-demuxer->movi_start)>>8);
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2082 if(len>0){
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2083 osd_visible=sh_video->fps; // 1 sec
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2084 vo_osd_progbar_type=0;
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2085 vo_osd_progbar_value=(demuxer->filepos-demuxer->movi_start)/len;
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2086 }
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2087 }
061cabfbc07b some more cleanup
arpi
parents: 1331
diff changeset
2088
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2089 max_pts_correction=0.1;
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
2090 frame_corr_num=0; // -5
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 856
diff changeset
2091 frame_correction=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2092 force_redraw=5;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 723
diff changeset
2093 a_frame=-skip_audio_secs;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2094 v_frame=0; // !!!!!!
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2095 audio_time_usage=0; video_time_usage=0; vout_time_usage=0;
721
05c1bfc5d3ac audio_reset, dshow NULLptr fix
arpi_esp
parents: 715
diff changeset
2096
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2097 }
723
c3e0bdb64027 add gui support
pontscho
parents: 722
diff changeset
2098 rel_seek_secs=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2099 } // keyboard event handler
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2100
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
2101 //================= Update OSD ====================
955
3a3304cd9fd5 libao support
arpi_esp
parents: 940
diff changeset
2102 { if(osd_level>=2){
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
2103 int pts=d_video->pts;
595
12922295d3a8 OSD fixes
arpi_esp
parents: 591
diff changeset
2104 if(pts==osd_last_pts-1) ++pts; else osd_last_pts=pts;
371
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
2105 vo_osd_text=osd_text_buffer;
595
12922295d3a8 OSD fixes
arpi_esp
parents: 591
diff changeset
2106 sprintf(vo_osd_text,"%c %02d:%02d:%02d",osd_function,pts/3600,(pts/60)%60,pts%60);
371
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
2107 } else {
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
2108 vo_osd_text=NULL;
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
2109 }
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
2110 // for(i=1;i<=11;i++) osd_text_buffer[10+i]=i;osd_text_buffer[10+i]=0;
371
55f9067ad176 OSD fixes, patch by Kebert Martin
arpi_esp
parents: 363
diff changeset
2111 // vo_osd_text=osd_text_buffer;
458
49b0474b2e26 I really hope that you will learn how to use cvs, sooner or later...
arpi_esp
parents: 452
diff changeset
2112
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
2113 // find sub
1204
646ac6d78952 sub at key=0 fixed
arpi_esp
parents: 1190
diff changeset
2114 if(subtitles && d_video->pts>0){
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
2115 int pts=d_video->pts;
398
f5918fc8df10 more cleanup of video decoding
arpi_esp
parents: 396
diff changeset
2116 if(sub_fps==0) sub_fps=sh_video->fps;
482
1a2c4f3e7a10 sub control optimized
arpi_esp
parents: 470
diff changeset
2117 current_module="find_sub";
780
24e4e6e5aa1c audio sync cleanup and -bps fixed
arpi_esp
parents: 778
diff changeset
2118 find_sub(subtitles,sub_uses_time?(100*(pts+sub_delay)):((pts+sub_delay)*sub_fps)); // FIXME! frame counter...
482
1a2c4f3e7a10 sub control optimized
arpi_esp
parents: 470
diff changeset
2119 current_module=NULL;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents: 240
diff changeset
2120 }
554
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
2121
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
2122 // DVD sub:
557
e4aca0d51268 some dvd sub parsing and check added
arpi_esp
parents: 555
diff changeset
2123 { unsigned char* packet=NULL;
e4aca0d51268 some dvd sub parsing and check added
arpi_esp
parents: 555
diff changeset
2124 int len=ds_get_packet_sub(d_dvdsub,&packet);
e4aca0d51268 some dvd sub parsing and check added
arpi_esp
parents: 555
diff changeset
2125 if(len>=2){
e4aca0d51268 some dvd sub parsing and check added
arpi_esp
parents: 555
diff changeset
2126 int len2;
e4aca0d51268 some dvd sub parsing and check added
arpi_esp
parents: 555
diff changeset
2127 len2=(packet[0]<<8)+packet[1];
561
36fd71db0d33 spudec_decode() moved from mplayer.c to spudec.c
arpi_esp
parents: 560
diff changeset
2128 if(verbose) printf("\rDVD sub: %d / %d \n",len,len2);
36fd71db0d33 spudec_decode() moved from mplayer.c to spudec.c
arpi_esp
parents: 560
diff changeset
2129 if(len==len2)
36fd71db0d33 spudec_decode() moved from mplayer.c to spudec.c
arpi_esp
parents: 560
diff changeset
2130 spudec_decode(packet,len);
36fd71db0d33 spudec_decode() moved from mplayer.c to spudec.c
arpi_esp
parents: 560
diff changeset
2131 else
36fd71db0d33 spudec_decode() moved from mplayer.c to spudec.c
arpi_esp
parents: 560
diff changeset
2132 printf("fragmented dvd-subs not yet supported!!!\n");
557
e4aca0d51268 some dvd sub parsing and check added
arpi_esp
parents: 555
diff changeset
2133 } else if(len>=0) {
e4aca0d51268 some dvd sub parsing and check added
arpi_esp
parents: 555
diff changeset
2134 printf("invalud dvd sub\n");
554
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
2135 }
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
2136 }
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
2137
220
5348fa1313fe OSD functionality improved
arpi_esp
parents: 215
diff changeset
2138 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2139
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2140 } // while(!eof)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2141
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2142 exit_player("End of file");
109
ed4178146cc5 small code cleanup, removed unused variables
arpi_esp
parents: 103
diff changeset
2143 }
ed4178146cc5 small code cleanup, removed unused variables
arpi_esp
parents: 103
diff changeset
2144 return 1;
ed4178146cc5 small code cleanup, removed unused variables
arpi_esp
parents: 103
diff changeset
2145 }