annotate assdec.c @ 5466:af08ed2b60b8 libavformat

Parse ID3v[12] metadata from TTA files. As a side-effect, this commit also fixes issue 1310.
author jai_menon
date Wed, 16 Dec 2009 19:18:48 +0000
parents da64b6d7a2d9
children 536e5527c1e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3942
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
1 /*
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
2 * SSA/ASS demuxer
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
3 * Copyright (c) 2008 Michael Niedermayer
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
4 *
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
5 * This file is part of FFmpeg.
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
6 *
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
11 *
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
15 * Lesser General Public License for more details.
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
16 *
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
20 */
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
21
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
22 #include "avformat.h"
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
23
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
24 #define MAX_LINESIZE 2000
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
25
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
26 typedef struct ASSContext{
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
27 uint8_t *event_buffer;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
28 uint8_t **event;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
29 unsigned int event_count;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
30 unsigned int event_index;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
31 }ASSContext;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
32
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
33 static void get_line(ByteIOContext *s, char *buf, int maxlen)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
34 {
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
35 int i = 0;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
36 char c;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
37
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
38 do{
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
39 c = get_byte(s);
3950
45684dea4c9b assdec: don't remove CR, they are part of the spec
aurel
parents: 3943
diff changeset
40 if (i < maxlen-1)
3942
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
41 buf[i++] = c;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
42 }while(c != '\n' && c);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
43
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
44 buf[i] = 0;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
45 }
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
46
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
47 static int probe(AVProbeData *p)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
48 {
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
49 const char *header= "[Script Info]";
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
50
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
51 if( !memcmp(p->buf , header, strlen(header))
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
52 || !memcmp(p->buf+3, header, strlen(header)))
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
53 return AVPROBE_SCORE_MAX;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
54
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
55 return 0;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
56 }
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
57
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
58 static int read_close(AVFormatContext *s)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
59 {
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
60 ASSContext *ass = s->priv_data;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
61
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
62 av_freep(&ass->event_buffer);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
63 av_freep(&ass->event);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
64
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
65 return 0;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
66 }
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
67
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
68 static int64_t get_pts(const uint8_t *p)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
69 {
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
70 int hour, min, sec, hsec;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
71
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
72 if(sscanf(p, "%*[^,],%d:%d:%d%*c%d", &hour, &min, &sec, &hsec) != 4)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
73 return AV_NOPTS_VALUE;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
74
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
75 // av_log(NULL, AV_LOG_ERROR, "%d %d %d %d %d [%s]\n", i, hour, min, sec, hsec, p);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
76
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
77 min+= 60*hour;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
78 sec+= 60*min;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
79
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
80 return sec*100+hsec;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
81 }
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
82
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
83 static int event_cmp(uint8_t **a, uint8_t **b)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
84 {
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
85 return get_pts(*a) - get_pts(*b);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
86 }
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
87
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
88 static int read_header(AVFormatContext *s, AVFormatParameters *ap)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
89 {
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
90 int i, header_remaining;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
91 ASSContext *ass = s->priv_data;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
92 ByteIOContext *pb = s->pb;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
93 AVStream *st;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
94 int allocated[2]={0};
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
95 uint8_t *p, **dst[2]={0};
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
96 int pos[2]={0};
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
97
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
98 st = av_new_stream(s, 0);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
99 if (!st)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
100 return -1;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
101 av_set_pts_info(st, 64, 1, 100);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
102 st->codec->codec_type = CODEC_TYPE_SUBTITLE;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
103 st->codec->codec_id= CODEC_ID_SSA;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
104
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
105 header_remaining= INT_MAX;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
106 dst[0] = &st->codec->extradata;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
107 dst[1] = &ass->event_buffer;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
108 while(!url_feof(pb)){
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
109 uint8_t line[MAX_LINESIZE];
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
110
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
111 get_line(pb, line, sizeof(line));
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
112
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
113 if(!memcmp(line, "[Events]", 8))
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
114 header_remaining= 2;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
115 else if(line[0]=='[')
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
116 header_remaining= INT_MAX;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
117
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
118 i= header_remaining==0;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
119
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
120 if(i && get_pts(line) == AV_NOPTS_VALUE)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
121 continue;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
122
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
123 p = av_fast_realloc(*(dst[i]), &allocated[i], pos[i]+MAX_LINESIZE);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
124 if(!p)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
125 goto fail;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
126 *(dst[i])= p;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
127 memcpy(p + pos[i], line, strlen(line)+1);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
128 pos[i] += strlen(line);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
129 if(i) ass->event_count++;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
130 else header_remaining--;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
131 }
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
132 st->codec->extradata_size= pos[0];
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
133
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
134 if(ass->event_count >= UINT_MAX / sizeof(*ass->event))
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
135 goto fail;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
136
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
137 ass->event= av_malloc(ass->event_count * sizeof(*ass->event));
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
138 p= ass->event_buffer;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
139 for(i=0; i<ass->event_count; i++){
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
140 ass->event[i]= p;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
141 while(*p && *p != '\n')
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
142 p++;
3943
b250956a6f68 Do not lose the '\n'.
michael
parents: 3942
diff changeset
143 p++;
3942
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
144 }
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
145
4484
da64b6d7a2d9 Silence "assdec.c:146: warning: passing argument 4 of ¡Æqsort¡Ç from incompatible pointer type"
michael
parents: 3950
diff changeset
146 qsort(ass->event, ass->event_count, sizeof(*ass->event), (void*)event_cmp);
3942
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
147
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
148 return 0;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
149
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
150 fail:
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
151 read_close(s);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
152
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
153 return -1;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
154 }
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
155
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
156 static int read_packet(AVFormatContext *s, AVPacket *pkt)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
157 {
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
158 ASSContext *ass = s->priv_data;
3943
b250956a6f68 Do not lose the '\n'.
michael
parents: 3942
diff changeset
159 uint8_t *p, *end;
3942
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
160
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
161 if(ass->event_index >= ass->event_count)
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
162 return AVERROR(EIO);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
163
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
164 p= ass->event[ ass->event_index ];
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
165
3943
b250956a6f68 Do not lose the '\n'.
michael
parents: 3942
diff changeset
166 end= strchr(p, '\n');
b250956a6f68 Do not lose the '\n'.
michael
parents: 3942
diff changeset
167 av_new_packet(pkt, end ? end-p+1 : strlen(p));
3942
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
168 pkt->flags |= PKT_FLAG_KEY;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
169 pkt->pos= p - ass->event_buffer + s->streams[0]->codec->extradata_size;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
170 pkt->pts= pkt->dts= get_pts(p);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
171 memcpy(pkt->data, p, pkt->size);
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
172
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
173 ass->event_index++;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
174
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
175 return 0;
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
176 }
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
177
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
178 AVInputFormat ass_demuxer = {
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
179 "ass",
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
180 NULL_IF_CONFIG_SMALL("SSA/ASS format"),
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
181 sizeof(ASSContext),
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
182 probe,
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
183 read_header,
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
184 read_packet,
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
185 read_close,
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
186 // read_seek,
ffb410d82ad3 2 in 1, an ASS and SSA demuxer.
michael
parents:
diff changeset
187 };