annotate libmpdemux/demux_y4m.c @ 36131:08f70b06452c

Provide dummy glColor4ub glTexEnvi functions. Avoids calling a NULL pointer with pure GLES implementations.
author reimar
date Sat, 04 May 2013 15:20:47 +0000
parents ef57345fe3e8
children 139f2b064ef9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29238
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
1 /*
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
2 * Y4M file parser
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
3 * copyright (c) 2001 Rik Snel
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
4 * (using yuv4mpeg*.[ch] from mjpeg.sourceforge.net)
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
5 * (derived from demux_viv.c)
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
6 * older YUV4MPEG (used by xawtv) support by Alex Beregszaszi
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
7 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
8 * This file is part of MPlayer.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
9 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
10 * MPlayer is free software; you can redistribute it and/or modify
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
11 * it under the terms of the GNU General Public License as published by
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
13 * (at your option) any later version.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
14 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
15 * MPlayer is distributed in the hope that it will be useful,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
18 * GNU General Public License for more details.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
19 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
20 * You should have received a copy of the GNU General Public License along
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
21 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25707
diff changeset
23 */
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
24
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
25 #include <stdio.h>
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
26 #include <stdlib.h>
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
27 #include <unistd.h>
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
28 #include <string.h> /* strtok */
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
29
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
30 #include "config.h"
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
31 #include "mp_msg.h"
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
32 #include "help_mp.h"
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
33 #include "yuv4mpeg.h"
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
34
22605
4d81dbdf46b9 Add explicit location for headers from the stream/ directory.
diego
parents: 21421
diff changeset
35 //#include "stream/stream.h"
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
36 #include "demuxer.h"
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
37 #include "stheader.h"
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
38
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
39 typedef struct {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
40 int framenum;
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
41 y4m_stream_info_t* si;
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
42 int is_older;
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
43 } y4m_priv_t;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
44
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
45 static int y4m_check_file(demuxer_t* demuxer){
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
46 int orig_pos = stream_tell(demuxer->stream);
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
47 char buf[10];
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
48 y4m_priv_t* priv;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
49
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
50 mp_msg(MSGT_DEMUX, MSGL_V, "Checking for YUV4MPEG2\n");
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
51
15817
faust3
parents: 12529
diff changeset
52 if(stream_read(demuxer->stream, buf, 9)!=9)
faust3
parents: 12529
diff changeset
53 return 0;
faust3
parents: 12529
diff changeset
54
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
55 buf[9] = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
56
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
57 if (strncmp("YUV4MPEG2", buf, 9) && strncmp("YUV4MPEG ", buf, 9)) {
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
58 return 0;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
59 }
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
60
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
61 demuxer->priv = malloc(sizeof(y4m_priv_t));
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
62 priv = demuxer->priv;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
63
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
64 priv->is_older = 0;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
65
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
66 if (!strncmp("YUV4MPEG ", buf, 9))
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
67 {
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
68 mp_msg(MSGT_DEMUX, MSGL_V, "Found older YUV4MPEG format (used by xawtv)\n");
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
69 priv->is_older = 1;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
70 }
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
71
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
72 mp_msg(MSGT_DEMUX,MSGL_DBG2,"Success: YUV4MPEG2\n");
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
73
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
74 stream_seek(demuxer->stream, orig_pos);
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
75
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
76 return DEMUXER_TYPE_Y4M;
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
77 }
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
78
30928
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
79 static void read_streaminfo(demuxer_t *demuxer);
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
80
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
81 // return value:
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
82 // 0 = EOF or no stream found
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
83 // 1 = successfully read a packet
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
84 static int demux_y4m_fill_buffer(demuxer_t *demux, demux_stream_t *dsds) {
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
85 demux_stream_t *ds=demux->video;
35291
ef57345fe3e8 Fix memleaks on error and EOF.
reimar
parents: 35290
diff changeset
86 demux_packet_t *dp = NULL;
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
87 y4m_priv_t *priv=demux->priv;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
88 y4m_frame_info_t fi;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
89 unsigned char *buf[3];
35290
17a449bc5106 Minor simplifications.
reimar
parents: 32105
diff changeset
90 int size;
30928
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
91 int nextc;
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
92
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
93 nextc = stream_read_char(demux->stream);
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
94 stream_skip(demux->stream, -1);
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
95 if (nextc == 'Y') {
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
96 read_streaminfo(demux);
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
97 demux->seekable = 0;
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
98 }
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
99
9654
ee7203b48e7c fix crash on streams with frame tags, patch by Brett Kosinski <brettk@frodo.dyn.gno.org>
alex
parents: 5810
diff changeset
100 y4m_init_frame_info(&fi);
ee7203b48e7c fix crash on streams with frame tags, patch by Brett Kosinski <brettk@frodo.dyn.gno.org>
alex
parents: 5810
diff changeset
101
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
102 demux->filepos=stream_tell(demux->stream);
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
103
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
104 size = ((sh_video_t*)ds->sh)->disp_w*((sh_video_t*)ds->sh)->disp_h;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
105
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
106 dp = new_demux_packet(3*size/2);
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
107
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
108 /* swap U and V components */
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
109 buf[0] = dp->buffer;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
110 buf[1] = dp->buffer + 5*size/4;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
111 buf[2] = dp->buffer + size;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
112
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
113 if (priv->is_older)
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
114 {
35290
17a449bc5106 Minor simplifications.
reimar
parents: 32105
diff changeset
115 int c = stream_read_char(demux->stream); /* F */
3790
f21832490974 fixed YUV4MPEG frame reader
alex
parents: 3789
diff changeset
116 if (c == -256)
35291
ef57345fe3e8 Fix memleaks on error and EOF.
reimar
parents: 35290
diff changeset
117 goto err_out; /* EOF */
3790
f21832490974 fixed YUV4MPEG frame reader
alex
parents: 3789
diff changeset
118 if (c != 'F')
f21832490974 fixed YUV4MPEG frame reader
alex
parents: 3789
diff changeset
119 {
3863
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
120 mp_msg(MSGT_DEMUX, MSGL_V, "Bad frame at %d\n", (int)stream_tell(demux->stream)-1);
35291
ef57345fe3e8 Fix memleaks on error and EOF.
reimar
parents: 35290
diff changeset
121 goto err_out;
3790
f21832490974 fixed YUV4MPEG frame reader
alex
parents: 3789
diff changeset
122 }
f21832490974 fixed YUV4MPEG frame reader
alex
parents: 3789
diff changeset
123 stream_skip(demux->stream, 5); /* RAME\n */
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
124 stream_read(demux->stream, buf[0], size);
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
125 stream_read(demux->stream, buf[1], size/4);
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
126 stream_read(demux->stream, buf[2], size/4);
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
127 }
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
128 else
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
129 {
35290
17a449bc5106 Minor simplifications.
reimar
parents: 32105
diff changeset
130 int err = y4m_read_frame(demux->stream, priv->si, &fi, buf);
17a449bc5106 Minor simplifications.
reimar
parents: 32105
diff changeset
131 if (err != Y4M_OK) {
31398
b240cee8506d Error messages should not be hidden at -v level.
reimar
parents: 30928
diff changeset
132 mp_msg(MSGT_DEMUX, MSGL_ERR, "error reading frame %s\n", y4m_strerr(err));
35291
ef57345fe3e8 Fix memleaks on error and EOF.
reimar
parents: 35290
diff changeset
133 goto err_out;
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
134 }
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
135 }
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
136
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
137 /* This seems to be the right way to calculate the presentation time stamp */
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
138 dp->pts=(float)priv->framenum/((sh_video_t*)ds->sh)->fps;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
139 priv->framenum++;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
140 dp->pos=demux->filepos;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
141 dp->flags=0;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
142 ds_add_packet(ds, dp);
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
143
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
144 return 1;
35291
ef57345fe3e8 Fix memleaks on error and EOF.
reimar
parents: 35290
diff changeset
145
ef57345fe3e8 Fix memleaks on error and EOF.
reimar
parents: 35290
diff changeset
146 err_out:
ef57345fe3e8 Fix memleaks on error and EOF.
reimar
parents: 35290
diff changeset
147 if (dp)
ef57345fe3e8 Fix memleaks on error and EOF.
reimar
parents: 35290
diff changeset
148 free_demux_packet(dp);
ef57345fe3e8 Fix memleaks on error and EOF.
reimar
parents: 35290
diff changeset
149 return 0;
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
150 }
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
151
30928
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
152 static void read_streaminfo(demuxer_t *demuxer)
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
153 {
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
154 y4m_priv_t *priv = demuxer->priv;
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
155 sh_video_t *sh = demuxer->video->sh;
3800
3080ef830f93 aspect ratio patch by Rik Snel
alex
parents: 3790
diff changeset
156 y4m_ratio_t ratio;
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
157 int err;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
158
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
159 if (priv->is_older)
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
160 {
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
161 char buf[4];
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
162 int frame_rate_code;
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
163
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
164 stream_skip(demuxer->stream, 8); /* YUV4MPEG */
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
165 stream_skip(demuxer->stream, 1); /* space */
35290
17a449bc5106 Minor simplifications.
reimar
parents: 32105
diff changeset
166 stream_read(demuxer->stream, buf, 3);
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
167 buf[3] = 0;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
168 sh->disp_w = atoi(buf);
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
169 stream_skip(demuxer->stream, 1); /* space */
35290
17a449bc5106 Minor simplifications.
reimar
parents: 32105
diff changeset
170 stream_read(demuxer->stream, buf, 3);
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
171 buf[3] = 0;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
172 sh->disp_h = atoi(buf);
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
173 stream_skip(demuxer->stream, 1); /* space */
35290
17a449bc5106 Minor simplifications.
reimar
parents: 32105
diff changeset
174 stream_read(demuxer->stream, buf, 1);
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
175 buf[1] = 0;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
176 frame_rate_code = atoi(buf);
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
177 stream_skip(demuxer->stream, 1); /* new-line */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
178
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
179 if (!sh->fps)
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
180 {
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
181 /* values from xawtv */
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
182 switch(frame_rate_code)
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
183 {
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
184 case 1:
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
185 sh->fps = 23.976f;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
186 break;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
187 case 2:
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
188 sh->fps = 24.0f;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
189 break;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
190 case 3:
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
191 sh->fps = 25.0f;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
192 break;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
193 case 4:
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
194 sh->fps = 29.97f;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
195 break;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
196 case 5:
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
197 sh->fps = 30.0f;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
198 break;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
199 case 6:
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
200 sh->fps = 50.0f;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
201 break;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
202 case 7:
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
203 sh->fps = 59.94f;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
204 break;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
205 case 8:
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
206 sh->fps = 60.0f;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
207 break;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
208 default:
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
209 sh->fps = 25.0f;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
210 }
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
211 }
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
212 sh->frametime = 1.0f/sh->fps;
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
213 }
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
214 else
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
215 {
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
216 y4m_init_stream_info(priv->si);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
217 if ((err=y4m_read_stream_header(demuxer->stream, priv->si)) != Y4M_OK)
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
218 mp_msg(MSGT_DEMUXER, MSGL_FATAL, "error parsing YUV4MPEG header: %s\n", y4m_strerr(err));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
219
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
220 if(!sh->fps) {
3800
3080ef830f93 aspect ratio patch by Rik Snel
alex
parents: 3790
diff changeset
221 ratio = y4m_si_get_framerate(priv->si);
3080ef830f93 aspect ratio patch by Rik Snel
alex
parents: 3790
diff changeset
222 if (ratio.d != 0)
3080ef830f93 aspect ratio patch by Rik Snel
alex
parents: 3790
diff changeset
223 sh->fps=(float)ratio.n/(float)ratio.d;
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
224 else
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
225 sh->fps=15.0f;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
226 }
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
227 sh->frametime=1.0f/sh->fps;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
228
3800
3080ef830f93 aspect ratio patch by Rik Snel
alex
parents: 3790
diff changeset
229 ratio = y4m_si_get_sampleaspect(priv->si);
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
230
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
231 sh->disp_w = y4m_si_get_width(priv->si);
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
232 sh->disp_h = y4m_si_get_height(priv->si);
12529
74968e3440ff fix bug reported by Leonardo Giordani: sh->aspect is not pixel aspect but movie aspect
rik
parents: 9654
diff changeset
233
74968e3440ff fix bug reported by Leonardo Giordani: sh->aspect is not pixel aspect but movie aspect
rik
parents: 9654
diff changeset
234 if (ratio.d != 0 && ratio.n != 0)
74968e3440ff fix bug reported by Leonardo Giordani: sh->aspect is not pixel aspect but movie aspect
rik
parents: 9654
diff changeset
235 sh->aspect = (float)(sh->disp_w*ratio.n)/(float)(sh->disp_h*ratio.d);
74968e3440ff fix bug reported by Leonardo Giordani: sh->aspect is not pixel aspect but movie aspect
rik
parents: 9654
diff changeset
236
3863
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
237 demuxer->seekable = 0;
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
238 }
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
239
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
240 sh->format = mmioFOURCC('Y', 'V', '1', '2');
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
241
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
242 sh->bih->biSize=40;
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
243 sh->bih->biWidth = sh->disp_w;
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
244 sh->bih->biHeight = sh->disp_h;
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
245 sh->bih->biPlanes=3;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
246 sh->bih->biBitCount=12;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
247 sh->bih->biCompression=sh->format;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
248 sh->bih->biSizeImage=sh->bih->biWidth*sh->bih->biHeight*3/2; /* YV12 */
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
249
30928
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
250 mp_msg(MSGT_DEMUX, MSGL_INFO, "YUV4MPEG2 Video stream %d size: display: %dx%d, codec: %ux%u\n",
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
251 demuxer->video->id, sh->disp_w, sh->disp_h, sh->bih->biWidth,
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
252 sh->bih->biHeight);
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
253 }
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
254
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
255 static demuxer_t* demux_open_y4m(demuxer_t* demuxer){
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
256 y4m_priv_t* priv = demuxer->priv;
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
257 sh_video_t* sh=new_sh_video(demuxer,0);
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
258
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
259 priv->framenum = 0;
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
260 priv->si = malloc(sizeof(y4m_stream_info_t));
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
261
32105
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 31398
diff changeset
262 sh->bih=calloc(1, sizeof(*sh->bih));
30928
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
263
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
264 demuxer->video->sh=sh;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
265 sh->ds=demuxer->video;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
266 demuxer->video->id=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
267
30928
89bfad4c1711 Support concatenated YUV4MPEG files.
reimar
parents: 30927
diff changeset
268 read_streaminfo(demuxer);
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
269
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
270 return demuxer;
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
271 }
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
272
17636
b849a99cdc3c Second-try commit of this patch.
corey
parents: 17569
diff changeset
273 static void demux_seek_y4m(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags) {
3863
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
274 sh_video_t* sh = demuxer->video->sh;
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
275 y4m_priv_t* priv = demuxer->priv;
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
276 int rel_seek_frames = sh->fps*rel_seek_secs;
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
277 int size = 3*sh->disp_w*sh->disp_h/2;
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
278 off_t curr_pos = stream_tell(demuxer->stream);
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
279
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
280 if (priv->framenum + rel_seek_frames < 0) rel_seek_frames = -priv->framenum;
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
281
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
282 //printf("seektoframe=%d rel_seek_secs=%f seektooffset=%ld\n", priv->framenum + rel_seek_frames, rel_seek_secs, curr_pos + rel_seek_frames*(size+6));
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
283 //printf("framenum=%d, curr_pos=%ld, currpos/(size+6)=%f\n", priv->framenum, curr_pos, (float)curr_pos/(float)(size+6));
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
284 priv->framenum += rel_seek_frames;
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
285
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
286 if (priv->is_older) {
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
287 /* Well this is easy: every frame takes up size+6 bytes
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
288 * in the stream and we may assume that the stream pointer
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
289 * is always at the beginning of a frame.
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
290 * framenum is the number of the frame that is about to be
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
291 * demuxed (counting from ONE (see demux_open_y4m)) */
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
292 stream_seek(demuxer->stream, curr_pos + rel_seek_frames*(size+6));
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
293 } else {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
294 /* should never come here, because seeking for YUV4MPEG2
3863
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
295 * is disabled. */
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
296 mp_msg(MSGT_DEMUX, MSGL_WARN, "Seeking for YUV4MPEG2 not yet implemented!\n");
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
297 }
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
298 }
64f5c5749bad Applied Rik Snel's seeking patch
alex
parents: 3800
diff changeset
299
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
300 static void demux_close_y4m(demuxer_t *demuxer)
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
301 {
3800
3080ef830f93 aspect ratio patch by Rik Snel
alex
parents: 3790
diff changeset
302 y4m_priv_t* priv = demuxer->priv;
5810
8a357300d0ec Added demuxer uninit
albeu
parents: 3863
diff changeset
303
8a357300d0ec Added demuxer uninit
albeu
parents: 3863
diff changeset
304 if(!priv)
8a357300d0ec Added demuxer uninit
albeu
parents: 3863
diff changeset
305 return;
3789
811b2e1ff030 added support for older YUV4MPEG format (used by xawtv)
alex
parents: 3786
diff changeset
306 if (!priv->is_older)
35290
17a449bc5106 Minor simplifications.
reimar
parents: 32105
diff changeset
307 y4m_fini_stream_info(priv->si);
17a449bc5106 Minor simplifications.
reimar
parents: 32105
diff changeset
308 free(priv->si);
17a449bc5106 Minor simplifications.
reimar
parents: 32105
diff changeset
309 free(priv);
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
310 return;
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
311 }
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
312
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
313
25707
d4fe6e23283e Make all demuxer_desc_t const, thus moving them to .rodata
reimar
parents: 22605
diff changeset
314 const demuxer_desc_t demuxer_desc_y4m = {
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
315 "YUV4MPEG2 demuxer",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
316 "y4m",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
317 "YUV4MPEG2",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
318 "Rik snel",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
319 "",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
320 DEMUXER_TYPE_Y4M,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
321 1, // safe autodetect
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
322 y4m_check_file,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
323 demux_y4m_fill_buffer,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
324 demux_open_y4m,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
325 demux_close_y4m,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
326 demux_seek_y4m,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
327 NULL
6b86089c2edd Demuxer modularization
rtognimp
parents: 15817
diff changeset
328 };