annotate mpegvideo_parser.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 67b3d3174b41
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
1 /*
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
2 * MPEG1 / MPEG2 video parser
8629
04423b2f6e0b cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 6994
diff changeset
3 * Copyright (c) 2000,2001 Fabrice Bellard
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
5 *
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
6 * This file is part of FFmpeg.
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
7 *
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
12 *
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
16 * Lesser General Public License for more details.
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
17 *
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
21 */
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
22
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
23 #include "parser.h"
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
24 #include "mpegvideo.h"
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
25
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
26 static void mpegvideo_extract_headers(AVCodecParserContext *s,
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
27 AVCodecContext *avctx,
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
28 const uint8_t *buf, int buf_size)
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
29 {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
30 ParseContext1 *pc = s->priv_data;
10685
60ca4112b5f4 Merge init & declaration of buf_end.
michael
parents: 10642
diff changeset
31 const uint8_t *buf_end = buf + buf_size;
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
32 uint32_t start_code;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
33 int frame_rate_index, ext_type, bytes_left;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
34 int frame_rate_ext_n, frame_rate_ext_d;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
35 int picture_structure, top_field_first, repeat_first_field, progressive_frame;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
36 int horiz_size_ext, vert_size_ext, bit_rate_ext;
10641
9311c65558c0 Make sure the parsers do not overwrite width/height as this can interfere
michael
parents: 9090
diff changeset
37 int did_set_size=0;
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
38 //FIXME replace the crap with get_bits()
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
39 s->repeat_pict = 0;
10685
60ca4112b5f4 Merge init & declaration of buf_end.
michael
parents: 10642
diff changeset
40
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
41 while (buf < buf_end) {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
42 start_code= -1;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
43 buf= ff_find_start_code(buf, buf_end, &start_code);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
44 bytes_left = buf_end - buf;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
45 switch(start_code) {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
46 case PICTURE_START_CODE:
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
47 if (bytes_left >= 2) {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
48 s->pict_type = (buf[1] >> 3) & 7;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
49 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
50 break;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
51 case SEQ_START_CODE:
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
52 if (bytes_left >= 7) {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
53 pc->width = (buf[0] << 4) | (buf[1] >> 4);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
54 pc->height = ((buf[1] & 0x0f) << 8) | buf[2];
10641
9311c65558c0 Make sure the parsers do not overwrite width/height as this can interfere
michael
parents: 9090
diff changeset
55 if(!avctx->width || !avctx->height || !avctx->coded_width || !avctx->coded_height){
10642
48ecbc11c8dc Cosmetics: Reindent after r20736.
cehoyos
parents: 10641
diff changeset
56 avcodec_set_dimensions(avctx, pc->width, pc->height);
10641
9311c65558c0 Make sure the parsers do not overwrite width/height as this can interfere
michael
parents: 9090
diff changeset
57 did_set_size=1;
9311c65558c0 Make sure the parsers do not overwrite width/height as this can interfere
michael
parents: 9090
diff changeset
58 }
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
59 frame_rate_index = buf[3] & 0xf;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
60 pc->frame_rate.den = avctx->time_base.den = ff_frame_rate_tab[frame_rate_index].num;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
61 pc->frame_rate.num = avctx->time_base.num = ff_frame_rate_tab[frame_rate_index].den;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
62 avctx->bit_rate = ((buf[4]<<10) | (buf[5]<<2) | (buf[6]>>6))*400;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
63 avctx->codec_id = CODEC_ID_MPEG1VIDEO;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
64 avctx->sub_id = 1;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
65 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
66 break;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
67 case EXT_START_CODE:
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
68 if (bytes_left >= 1) {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
69 ext_type = (buf[0] >> 4);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
70 switch(ext_type) {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
71 case 0x1: /* sequence extension */
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
72 if (bytes_left >= 6) {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
73 horiz_size_ext = ((buf[1] & 1) << 1) | (buf[2] >> 7);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
74 vert_size_ext = (buf[2] >> 5) & 3;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
75 bit_rate_ext = ((buf[2] & 0x1F)<<7) | (buf[3]>>1);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
76 frame_rate_ext_n = (buf[5] >> 5) & 3;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
77 frame_rate_ext_d = (buf[5] & 0x1f);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
78 pc->progressive_sequence = buf[1] & (1 << 3);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
79 avctx->has_b_frames= !(buf[5] >> 7);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
80
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
81 pc->width |=(horiz_size_ext << 12);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
82 pc->height |=( vert_size_ext << 12);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
83 avctx->bit_rate += (bit_rate_ext << 18) * 400;
10641
9311c65558c0 Make sure the parsers do not overwrite width/height as this can interfere
michael
parents: 9090
diff changeset
84 if(did_set_size)
10642
48ecbc11c8dc Cosmetics: Reindent after r20736.
cehoyos
parents: 10641
diff changeset
85 avcodec_set_dimensions(avctx, pc->width, pc->height);
9036
8e5fe9e56b93 Correct time_base and repeat_pict for MPEG2 video.
cehoyos
parents: 8629
diff changeset
86 avctx->time_base.den = pc->frame_rate.den * (frame_rate_ext_n + 1) * 2;
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
87 avctx->time_base.num = pc->frame_rate.num * (frame_rate_ext_d + 1);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
88 avctx->codec_id = CODEC_ID_MPEG2VIDEO;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
89 avctx->sub_id = 2; /* forces MPEG2 */
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
90 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
91 break;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
92 case 0x8: /* picture coding extension */
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
93 if (bytes_left >= 5) {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
94 picture_structure = buf[2]&3;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
95 top_field_first = buf[3] & (1 << 7);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
96 repeat_first_field = buf[3] & (1 << 1);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
97 progressive_frame = buf[4] & (1 << 7);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
98
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
99 /* check if we must repeat the frame */
9036
8e5fe9e56b93 Correct time_base and repeat_pict for MPEG2 video.
cehoyos
parents: 8629
diff changeset
100 s->repeat_pict = 1;
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
101 if (repeat_first_field) {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
102 if (pc->progressive_sequence) {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
103 if (top_field_first)
9036
8e5fe9e56b93 Correct time_base and repeat_pict for MPEG2 video.
cehoyos
parents: 8629
diff changeset
104 s->repeat_pict = 5;
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
105 else
9036
8e5fe9e56b93 Correct time_base and repeat_pict for MPEG2 video.
cehoyos
parents: 8629
diff changeset
106 s->repeat_pict = 3;
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
107 } else if (progressive_frame) {
9036
8e5fe9e56b93 Correct time_base and repeat_pict for MPEG2 video.
cehoyos
parents: 8629
diff changeset
108 s->repeat_pict = 2;
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
109 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
110 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
111 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
112 break;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
113 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
114 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
115 break;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
116 case -1:
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
117 goto the_end;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
118 default:
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
119 /* we stop parsing when we encounter a slice. It ensures
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
120 that this function takes a negligible amount of time */
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
121 if (start_code >= SLICE_MIN_START_CODE &&
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
122 start_code <= SLICE_MAX_START_CODE)
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
123 goto the_end;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
124 break;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
125 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
126 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
127 the_end: ;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
128 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
129
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
130 static int mpegvideo_parse(AVCodecParserContext *s,
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
131 AVCodecContext *avctx,
4931
0d1cc37d9430 make some parser parameters const to avoid casting const to non-const
aurel
parents: 4916
diff changeset
132 const uint8_t **poutbuf, int *poutbuf_size,
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
133 const uint8_t *buf, int buf_size)
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
134 {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
135 ParseContext1 *pc1 = s->priv_data;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
136 ParseContext *pc= &pc1->pc;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
137 int next;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
138
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
139 if(s->flags & PARSER_FLAG_COMPLETE_FRAMES){
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
140 next= buf_size;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
141 }else{
9090
cecf81f93756 Call ff_fetch_timestamp() for mpeg1/2 when a picture start code is found instead
michael
parents: 9036
diff changeset
142 next= ff_mpeg1_find_frame_end(pc, buf, buf_size, s);
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
143
4931
0d1cc37d9430 make some parser parameters const to avoid casting const to non-const
aurel
parents: 4916
diff changeset
144 if (ff_combine_frame(pc, next, &buf, &buf_size) < 0) {
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
145 *poutbuf = NULL;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
146 *poutbuf_size = 0;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
147 return buf_size;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
148 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
149
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
150 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
151 /* we have a full frame : we just parse the first few MPEG headers
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
152 to have the full timing information. The time take by this
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
153 function should be negligible for uncorrupted streams */
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
154 mpegvideo_extract_headers(s, avctx, buf, buf_size);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
155 #if 0
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
156 printf("pict_type=%d frame_rate=%0.3f repeat_pict=%d\n",
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
157 s->pict_type, (double)avctx->time_base.den / avctx->time_base.num, s->repeat_pict);
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
158 #endif
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
159
4931
0d1cc37d9430 make some parser parameters const to avoid casting const to non-const
aurel
parents: 4916
diff changeset
160 *poutbuf = buf;
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
161 *poutbuf_size = buf_size;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
162 return next;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
163 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
164
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
165 static int mpegvideo_split(AVCodecContext *avctx,
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
166 const uint8_t *buf, int buf_size)
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
167 {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
168 int i;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
169 uint32_t state= -1;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
170
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
171 for(i=0; i<buf_size; i++){
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
172 state= (state<<8) | buf[i];
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
173 if(state != 0x1B3 && state != 0x1B5 && state < 0x200 && state >= 0x100)
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
174 return i-3;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
175 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
176 return 0;
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
177 }
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
178
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
179 AVCodecParser mpegvideo_parser = {
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
180 { CODEC_ID_MPEG1VIDEO, CODEC_ID_MPEG2VIDEO },
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
181 sizeof(ParseContext1),
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
182 NULL,
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
183 mpegvideo_parse,
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
184 ff_parse1_close,
11073
michael
parents: 10685
diff changeset
185 mpegvideo_split,
4915
c22e10113015 move mpegvideo_parser in it's own file
aurel
parents:
diff changeset
186 };