annotate libmpdemux/demuxer.c @ 16198:3e8e281ecc86

fix brokeness caused by demuxer patch, this code is useless for any case other than avi and should not be run even then. patch by Uoti Urpala (urpala BANG cc MEEP helsinki MEEP fi)
author ods15
date Thu, 11 Aug 2005 17:01:13 +0000
parents 6b86089c2edd
children f443f849531b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 //=================== DEMUXER v2.5 =========================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2
1430
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1428
diff changeset
3 #include <stdio.h>
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1428
diff changeset
4 #include <stdlib.h>
3150
8dae87740d33 bad malloc+strcpy => strdup
arpi
parents: 3101
diff changeset
5 #include <string.h>
1430
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1428
diff changeset
6 #include <unistd.h>
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1428
diff changeset
7
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1421
diff changeset
8 #include <sys/types.h>
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1421
diff changeset
9 #include <sys/stat.h>
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1421
diff changeset
10
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
11 #include "config.h"
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1497
diff changeset
12 #include "mp_msg.h"
1584
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
13 #include "help_mp.h"
9709
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
14 #include "../m_config.h"
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
15
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 554
diff changeset
16 #include "stream.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 554
diff changeset
17 #include "demuxer.h"
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
18 #include "stheader.h"
4551
716b00618bfc add mfi support
pontscho
parents: 4451
diff changeset
19 #include "mf.h"
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
20
14245
815f03b7cee5 removing AFMT_ dependancy
alex
parents: 14197
diff changeset
21 #include "../libaf/af_format.h"
5084
2fd327bf64fc added get_sh_video/audio and realmedia seeking
alex
parents: 5068
diff changeset
22 #include "../libvo/fastmemcpy.h"
2fd327bf64fc added get_sh_video/audio and realmedia seeking
alex
parents: 5068
diff changeset
23
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
24
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
25 // Demuxer list
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
26 extern demuxer_desc_t demuxer_desc_rawaudio;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
27 extern demuxer_desc_t demuxer_desc_rawvideo;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
28 extern demuxer_desc_t demuxer_desc_tv;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
29 extern demuxer_desc_t demuxer_desc_mf;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
30 extern demuxer_desc_t demuxer_desc_avi;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
31 extern demuxer_desc_t demuxer_desc_y4m;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
32 extern demuxer_desc_t demuxer_desc_asf;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
33 extern demuxer_desc_t demuxer_desc_nsv;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
34 extern demuxer_desc_t demuxer_desc_nuv;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
35 extern demuxer_desc_t demuxer_desc_real;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
36 extern demuxer_desc_t demuxer_desc_smjpeg;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
37 extern demuxer_desc_t demuxer_desc_matroska;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
38 extern demuxer_desc_t demuxer_desc_realaudio;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
39 extern demuxer_desc_t demuxer_desc_vqf;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
40 extern demuxer_desc_t demuxer_desc_mov;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
41 extern demuxer_desc_t demuxer_desc_vivo;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
42 extern demuxer_desc_t demuxer_desc_fli;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
43 extern demuxer_desc_t demuxer_desc_film;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
44 extern demuxer_desc_t demuxer_desc_roq;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
45 extern demuxer_desc_t demuxer_desc_gif;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
46 extern demuxer_desc_t demuxer_desc_ogg;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
47 extern demuxer_desc_t demuxer_desc_avs;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
48 extern demuxer_desc_t demuxer_desc_pva;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
49 extern demuxer_desc_t demuxer_desc_mpeg_ts;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
50 extern demuxer_desc_t demuxer_desc_lmlm4;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
51 extern demuxer_desc_t demuxer_desc_mpeg_ps;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
52 extern demuxer_desc_t demuxer_desc_mpeg_pes;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
53 extern demuxer_desc_t demuxer_desc_mpeg_es;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
54 extern demuxer_desc_t demuxer_desc_mpeg4_es;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
55 extern demuxer_desc_t demuxer_desc_h264_es;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
56 extern demuxer_desc_t demuxer_desc_rawdv;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
57 extern demuxer_desc_t demuxer_desc_audio;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
58 extern demuxer_desc_t demuxer_desc_xmms;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
59 extern demuxer_desc_t demuxer_desc_mpeg_ty;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
60 extern demuxer_desc_t demuxer_desc_rtp;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
61 extern demuxer_desc_t demuxer_desc_lavf;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
62 extern demuxer_desc_t demuxer_desc_aac;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
63
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
64 demuxer_desc_t* demuxer_list[] = {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
65 &demuxer_desc_rawaudio,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
66 &demuxer_desc_rawvideo,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
67 #ifdef USE_TV
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
68 &demuxer_desc_tv,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
69 #endif
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
70 &demuxer_desc_mf,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
71 &demuxer_desc_avi,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
72 &demuxer_desc_y4m,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
73 &demuxer_desc_asf,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
74 &demuxer_desc_nsv,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
75 &demuxer_desc_nuv,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
76 &demuxer_desc_real,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
77 &demuxer_desc_smjpeg,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
78 #ifdef HAVE_MATROSKA
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
79 &demuxer_desc_matroska,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
80 #endif
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
81 &demuxer_desc_realaudio,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
82 &demuxer_desc_vqf,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
83 &demuxer_desc_mov,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
84 &demuxer_desc_vivo,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
85 &demuxer_desc_fli,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
86 &demuxer_desc_film,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
87 &demuxer_desc_roq,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
88 #ifdef HAVE_GIF
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
89 &demuxer_desc_gif,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
90 #endif
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
91 #ifdef HAVE_OGGVORBIS
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
92 &demuxer_desc_ogg,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
93 #endif
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
94 #ifdef USE_WIN32DLL
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
95 &demuxer_desc_avs,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
96 #endif
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
97 &demuxer_desc_pva,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
98 &demuxer_desc_mpeg_ts,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
99 &demuxer_desc_lmlm4,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
100 &demuxer_desc_mpeg_ps,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
101 &demuxer_desc_mpeg_pes,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
102 &demuxer_desc_mpeg_es,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
103 &demuxer_desc_mpeg4_es,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
104 &demuxer_desc_h264_es,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
105 #ifdef HAVE_LIBDV095
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
106 &demuxer_desc_rawdv,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
107 #endif
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
108 &demuxer_desc_audio,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
109 #ifdef HAVE_XMMS
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
110 &demuxer_desc_xmms,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
111 #endif
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
112 &demuxer_desc_mpeg_ty,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
113 #ifdef STREAMING_LIVE_DOT_COM
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
114 &demuxer_desc_rtp,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
115 #endif
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
116 #ifdef USE_LIBAVFORMAT
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
117 &demuxer_desc_lavf,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
118 #endif
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
119 &demuxer_desc_aac,
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
120 NULL
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
121 };
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
122
14046
4802041ab8e3 Output more information about vids, aids, sids, alangs and slangs with -identify. Patch by kiriuja <mplayer-patches@en-directo.net>
mosu
parents: 14034
diff changeset
123 // Should be set to 1 by demux module if ids it passes to new_sh_audio and
4802041ab8e3 Output more information about vids, aids, sids, alangs and slangs with -identify. Patch by kiriuja <mplayer-patches@en-directo.net>
mosu
parents: 14034
diff changeset
124 // new_sh_video don't match aids and vids it accepts from the command line
4802041ab8e3 Output more information about vids, aids, sids, alangs and slangs with -identify. Patch by kiriuja <mplayer-patches@en-directo.net>
mosu
parents: 14034
diff changeset
125 int demux_aid_vid_mismatch = 0;
4802041ab8e3 Output more information about vids, aids, sids, alangs and slangs with -identify. Patch by kiriuja <mplayer-patches@en-directo.net>
mosu
parents: 14034
diff changeset
126
1643
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
127 void free_demuxer_stream(demux_stream_t *ds){
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
128 ds_free_packs(ds);
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
129 free(ds);
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
130 }
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
131
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
132 demux_stream_t* new_demuxer_stream(struct demuxer_st *demuxer,int id){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
133 demux_stream_t* ds=malloc(sizeof(demux_stream_t));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
134 ds->buffer_pos=ds->buffer_size=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
135 ds->buffer=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
136 ds->pts=0;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
137 ds->pts_bytes=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 ds->eof=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
139 ds->pos=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
140 ds->dpos=0;
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 828
diff changeset
141 ds->pack_no=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 //---------------
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 ds->packs=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 ds->bytes=0;
6192
f03fe2e84efd clone_demux_packet(), using refcounting to avoid memcpy()
arpi
parents: 5930
diff changeset
145 ds->first=ds->last=ds->current=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
146 ds->id=id;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147 ds->demuxer=demuxer;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148 //----------------
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149 ds->asf_seq=-1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
150 ds->asf_packet=NULL;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 1
diff changeset
151 //----------------
7754
0568245deeb8 ss_div/ss_mul defaults to 0
arpi
parents: 7594
diff changeset
152 ds->ss_mul=ds->ss_div=0;
2419
24ba3dfb8e89 compressed mov audio fixed
arpi
parents: 2338
diff changeset
153 //----------------
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 1
diff changeset
154 ds->sh=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
155 return ds;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
156 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
157
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
158
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
159 /**
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
160 * Get demuxer description structure for a given demuxer type
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
161 *
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
162 * @param file_format type of the demuxer
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
163 * @return structure for the demuxer, NULL if not found
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
164 */
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
165 static demuxer_desc_t* get_demuxer_desc_from_type(int file_format)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
166 {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
167 int i;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
168
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
169 for (i = 0; demuxer_list[i]; i++)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
170 if (file_format == demuxer_list[i]->type)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
171 return demuxer_list[i];
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
172
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
173 return NULL;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
174 }
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
176
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
177 demuxer_t* new_demuxer(stream_t *stream,int type,int a_id,int v_id,int s_id,char *filename){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
178 demuxer_t *d=malloc(sizeof(demuxer_t));
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 554
diff changeset
179 memset(d,0,sizeof(demuxer_t));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
180 d->stream=stream;
598
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 587
diff changeset
181 d->movi_start=stream->start_pos;
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 587
diff changeset
182 d->movi_end=stream->end_pos;
1623
5908dd344067 added demuxer->seekable flag to generalize seeking ability test
arpi
parents: 1584
diff changeset
183 d->seekable=1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184 d->synced=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 d->filepos=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 d->audio=new_demuxer_stream(d,a_id);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 d->video=new_demuxer_stream(d,v_id);
552
c2a449f90087 dvd sub support reading
arpi_esp
parents: 291
diff changeset
188 d->sub=new_demuxer_stream(d,s_id);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
189 d->type=type;
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
190 if(type)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
191 if (!(d->desc = get_demuxer_desc_from_type(type)))
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
192 mp_msg(MSGT_DEMUXER,MSGL_ERR,"BUG! Invalid demuxer type in new_demuxer(), big troubles ahead.");
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
193 if(filename) // Filename hack for avs_check_file
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
194 d->filename=strdup(filename);
1497
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
195 stream_reset(stream);
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
196 stream_seek(stream,stream->start_pos);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
197 return d;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
200 sh_audio_t* new_sh_audio(demuxer_t *demuxer,int id){
5084
2fd327bf64fc added get_sh_video/audio and realmedia seeking
alex
parents: 5068
diff changeset
201 if(id > MAX_A_STREAMS-1 || id < 0)
4642
e534c7dc0cc0 check for overflow in new_sh_video and new_sh_audio
alex
parents: 4587
diff changeset
202 {
e534c7dc0cc0 check for overflow in new_sh_video and new_sh_audio
alex
parents: 4587
diff changeset
203 mp_msg(MSGT_DEMUXER,MSGL_WARN,"Requested audio stream id overflow (%d > %d)\n",
e534c7dc0cc0 check for overflow in new_sh_video and new_sh_audio
alex
parents: 4587
diff changeset
204 id, MAX_A_STREAMS);
e534c7dc0cc0 check for overflow in new_sh_video and new_sh_audio
alex
parents: 4587
diff changeset
205 return NULL;
e534c7dc0cc0 check for overflow in new_sh_video and new_sh_audio
alex
parents: 4587
diff changeset
206 }
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
207 if(demuxer->a_streams[id]){
1584
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
208 mp_msg(MSGT_DEMUXER,MSGL_WARN,MSGTR_AudioStreamRedefined,id);
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
209 } else {
13357
c605df89ca9f moved sh_audio initialization from dec_audio to demuxer.c to fix
reimar
parents: 13301
diff changeset
210 sh_audio_t *sh;
6951
0504c8beccba messages moved again
jaf
parents: 6943
diff changeset
211 mp_msg(MSGT_DEMUXER,MSGL_V,MSGTR_FoundAudioStream,id);
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
212 demuxer->a_streams[id]=malloc(sizeof(sh_audio_t));
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
213 memset(demuxer->a_streams[id],0,sizeof(sh_audio_t));
13357
c605df89ca9f moved sh_audio initialization from dec_audio to demuxer.c to fix
reimar
parents: 13301
diff changeset
214 sh = demuxer->a_streams[id];
c605df89ca9f moved sh_audio initialization from dec_audio to demuxer.c to fix
reimar
parents: 13301
diff changeset
215 // set some defaults
c605df89ca9f moved sh_audio initialization from dec_audio to demuxer.c to fix
reimar
parents: 13301
diff changeset
216 sh->samplesize=2;
14245
815f03b7cee5 removing AFMT_ dependancy
alex
parents: 14197
diff changeset
217 sh->sample_format=AF_FORMAT_S16_NE;
13357
c605df89ca9f moved sh_audio initialization from dec_audio to demuxer.c to fix
reimar
parents: 13301
diff changeset
218 sh->audio_out_minsize=8192;/* default size, maybe not enough for Win32/ACM*/
14046
4802041ab8e3 Output more information about vids, aids, sids, alangs and slangs with -identify. Patch by kiriuja <mplayer-patches@en-directo.net>
mosu
parents: 14034
diff changeset
219 if (identify && !demux_aid_vid_mismatch)
4802041ab8e3 Output more information about vids, aids, sids, alangs and slangs with -identify. Patch by kiriuja <mplayer-patches@en-directo.net>
mosu
parents: 14034
diff changeset
220 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_AUDIO_ID=%d\n", id);
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
221 }
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
222 return demuxer->a_streams[id];
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
223 }
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
224
1643
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
225 void free_sh_audio(sh_audio_t* sh){
13946
e632b43f0598 Reduce excessive verbosity.
diego
parents: 13738
diff changeset
226 mp_msg(MSGT_DEMUXER,MSGL_DBG2,"DEMUXER: freeing sh_audio at %p\n",sh);
1643
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
227 if(sh->wf) free(sh->wf);
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
228 free(sh);
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
229 }
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
230
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
231 sh_video_t* new_sh_video(demuxer_t *demuxer,int id){
5084
2fd327bf64fc added get_sh_video/audio and realmedia seeking
alex
parents: 5068
diff changeset
232 if(id > MAX_V_STREAMS-1 || id < 0)
4642
e534c7dc0cc0 check for overflow in new_sh_video and new_sh_audio
alex
parents: 4587
diff changeset
233 {
e534c7dc0cc0 check for overflow in new_sh_video and new_sh_audio
alex
parents: 4587
diff changeset
234 mp_msg(MSGT_DEMUXER,MSGL_WARN,"Requested video stream id overflow (%d > %d)\n",
e534c7dc0cc0 check for overflow in new_sh_video and new_sh_audio
alex
parents: 4587
diff changeset
235 id, MAX_V_STREAMS);
e534c7dc0cc0 check for overflow in new_sh_video and new_sh_audio
alex
parents: 4587
diff changeset
236 return NULL;
e534c7dc0cc0 check for overflow in new_sh_video and new_sh_audio
alex
parents: 4587
diff changeset
237 }
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
238 if(demuxer->v_streams[id]){
1584
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
239 mp_msg(MSGT_DEMUXER,MSGL_WARN,MSGTR_VideoStreamRedefined,id);
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
240 } else {
6951
0504c8beccba messages moved again
jaf
parents: 6943
diff changeset
241 mp_msg(MSGT_DEMUXER,MSGL_V,MSGTR_FoundVideoStream,id);
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
242 demuxer->v_streams[id]=malloc(sizeof(sh_video_t));
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
243 memset(demuxer->v_streams[id],0,sizeof(sh_video_t));
14046
4802041ab8e3 Output more information about vids, aids, sids, alangs and slangs with -identify. Patch by kiriuja <mplayer-patches@en-directo.net>
mosu
parents: 14034
diff changeset
244 if (identify && !demux_aid_vid_mismatch)
4802041ab8e3 Output more information about vids, aids, sids, alangs and slangs with -identify. Patch by kiriuja <mplayer-patches@en-directo.net>
mosu
parents: 14034
diff changeset
245 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VIDEO_ID=%d\n", id);
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
246 }
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
247 return demuxer->v_streams[id];
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
248 }
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
249
1643
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
250 void free_sh_video(sh_video_t* sh){
13946
e632b43f0598 Reduce excessive verbosity.
diego
parents: 13738
diff changeset
251 mp_msg(MSGT_DEMUXER,MSGL_DBG2,"DEMUXER: freeing sh_video at %p\n",sh);
1657
f6d3c1287748 freeing video buffer
arpi
parents: 1643
diff changeset
252 if(sh->bih) free(sh->bih);
1643
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
253 free(sh);
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
254 }
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
255
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
256 void free_demuxer(demuxer_t *demuxer){
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
257 int i;
13946
e632b43f0598 Reduce excessive verbosity.
diego
parents: 13738
diff changeset
258 mp_msg(MSGT_DEMUXER,MSGL_DBG2,"DEMUXER: freeing demuxer at %p\n",demuxer);
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
259 if(demuxer->desc->close)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
260 demuxer->desc->close(demuxer);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
261 // Very ugly hack to make it behave like old implementation
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
262 if (demuxer->desc->type == DEMUXER_TYPE_DEMUXERS)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
263 return;
1643
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
264 // free streams:
14666
91bbfcb66883 Memleak fixes. Based on patch by Timothy Lee (timothy lee at siriushk com).
reimar
parents: 14502
diff changeset
265 for(i = 0; i < MAX_A_STREAMS; i++)
1643
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
266 if(demuxer->a_streams[i]) free_sh_audio(demuxer->a_streams[i]);
14666
91bbfcb66883 Memleak fixes. Based on patch by Timothy Lee (timothy lee at siriushk com).
reimar
parents: 14502
diff changeset
267 for(i = 0; i < MAX_V_STREAMS; i++)
1643
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
268 if(demuxer->v_streams[i]) free_sh_video(demuxer->v_streams[i]);
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
269 //if(sh_audio) free_sh_audio(sh_audio);
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
270 //if(sh_video) free_sh_video(sh_video);
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
271 // free demuxers:
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
272 free_demuxer_stream(demuxer->audio);
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
273 free_demuxer_stream(demuxer->video);
5412
db582be1b590 added soem debug prints, and fixed 10l bug of Alban
arpi
parents: 5214
diff changeset
274 free_demuxer_stream(demuxer->sub);
4694
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
275 if(demuxer->info) {
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
276 for(i=0;demuxer->info[i] != NULL; i++)
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
277 free(demuxer->info[i]);
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
278 free(demuxer->info);
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
279 }
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
280 if(demuxer->filename)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
281 free(demuxer->filename);
1643
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
282 free(demuxer);
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
283 }
76835bed88ca free demux/ds/sh
arpi
parents: 1631
diff changeset
284
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
285
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 554
diff changeset
286 void ds_add_packet(demux_stream_t *ds,demux_packet_t* dp){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
287 // demux_packet_t* dp=new_demux_packet(len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
288 // stream_read(stream,dp->buffer,len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
289 // dp->pts=pts; //(float)pts/90000.0f;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
290 // dp->pos=pos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
291 // append packet to DS stream:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
292 ++ds->packs;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
293 ds->bytes+=dp->len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
294 if(ds->last){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
295 // next packet in stream
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
296 ds->last->next=dp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
297 ds->last=dp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
298 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
299 // first packet in stream
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
300 ds->first=ds->last=dp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
301 }
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1497
diff changeset
302 mp_dbg(MSGT_DEMUXER,MSGL_DBG2,"DEMUX: Append packet to %s, len=%d pts=%5.3f pos=%u [packs: A=%d V=%d]\n",
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
303 (ds==ds->demuxer->audio)?"d_audio":"d_video",
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1421
diff changeset
304 dp->len,dp->pts,(unsigned int)dp->pos,ds->demuxer->audio->packs,ds->demuxer->video->packs);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
305 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
306
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1421
diff changeset
307 void ds_read_packet(demux_stream_t *ds,stream_t *stream,int len,float pts,off_t pos,int flags){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
308 demux_packet_t* dp=new_demux_packet(len);
10891
65ed62e138fa Fixed 'reading after EOF'. demuxers didn't check, how many they've read!
lumag
parents: 10882
diff changeset
309 len = stream_read(stream,dp->buffer,len);
65ed62e138fa Fixed 'reading after EOF'. demuxers didn't check, how many they've read!
lumag
parents: 10882
diff changeset
310 resize_demux_packet(dp, len);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
311 dp->pts=pts; //(float)pts/90000.0f;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
312 dp->pos=pos;
979
3bcc435cd5a2 keyframe flag added
arpi_esp
parents: 889
diff changeset
313 dp->flags=flags;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
314 // append packet to DS stream:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
315 ds_add_packet(ds,dp);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
316 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
318 // return value:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
319 // 0 = EOF or no stream found or invalid type
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
320 // 1 = successfully read a packet
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
321
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
322 int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
323 // Note: parameter 'ds' can be NULL!
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
324 // printf("demux->type=%d\n",demux->type);
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
325 return demux->desc->fill_buffer(demux, ds);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
326 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
327
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
328 // return value:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
329 // 0 = EOF
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
330 // 1 = succesfull
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 554
diff changeset
331 int ds_fill_buffer(demux_stream_t *ds){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332 demuxer_t *demux=ds->demuxer;
6192
f03fe2e84efd clone_demux_packet(), using refcounting to avoid memcpy()
arpi
parents: 5930
diff changeset
333 if(ds->current) free_demux_packet(ds->current);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
334 if(verbose>2){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1497
diff changeset
335 if(ds==demux->audio) mp_dbg(MSGT_DEMUXER,MSGL_DBG3,"ds_fill_buffer(d_audio) called\n");else
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1497
diff changeset
336 if(ds==demux->video) mp_dbg(MSGT_DEMUXER,MSGL_DBG3,"ds_fill_buffer(d_video) called\n");else
5470
e80d66b5e4a7 added debug printf for dvdsub - from dvdnav patch by Kees Cook <mplayer@outflux.net>
arpi
parents: 5469
diff changeset
337 if(ds==demux->sub) mp_dbg(MSGT_DEMUXER,MSGL_DBG3,"ds_fill_buffer(d_sub) called\n");else
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1497
diff changeset
338 mp_dbg(MSGT_DEMUXER,MSGL_DBG3,"ds_fill_buffer(unknown 0x%X) called\n",(unsigned int)ds);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
339 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
340 while(1){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
341 if(ds->packs){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
342 demux_packet_t *p=ds->first;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
343 // copy useful data:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
344 ds->buffer=p->buffer;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
345 ds->buffer_pos=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
346 ds->buffer_size=p->len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
347 ds->pos=p->pos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
348 ds->dpos+=p->len; // !!!
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 828
diff changeset
349 ++ds->pack_no;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
350 if(p->pts){
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
351 ds->pts=p->pts;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
352 ds->pts_bytes=0;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
353 }
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
354 ds->pts_bytes+=p->len; // !!!
979
3bcc435cd5a2 keyframe flag added
arpi_esp
parents: 889
diff changeset
355 ds->flags=p->flags;
6192
f03fe2e84efd clone_demux_packet(), using refcounting to avoid memcpy()
arpi
parents: 5930
diff changeset
356 // unlink packet:
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
357 ds->bytes-=p->len;
6192
f03fe2e84efd clone_demux_packet(), using refcounting to avoid memcpy()
arpi
parents: 5930
diff changeset
358 ds->current=p;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
359 ds->first=p->next;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
360 if(!ds->first) ds->last=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
361 --ds->packs;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
362 return 1; //ds->buffer_size;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
363 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364 if(demux->audio->packs>=MAX_PACKS || demux->audio->bytes>=MAX_PACK_BYTES){
1584
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
365 mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_TooManyAudioInBuffer,demux->audio->packs,demux->audio->bytes);
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
366 mp_msg(MSGT_DEMUXER,MSGL_HINT,MSGTR_MaybeNI);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
367 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
368 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
369 if(demux->video->packs>=MAX_PACKS || demux->video->bytes>=MAX_PACK_BYTES){
1584
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
370 mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_TooManyVideoInBuffer,demux->video->packs,demux->video->bytes);
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
371 mp_msg(MSGT_DEMUXER,MSGL_HINT,MSGTR_MaybeNI);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
372 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
373 }
1421
ea0a0b9e6fbc nosound avi seeking fixed
arpi
parents: 1401
diff changeset
374 if(!demux_fill_buffer(demux,ds)){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1497
diff changeset
375 mp_dbg(MSGT_DEMUXER,MSGL_DBG2,"ds_fill_buffer()->demux_fill_buffer() failed\n");
1421
ea0a0b9e6fbc nosound avi seeking fixed
arpi
parents: 1401
diff changeset
376 break; // EOF
ea0a0b9e6fbc nosound avi seeking fixed
arpi
parents: 1401
diff changeset
377 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
378 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
379 ds->buffer_pos=ds->buffer_size=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
380 ds->buffer=NULL;
6192
f03fe2e84efd clone_demux_packet(), using refcounting to avoid memcpy()
arpi
parents: 5930
diff changeset
381 ds->current=NULL;
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1497
diff changeset
382 mp_msg(MSGT_DEMUXER,MSGL_V,"ds_fill_buffer: EOF reached (stream: %s) \n",ds==demux->audio?"audio":"video");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
383 ds->eof=1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
384 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
385 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
386
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 554
diff changeset
387 int demux_read_data(demux_stream_t *ds,unsigned char* mem,int len){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
388 int x;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
389 int bytes=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
390 while(len>0){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
391 x=ds->buffer_size-ds->buffer_pos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
392 if(x==0){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
393 if(!ds_fill_buffer(ds)) return bytes;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
394 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
395 if(x>len) x=len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
396 if(mem) memcpy(mem+bytes,&ds->buffer[ds->buffer_pos],x);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
397 bytes+=x;len-=x;ds->buffer_pos+=x;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
398 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
399 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
400 return bytes;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
401 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
402
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
403 int demux_read_data_pack(demux_stream_t *ds,unsigned char* mem,int len){
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
404 int x;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
405 int bytes=0;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
406 while(len>0){
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
407 x=ds->buffer_size-ds->buffer_pos;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
408 if(x==0){
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
409 if(!ds_fill_buffer(ds)) return bytes;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
410 } else {
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
411 if(x>len) x=len;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
412 if(mem) memcpy(mem+bytes,&ds->buffer[ds->buffer_pos],x);
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
413 bytes+=x;len-=x;ds->buffer_pos+=x;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
414 return bytes; // stop at end of package! (for correct timestamping)
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
415 }
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
416 }
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
417 return bytes;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
418 }
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
419
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 598
diff changeset
420
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
421 void ds_free_packs(demux_stream_t *ds){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
422 demux_packet_t *dp=ds->first;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
423 while(dp){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
424 demux_packet_t *dn=dp->next;
6192
f03fe2e84efd clone_demux_packet(), using refcounting to avoid memcpy()
arpi
parents: 5930
diff changeset
425 free_demux_packet(dp);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
426 dp=dn;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
427 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
428 if(ds->asf_packet){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
429 // free unfinished .asf fragments:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
430 free(ds->asf_packet->buffer);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
431 free(ds->asf_packet);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
432 ds->asf_packet=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
433 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
434 ds->first=ds->last=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
435 ds->packs=0; // !!!!!
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
436 ds->bytes=0;
6192
f03fe2e84efd clone_demux_packet(), using refcounting to avoid memcpy()
arpi
parents: 5930
diff changeset
437 if(ds->current) free_demux_packet(ds->current);
f03fe2e84efd clone_demux_packet(), using refcounting to avoid memcpy()
arpi
parents: 5930
diff changeset
438 ds->current=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
439 ds->buffer=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
440 ds->buffer_pos=ds->buffer_size;
828
c71695c30006 added pts_bytes=0 to ds_free_packs
arpi_esp
parents: 746
diff changeset
441 ds->pts=0; ds->pts_bytes=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
442 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
443
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 554
diff changeset
444 int ds_get_packet(demux_stream_t *ds,unsigned char **start){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
445 while(1){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
446 int len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
447 if(ds->buffer_pos>=ds->buffer_size){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
448 if(!ds_fill_buffer(ds)){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
449 // EOF
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
450 *start = NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
451 return -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
452 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
453 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
454 len=ds->buffer_size-ds->buffer_pos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
455 *start = &ds->buffer[ds->buffer_pos];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
456 ds->buffer_pos+=len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
457 return len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
458 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
459 }
554
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
460
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 554
diff changeset
461 int ds_get_packet_sub(demux_stream_t *ds,unsigned char **start){
554
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
462 while(1){
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
463 int len;
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
464 if(ds->buffer_pos>=ds->buffer_size){
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
465 *start = NULL;
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
466 if(!ds->packs) return -1; // no sub
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
467 if(!ds_fill_buffer(ds)) return -1; // EOF
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
468 }
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
469 len=ds->buffer_size-ds->buffer_pos;
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
470 *start = &ds->buffer[ds->buffer_pos];
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
471 ds->buffer_pos+=len;
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
472 return len;
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
473 }
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
474 }
d8b3c80604e3 dvd sub parser move dto mplayer.c
arpi_esp
parents: 552
diff changeset
475
5930
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
476 float ds_get_next_pts(demux_stream_t *ds) {
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
477 demuxer_t* demux = ds->demuxer;
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
478 while(!ds->first) {
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
479 if(demux->audio->packs>=MAX_PACKS || demux->audio->bytes>=MAX_PACK_BYTES){
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
480 mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_TooManyAudioInBuffer,demux->audio->packs,demux->audio->bytes);
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
481 mp_msg(MSGT_DEMUXER,MSGL_HINT,MSGTR_MaybeNI);
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
482 return -1;
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
483 }
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
484 if(demux->video->packs>=MAX_PACKS || demux->video->bytes>=MAX_PACK_BYTES){
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
485 mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_TooManyVideoInBuffer,demux->video->packs,demux->video->bytes);
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
486 mp_msg(MSGT_DEMUXER,MSGL_HINT,MSGTR_MaybeNI);
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
487 return -1;
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
488 }
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
489 if(!demux_fill_buffer(demux,ds))
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
490 return -1;
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
491 }
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
492 return ds->first->pts;
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
493 }
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5897
diff changeset
494
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
495 // ====================================================================
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
496
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
497 // commandline options, flags:
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
498 extern int force_ni;
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
499 extern int pts_from_bps;
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
500
7559
b645204ea527 some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents: 7482
diff changeset
501 //extern int audio_id;
b645204ea527 some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents: 7482
diff changeset
502 //extern int video_id;
b645204ea527 some cleanup - made private vars/funcs static, removed obsolete externs
arpi
parents: 7482
diff changeset
503 //extern int dvdsub_id;
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
504
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
505 void demuxer_help(void)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
506 {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
507 int i;
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
508
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
509 mp_msg(MSGT_DEMUXER, MSGL_INFO, "Available demuxers:\n");
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
510 mp_msg(MSGT_DEMUXER, MSGL_INFO, " demuxer: type info: (comment)\n");
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
511 for (i = 0; demuxer_list[i]; i++) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
512 if (demuxer_list[i]->type > DEMUXER_TYPE_MAX) // Don't display special demuxers
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
513 continue;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
514 if (demuxer_list[i]->comment && strlen(demuxer_list[i]->comment))
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
515 mp_msg(MSGT_DEMUXER, MSGL_INFO, "%10s %2d %s (%s)\n",
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
516 demuxer_list[i]->name, demuxer_list[i]->type, demuxer_list[i]->info, demuxer_list[i]->comment);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
517 else
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
518 mp_msg(MSGT_DEMUXER, MSGL_INFO, "%10s %2d %s\n",
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
519 demuxer_list[i]->name, demuxer_list[i]->type, demuxer_list[i]->info);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
520 }
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
521 }
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
522
14693
37116118ab6a avisynth demuxer patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents: 14666
diff changeset
523
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
524 /**
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
525 * Get demuxer type for a given demuxer name
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
526 *
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
527 * @param demuxer_name string with demuxer name of demuxer number
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
528 * @return DEMUXER_TYPE_xxx, -1 if error or not found
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
529 */
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
530 int get_demuxer_type_from_name(char *demuxer_name)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
531 {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
532 int i;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
533 long type_int;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
534 char *endptr;
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5107
diff changeset
535
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
536 for (i = 0; demuxer_list[i]; i++) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
537 if (demuxer_list[i]->type > DEMUXER_TYPE_MAX) // Can't select special demuxers from commandline
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
538 continue;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
539 if (strcmp(demuxer_name, demuxer_list[i]->name) == 0)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
540 return demuxer_list[i]->type;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
541 }
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
542
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
543 // No match found, try to parse name as an integer (demuxer number)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
544 type_int = strtol(demuxer_name, &endptr, 0);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
545 if (*endptr) // Conversion failed
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
546 return -1;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
547 if ((type_int > 0) && (type_int <= DEMUXER_TYPE_MAX))
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
548 return (int)type_int;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
549
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
550 return -1;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
551 }
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents: 3786
diff changeset
552
9751
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
553 int extension_parsing=1; // 0=off 1=mixed (used only for unstable formats)
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents: 6192
diff changeset
554
9751
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
555 /*
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
556 NOTE : Several demuxers may be opened at the same time so
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
557 demuxers should NEVER rely on an external var to enable them
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
558 self. If a demuxer can't do any autodection it should only use
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
559 file_format. The user can explictly set file_format with the -demuxer
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
560 option so there is really no need for another extra var.
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
561 For conivence an option can be added to set file_format directly
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
562 to the right type (ex: rawaudio,rawvideo).
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
563 Also the stream can override the file_format so a demuxer wich rely
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
564 on a special stream type can set file_format at the stream level
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
565 (ex: tv,mf).
00c97b0891e3 Fix all demuxers wich where using a global var to enable themself.
albeu
parents: 9709
diff changeset
566 */
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
567
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
568 static demuxer_t* demux_open_stream(stream_t *stream,int file_format,int audio_id,int video_id,int dvdsub_id,char* filename){
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
569
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
570 //int file_format=(*file_format_ptr);
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
571
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
572 demuxer_t *demuxer=NULL;
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
573
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
574 sh_video_t *sh_video=NULL;
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
575
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
576 demuxer_desc_t *demuxer_desc;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
577 int fformat;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
578 int i;
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
579
1659
6b71bbf515e4 num_elementary_packets1xx reset
arpi
parents: 1657
diff changeset
580 //printf("demux_open(%p,%d,%d,%d,%d) \n",stream,file_format,audio_id,video_id,dvdsub_id);
6b71bbf515e4 num_elementary_packets1xx reset
arpi
parents: 1657
diff changeset
581
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
582 // If somebody requested a demuxer check it
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
583 if (file_format) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
584 if ((demuxer_desc = get_demuxer_desc_from_type(file_format))) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
585 demuxer = new_demuxer(stream,demuxer_desc->type,audio_id,video_id,dvdsub_id,filename);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
586 if (demuxer_desc->check_file) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
587 if ((fformat = demuxer_desc->check_file(demuxer)) != 0) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
588 if (fformat == demuxer_desc->type) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
589 // Move messages to demuxer detection code?
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
590 mp_msg(MSGT_DEMUXER, MSGL_INFO, MSGTR_Detected_XXX_FileFormat, demuxer_desc->shortdesc);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
591 file_format = demuxer_desc->type = fformat;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
592 } else {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
593 // Format changed after check, recurse
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
594 free_demuxer(demuxer);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
595 return demux_open_stream(stream,fformat,audio_id,video_id,dvdsub_id,filename);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
596 }
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
597 } else {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
598 // Check failed for forced demuxer, quit
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
599 free_demuxer(demuxer);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
600 return NULL;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
601 }
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
602 }
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
603 }
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents: 9006
diff changeset
604 }
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents: 6192
diff changeset
605
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
606 if (demuxer)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
607 goto dmx_open;
6942
6048ac6ab001 detection reordered. note: raw DV detection should be more reliable.
arpi
parents: 6925
diff changeset
608
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
609 // Test demuxers with safe file checks
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
610 for (i = 0; (demuxer_desc = demuxer_list[i]); i++) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
611 if (demuxer_desc->safe_check) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
612 demuxer = new_demuxer(stream,demuxer_desc->type,audio_id,video_id,dvdsub_id,filename);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
613 if ((fformat = demuxer_desc->check_file(demuxer)) != 0) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
614 if (fformat == demuxer_desc->type) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
615 mp_msg(MSGT_DEMUXER, MSGL_INFO, MSGTR_Detected_XXX_FileFormat, demuxer_desc->shortdesc);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
616 file_format = fformat;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
617 break;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
618 } else {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
619 // Format changed after check, recurse
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
620 free_demuxer(demuxer);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
621 demuxer=demux_open_stream(stream,fformat,audio_id,video_id,dvdsub_id,filename);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
622 if(demuxer) return demuxer; // done!
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
623 file_format = DEMUXER_TYPE_UNKNOWN;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
624 }
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
625 } else {
13520
5f4f9de738b2 fixed small memleak
reimar
parents: 13450
diff changeset
626 free_demuxer(demuxer);
5f4f9de738b2 fixed small memleak
reimar
parents: 13450
diff changeset
627 demuxer = NULL;
5f4f9de738b2 fixed small memleak
reimar
parents: 13450
diff changeset
628 }
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
629 }
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
630 }
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
631
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
632 if (demuxer)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
633 goto dmx_open;
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents: 14245
diff changeset
634
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
635 // If no forced demuxer perform file extension based detection
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
636 // Ok. We're over the stable detectable fileformats, the next ones are a bit
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
637 // fuzzy. So by default (extension_parsing==1) try extension-based detection
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
638 // first:
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
639 if(file_format==DEMUXER_TYPE_UNKNOWN && filename && extension_parsing==1){
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
640 file_format=demuxer_type_by_filename(filename);
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
641 if(file_format!=DEMUXER_TYPE_UNKNOWN){
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
642 // we like recursion :)
14693
37116118ab6a avisynth demuxer patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents: 14666
diff changeset
643 demuxer=demux_open_stream(stream,file_format,audio_id,video_id,dvdsub_id,filename);
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
644 if(demuxer) return demuxer; // done!
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
645 file_format=DEMUXER_TYPE_UNKNOWN; // continue fuzzy guessing...
10379
296064e1baf0 fixed mpeg-ps ext-based detection sig11 bug reporetd by Raindel Shachar
arpi
parents: 10310
diff changeset
646 mp_msg(MSGT_DEMUXER,MSGL_V,"demuxer: continue fuzzy content-based format guessing...\n");
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
647 }
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
648 }
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
649
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
650 // Try detection for all other demuxers
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
651 for (i = 0; (demuxer_desc = demuxer_list[i]); i++) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
652 if (!demuxer_desc->safe_check && demuxer_desc->check_file) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
653 demuxer = new_demuxer(stream,demuxer_desc->type,audio_id,video_id,dvdsub_id,filename);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
654 if ((fformat = demuxer_desc->check_file(demuxer)) != 0) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
655 if (fformat == demuxer_desc->type) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
656 mp_msg(MSGT_DEMUXER, MSGL_INFO, MSGTR_Detected_XXX_FileFormat, demuxer_desc->shortdesc);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
657 file_format = fformat;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
658 break;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
659 } else {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
660 // Format changed after check, recurse
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
661 free_demuxer(demuxer);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
662 demuxer=demux_open_stream(stream,fformat,audio_id,video_id,dvdsub_id,filename);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
663 if(demuxer) return demuxer; // done!
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
664 file_format = DEMUXER_TYPE_UNKNOWN;
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
665 }
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
666 } else {
4660
25b2a036aee7 A whole bunch of free_demuxer in demux_open
albeu
parents: 4642
diff changeset
667 free_demuxer(demuxer);
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
668 demuxer = NULL;
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
669 }
4189
6871d97e4261 initial support for FILM file demuxing
melanson
parents: 4065
diff changeset
670 }
6871d97e4261 initial support for FILM file demuxing
melanson
parents: 4065
diff changeset
671 }
15670
081bee8052cf moved mpeg-ps/es probing code to demux_mpg.c
nicodvb
parents: 15576
diff changeset
672
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
673 //=============== Unknown, exiting... ===========================
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
674 if(file_format==DEMUXER_TYPE_UNKNOWN || demuxer == NULL){
8925
5c15777f1c07 this patch adds an fallback to playlist (any but the plaintext-list format)
arpi
parents: 8821
diff changeset
675 //mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_FormatNotRecognized); // will be done by mplayer.c after fallback to playlist-parsing
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
676 return NULL;
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
677 }
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
678 //====== File format recognized, set up these for compatibility: =========
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
679 dmx_open:
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
680
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1456
diff changeset
681 demuxer->file_format=file_format;
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1456
diff changeset
682
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
683 if (demuxer->desc->open)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
684 if (!(demuxer = demuxer->desc->open(demuxer)))
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
685 return NULL;
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 10221
diff changeset
686
13301
638673d1f83a show video format for all demuxers, not just avi (move this somewhere else if you prefer)
rfelker
parents: 13006
diff changeset
687 if ((sh_video=demuxer->video->sh) && sh_video->bih)
638673d1f83a show video format for all demuxers, not just avi (move this somewhere else if you prefer)
rfelker
parents: 13006
diff changeset
688 mp_msg(MSGT_DEMUX,MSGL_INFO,"VIDEO: [%.4s] %ldx%ld %dbpp %5.3f fps %5.1f kbps (%4.1f kbyte/s)\n",
638673d1f83a show video format for all demuxers, not just avi (move this somewhere else if you prefer)
rfelker
parents: 13006
diff changeset
689 (char *)&sh_video->bih->biCompression,
638673d1f83a show video format for all demuxers, not just avi (move this somewhere else if you prefer)
rfelker
parents: 13006
diff changeset
690 sh_video->bih->biWidth,
638673d1f83a show video format for all demuxers, not just avi (move this somewhere else if you prefer)
rfelker
parents: 13006
diff changeset
691 sh_video->bih->biHeight,
638673d1f83a show video format for all demuxers, not just avi (move this somewhere else if you prefer)
rfelker
parents: 13006
diff changeset
692 sh_video->bih->biBitCount,
638673d1f83a show video format for all demuxers, not just avi (move this somewhere else if you prefer)
rfelker
parents: 13006
diff changeset
693 sh_video->fps,
638673d1f83a show video format for all demuxers, not just avi (move this somewhere else if you prefer)
rfelker
parents: 13006
diff changeset
694 sh_video->i_bps*0.008f,
638673d1f83a show video format for all demuxers, not just avi (move this somewhere else if you prefer)
rfelker
parents: 13006
diff changeset
695 sh_video->i_bps/1024.0f );
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
696 return demuxer;
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
697 }
1497
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
698
6623
7bc4c6ba9485 add -audiofile support for gui
pontscho
parents: 6384
diff changeset
699 char* audio_stream = NULL;
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7754
diff changeset
700 char* sub_stream = NULL;
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
701 int demuxer_type = 0; // used by rawaudio and rawvideo
9709
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
702 int audio_stream_cache = 0;
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7754
diff changeset
703
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
704 char *demuxer_name = NULL; // parameter from -demuxer
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
705 char *audio_demuxer_name = NULL; // parameter from -audio-demuxer
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
706 char *sub_demuxer_name = NULL; // parameter from -sub-demuxer
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
707
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7754
diff changeset
708 extern int hr_mp3_seek;
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
709
12835
4235ae5a2d60 cache min fill adjustment, based on patch by Jeremy Huddleston
iive
parents: 12434
diff changeset
710 extern float stream_cache_min_percent;
16152
10a69a812eff remove unused cache-prefill and create cache-seek-min that controls when seek_long is prefered over waiting for cache to fill
iive
parents: 15958
diff changeset
711 extern float stream_cache_seek_min_percent;
12835
4235ae5a2d60 cache min fill adjustment, based on patch by Jeremy Huddleston
iive
parents: 12434
diff changeset
712
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
713 demuxer_t* demux_open(stream_t *vs,int file_format,int audio_id,int video_id,int dvdsub_id,char* filename){
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
714 stream_t *as = NULL,*ss = NULL;
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
715 demuxer_t *vd,*ad = NULL,*sd = NULL;
12223
e7c8200ffdc5 Respect -playlist for asx streams
rtognimp
parents: 12175
diff changeset
716 int afmt =DEMUXER_TYPE_UNKNOWN,sfmt = DEMUXER_TYPE_UNKNOWN ;
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
717 int audio_demuxer_type = 0, sub_demuxer_type = 0;
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
718
14046
4802041ab8e3 Output more information about vids, aids, sids, alangs and slangs with -identify. Patch by kiriuja <mplayer-patches@en-directo.net>
mosu
parents: 14034
diff changeset
719 demux_aid_vid_mismatch = 0;
4802041ab8e3 Output more information about vids, aids, sids, alangs and slangs with -identify. Patch by kiriuja <mplayer-patches@en-directo.net>
mosu
parents: 14034
diff changeset
720
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
721 if (demuxer_name && ((demuxer_type = get_demuxer_type_from_name(demuxer_name)) < 0)) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
722 mp_msg(MSGT_DEMUXER,MSGL_ERR,"-demuxer %s does not exist.\n",demuxer_name);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
723 }
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
724 if (audio_demuxer_name && ((audio_demuxer_type = get_demuxer_type_from_name(audio_demuxer_name)) < 0)) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
725 mp_msg(MSGT_DEMUXER,MSGL_ERR,"-audio-demuxer %s does not exist.\n",audio_demuxer_name);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
726 }
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
727 if (sub_demuxer_name && ((sub_demuxer_type = get_demuxer_type_from_name(sub_demuxer_name)) < 0)) {
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
728 mp_msg(MSGT_DEMUXER,MSGL_ERR,"-sub-demuxer %s does not exist.\n",sub_demuxer_name);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
729 }
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
730
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
731 if(audio_stream) {
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
732 as = open_stream(audio_stream,0,&afmt);
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
733 if(!as) {
6951
0504c8beccba messages moved again
jaf
parents: 6943
diff changeset
734 mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_CannotOpenAudioStream,audio_stream);
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
735 return NULL;
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
736 }
9709
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
737 if(audio_stream_cache) {
12835
4235ae5a2d60 cache min fill adjustment, based on patch by Jeremy Huddleston
iive
parents: 12434
diff changeset
738 if(!stream_enable_cache(as,audio_stream_cache*1024,audio_stream_cache*1024*(stream_cache_min_percent / 100.0),
16152
10a69a812eff remove unused cache-prefill and create cache-seek-min that controls when seek_long is prefered over waiting for cache to fill
iive
parents: 15958
diff changeset
739 audio_stream_cache*1024*(stream_cache_seek_min_percent / 100.0))) {
9709
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
740 free_stream(as);
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
741 mp_msg(MSGT_DEMUXER,MSGL_ERR,"Can't enable audio stream cache\n");
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
742 return NULL;
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
743 }
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
744 }
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
745 }
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
746 if(sub_stream) {
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
747 ss = open_stream(sub_stream,0,&sfmt);
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
748 if(!ss) {
6951
0504c8beccba messages moved again
jaf
parents: 6943
diff changeset
749 mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_CannotOpenSubtitlesStream,sub_stream);
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
750 return NULL;
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
751 }
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
752 }
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
753
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
754 vd = demux_open_stream(vs,demuxer_type ? demuxer_type : file_format,audio_stream ? -2 : audio_id,video_id, sub_stream ? -2 : dvdsub_id, filename);
9709
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
755 if(!vd) {
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
756 if(as) free_stream(as);
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
757 if(ss) free_stream(ss);
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
758 return NULL;
9709
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
759 }
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
760 if(as) {
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
761 ad = demux_open_stream(as,audio_demuxer_type ? audio_demuxer_type : afmt,audio_id,-2,-2, audio_stream);
9709
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
762 if(!ad) {
6951
0504c8beccba messages moved again
jaf
parents: 6943
diff changeset
763 mp_msg(MSGT_DEMUXER,MSGL_WARN,MSGTR_OpeningAudioDemuxerFailed,audio_stream);
9709
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
764 free_stream(as);
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
765 }
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
766 else if(ad->audio->sh && ((sh_audio_t*)ad->audio->sh)->format == 0x55) // MP3
7867
3dc0b71630ff cleanup config option handling in libmpdemux.
arpi
parents: 7754
diff changeset
767 hr_mp3_seek=1; // Enable high res seeking
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
768 }
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
769 if(ss) {
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents: 8937
diff changeset
770 sd = demux_open_stream(ss,sub_demuxer_type ? sub_demuxer_type : sfmt,-2,-2,dvdsub_id, sub_stream);
9709
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
771 if(!sd) {
6951
0504c8beccba messages moved again
jaf
parents: 6943
diff changeset
772 mp_msg(MSGT_DEMUXER,MSGL_WARN,MSGTR_OpeningSubtitlesDemuxerFailed,sub_stream);
9709
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
773 free_stream(ss);
1b1e33d1688a Fix rawvideo and -audiofile
albeu
parents: 9610
diff changeset
774 }
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
775 }
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
776
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
777 if(ad && sd)
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
778 return new_demuxers_demuxer(vd,ad,sd);
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
779 else if(ad)
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
780 return new_demuxers_demuxer(vd,ad,vd);
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
781 else if(sd)
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
782 return new_demuxers_demuxer(vd,vd,sd);
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
783 else
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
784 return vd;
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
785 }
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
786
1497
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
787
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
788 int demux_seek(demuxer_t *demuxer,float rel_seek_secs,int flags){
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
789 demux_stream_t *d_audio=demuxer->audio;
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
790 demux_stream_t *d_video=demuxer->video;
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
791 sh_audio_t *sh_audio=d_audio->sh;
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
792 sh_video_t *sh_video=d_video->sh;
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
793
1623
5908dd344067 added demuxer->seekable flag to generalize seeking ability test
arpi
parents: 1584
diff changeset
794 if(!demuxer->seekable){
5908dd344067 added demuxer->seekable flag to generalize seeking ability test
arpi
parents: 1584
diff changeset
795 if(demuxer->file_format==DEMUXER_TYPE_AVI)
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1659
diff changeset
796 mp_msg(MSGT_SEEK,MSGL_WARN,MSGTR_CantSeekRawAVI);
2790
98769cea155c added tv subsystem
alex
parents: 2687
diff changeset
797 #ifdef USE_TV
98769cea155c added tv subsystem
alex
parents: 2687
diff changeset
798 else if (demuxer->file_format==DEMUXER_TYPE_TV)
6951
0504c8beccba messages moved again
jaf
parents: 6943
diff changeset
799 mp_msg(MSGT_SEEK,MSGL_WARN,MSGTR_TVInputNotSeekable);
2790
98769cea155c added tv subsystem
alex
parents: 2687
diff changeset
800 #endif
1623
5908dd344067 added demuxer->seekable flag to generalize seeking ability test
arpi
parents: 1584
diff changeset
801 else
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1659
diff changeset
802 mp_msg(MSGT_SEEK,MSGL_WARN,MSGTR_CantSeekFile);
1623
5908dd344067 added demuxer->seekable flag to generalize seeking ability test
arpi
parents: 1584
diff changeset
803 return 0;
5908dd344067 added demuxer->seekable flag to generalize seeking ability test
arpi
parents: 1584
diff changeset
804 }
1497
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
805
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
806 // clear demux buffers:
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
807 if(sh_audio){ ds_free_packs(d_audio);sh_audio->a_buffer_len=0;}
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
808 ds_free_packs(d_video);
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
809
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
810 demuxer->stream->eof=0; // clear eof flag
3542
465329581ad8 reset ds eof flags at seeking - requires for mpeg -loop
arpi
parents: 3411
diff changeset
811 demuxer->video->eof=0;
465329581ad8 reset ds eof flags at seeking - requires for mpeg -loop
arpi
parents: 3411
diff changeset
812 demuxer->audio->eof=0;
1497
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
813
4203
7cfa69df9e0b reverted old seeking method - ask Holm why...
arpi
parents: 4189
diff changeset
814 #if 0
3824
be5e58955f57 don't reset timer at seek - req. for dxr3
arpi
parents: 3801
diff changeset
815 if(sh_audio) sh_audio->timer=sh_video->timer;
be5e58955f57 don't reset timer at seek - req. for dxr3
arpi
parents: 3801
diff changeset
816 #else
8056
324b6e5387be A-V sync cleanup: sh_audio->timer replaced by sh_audio->delay, it contains
arpi
parents: 8030
diff changeset
817 if(sh_audio) sh_audio->delay=0;
4587
886bf5274992 Audio only support. Include a fix in the asf demuxer opening.
albeu
parents: 4565
diff changeset
818 if(sh_video) sh_video->timer=0; // !!!!!!
3824
be5e58955f57 don't reset timer at seek - req. for dxr3
arpi
parents: 3801
diff changeset
819 #endif
1497
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
820
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
821 if (demuxer->desc->seek)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
822 demuxer->desc->seek(demuxer,rel_seek_secs,flags);
1497
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
823
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
824 return 1;
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
825 }
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
826
3050
9ed968c05954 added demuxer_info
alex
parents: 2931
diff changeset
827 int demux_info_add(demuxer_t *demuxer, char *opt, char *param)
9ed968c05954 added demuxer_info
alex
parents: 2931
diff changeset
828 {
4694
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
829 char **info = demuxer->info;
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
830 int n = 0;
1497
ad4d402b3d29 seek.c moved to demuxer.c, stream_reset in new_demuxer()
arpi
parents: 1496
diff changeset
831
3050
9ed968c05954 added demuxer_info
alex
parents: 2931
diff changeset
832
4694
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
833 for(n = 0; info && info[2*n] != NULL; n++)
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
834 {
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
835 if(!strcasecmp(opt,info[2*n]))
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
836 {
6951
0504c8beccba messages moved again
jaf
parents: 6943
diff changeset
837 mp_msg(MSGT_DEMUX, MSGL_WARN,MSGTR_DemuxerInfoAlreadyPresent,opt);
4694
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
838 return 0;
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
839 }
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
840 }
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
841
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
842 info = demuxer->info = (char**)realloc(info,(2*(n+2))*sizeof(char*));
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
843 info[2*n] = strdup(opt);
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
844 info[2*n+1] = strdup(param);
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
845 memset(&info[2*(n+1)],0,2*sizeof(char*));
3050
9ed968c05954 added demuxer_info
alex
parents: 2931
diff changeset
846
4694
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
847 return 1;
3050
9ed968c05954 added demuxer_info
alex
parents: 2931
diff changeset
848 }
9ed968c05954 added demuxer_info
alex
parents: 2931
diff changeset
849
9ed968c05954 added demuxer_info
alex
parents: 2931
diff changeset
850 int demux_info_print(demuxer_t *demuxer)
9ed968c05954 added demuxer_info
alex
parents: 2931
diff changeset
851 {
4694
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
852 char **info = demuxer->info;
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
853 int n;
3050
9ed968c05954 added demuxer_info
alex
parents: 2931
diff changeset
854
4694
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
855 if(!info)
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
856 return 0;
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
857
6951
0504c8beccba messages moved again
jaf
parents: 6943
diff changeset
858 mp_msg(MSGT_DEMUX, MSGL_INFO,MSGTR_ClipInfo);
4694
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
859 for(n = 0; info[2*n] != NULL ; n++)
15789
32d9c8a0a02b adds some more -identify output, patch by kiriuja < mplayer DASH patches PAM en DASH directo POUM net>
gpoirier
parents: 15780
diff changeset
860 {
4694
a21735031d6a Audio file demuxer. Extended version for demuxer info.
albeu
parents: 4660
diff changeset
861 mp_msg(MSGT_DEMUX, MSGL_INFO, " %s: %s\n",info[2*n],info[2*n+1]);
15938
cf34ac76bd15 -identify variable names should follow [A-Z_][A-Z0-9_]* convention
ranma
parents: 15789
diff changeset
862 if (identify) {
cf34ac76bd15 -identify variable names should follow [A-Z_][A-Z0-9_]* convention
ranma
parents: 15789
diff changeset
863 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_CLIP_INFO_NAME%d=%s\n", n, info[2*n]);
cf34ac76bd15 -identify variable names should follow [A-Z_][A-Z0-9_]* convention
ranma
parents: 15789
diff changeset
864 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_CLIP_INFO_VALUE%d=%s\n", n, info[2*n+1]);
cf34ac76bd15 -identify variable names should follow [A-Z_][A-Z0-9_]* convention
ranma
parents: 15789
diff changeset
865 }
15789
32d9c8a0a02b adds some more -identify output, patch by kiriuja < mplayer DASH patches PAM en DASH directo POUM net>
gpoirier
parents: 15780
diff changeset
866 }
15938
cf34ac76bd15 -identify variable names should follow [A-Z_][A-Z0-9_]* convention
ranma
parents: 15789
diff changeset
867 if (identify)
cf34ac76bd15 -identify variable names should follow [A-Z_][A-Z0-9_]* convention
ranma
parents: 15789
diff changeset
868 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_CLIP_INFO_N=%d\n", n);
4189
6871d97e4261 initial support for FILM file demuxing
melanson
parents: 4065
diff changeset
869
6871d97e4261 initial support for FILM file demuxing
melanson
parents: 4065
diff changeset
870 return 0;
3050
9ed968c05954 added demuxer_info
alex
parents: 2931
diff changeset
871 }
4765
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
872
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
873 char* demux_info_get(demuxer_t *demuxer, char *opt) {
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
874 int i;
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
875 char **info = demuxer->info;
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
876
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
877 for(i = 0; info && info[2*i] != NULL; i++) {
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
878 if(!strcasecmp(opt,info[2*i]))
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
879 return info[2*i+1];
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
880 }
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
881
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
882 return NULL;
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
883 }
d0c2c8af46b4 Demuxers demuxer support for using external audiofile (or muxed subtitles).
albeu
parents: 4735
diff changeset
884
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
885 int demux_control(demuxer_t *demuxer, int cmd, void *arg) {
8208
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
886
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
887 if (demuxer->desc->control)
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
888 return demuxer->desc->control(demuxer,cmd,arg);
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
889
6b86089c2edd Demuxer modularization
rtognimp
parents: 16152
diff changeset
890 return DEMUXER_CTRL_NOTIMPL;
8208
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
891 }
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
892
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
893
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
894
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
895 unsigned long demuxer_get_time_length(demuxer_t *demuxer){
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
896 unsigned long get_time_ans;
14502
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
897 sh_video_t *sh_video = demuxer->video->sh;
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
898 // <= 0 means DEMUXER_CTRL_NOTIMPL or DEMUXER_CTRL_DONTKNOW
8208
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
899 if (demux_control(demuxer, DEMUXER_CTRL_GET_TIME_LENGTH,(void *)&get_time_ans)<=0) {
14502
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
900 if (sh_video && sh_video->i_bps)
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
901 get_time_ans = (demuxer->movi_end-demuxer->movi_start)/sh_video->i_bps;
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
902 else
8208
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
903 get_time_ans=0;
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
904 }
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
905 return get_time_ans;
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
906 }
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
907
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
908 int demuxer_get_percent_pos(demuxer_t *demuxer){
14197
2ae224195625 Use demuxer_get_percent_pos for the OSD position bar
reimar
parents: 14160
diff changeset
909 int ans = 0;
2ae224195625 Use demuxer_get_percent_pos for the OSD position bar
reimar
parents: 14160
diff changeset
910 int res = demux_control(demuxer, DEMUXER_CTRL_GET_PERCENT_POS, &ans);
2ae224195625 Use demuxer_get_percent_pos for the OSD position bar
reimar
parents: 14160
diff changeset
911 int len = (demuxer->movi_end - demuxer->movi_start) / 100;
14502
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
912 if (res <= 0) {
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
913 if (len > 0)
14197
2ae224195625 Use demuxer_get_percent_pos for the OSD position bar
reimar
parents: 14160
diff changeset
914 ans = (demuxer->filepos - demuxer->movi_start) / len;
14502
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
915 else
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
916 ans = 0;
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
917 }
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
918 if (ans < 0) ans = 0;
8769fa370f83 Move generic length and percent pos calculation to demuxer.c
reimar
parents: 14276
diff changeset
919 if (ans > 100) ans = 100;
8208
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
920 return ans;
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
921 }
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8123
diff changeset
922
15285
39eb8a327ea9 adds a parameter to the switch_audio command to directly select a track.
reimar
parents: 15046
diff changeset
923 int demuxer_switch_audio(demuxer_t *demuxer, int index){
39eb8a327ea9 adds a parameter to the switch_audio command to directly select a track.
reimar
parents: 15046
diff changeset
924 int res = demux_control(demuxer, DEMUXER_CTRL_SWITCH_AUDIO, &index);
39eb8a327ea9 adds a parameter to the switch_audio command to directly select a track.
reimar
parents: 15046
diff changeset
925 if (res == DEMUXER_CTRL_NOTIMPL)
39eb8a327ea9 adds a parameter to the switch_audio command to directly select a track.
reimar
parents: 15046
diff changeset
926 index = demuxer->audio->id;
39eb8a327ea9 adds a parameter to the switch_audio command to directly select a track.
reimar
parents: 15046
diff changeset
927 return index;
15046
b7aa70b05d76 Added support of audio stream switching in the MPEG demuxer using the #-key
gpoirier
parents: 14934
diff changeset
928 }