MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / cinepak_decode_strip

Function cinepak_decode_strip

libavcodec/cinepak.c:266–316  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

264}
265
266static int cinepak_decode_strip (CinepakContext *s,
267 cvid_strip *strip, const uint8_t *data, int size)
268{
269 const uint8_t *eod = (data + size);
270 int chunk_id, chunk_size;
271
272 /* coordinate sanity checks */
273 if (strip->x2 > s->width ||
274 strip->y2 > s->height ||
275 strip->x1 >= strip->x2 || strip->y1 >= strip->y2)
276 return AVERROR_INVALIDDATA;
277
278 while ((data + 4) <= eod) {
279 chunk_id = data[0];
280 chunk_size = AV_RB24 (&data[1]) - 4;
281 if(chunk_size < 0)
282 return AVERROR_INVALIDDATA;
283
284 data += 4;
285 chunk_size = ((data + chunk_size) > eod) ? (eod - data) : chunk_size;
286
287 switch (chunk_id) {
288
289 case 0x20:
290 case 0x21:
291 case 0x24:
292 case 0x25:
293 cinepak_decode_codebook (strip->v4_codebook, chunk_id,
294 chunk_size, data);
295 break;
296
297 case 0x22:
298 case 0x23:
299 case 0x26:
300 case 0x27:
301 cinepak_decode_codebook (strip->v1_codebook, chunk_id,
302 chunk_size, data);
303 break;
304
305 case 0x30:
306 case 0x31:
307 case 0x32:
308 return cinepak_decode_vectors (s, strip, chunk_id,
309 chunk_size, data);
310 }
311
312 data += chunk_size;
313 }
314
315 return AVERROR_INVALIDDATA;
316}
317
318static int cinepak_predecode_check (CinepakContext *s)
319{

Callers 1

cinepak_decodeFunction · 0.85

Calls 2

cinepak_decode_codebookFunction · 0.85
cinepak_decode_vectorsFunction · 0.85

Tested by

no test coverage detected