Mercurial > libavcodec.hg
comparison msvideo1.c @ 1607:9ef0d51e809b libavcodec
Set buffer hints, use cr where available
author | rtognimp |
---|---|
date | Fri, 07 Nov 2003 21:21:36 +0000 |
parents | 932d306bf1dc |
children | 586b5c08863c |
comparison
equal
deleted
inserted
replaced
1606:a1ac8e675b95 | 1607:9ef0d51e809b |
---|---|
46 stream_ptr + n, s->size); \ | 46 stream_ptr + n, s->size); \ |
47 return; \ | 47 return; \ |
48 } | 48 } |
49 | 49 |
50 #define COPY_PREV_BLOCK() \ | 50 #define COPY_PREV_BLOCK() \ |
51 if (!s->avctx->cr_available) {\ | |
51 pixel_ptr = block_ptr; \ | 52 pixel_ptr = block_ptr; \ |
52 for (pixel_y = 0; pixel_y < 4; pixel_y++) { \ | 53 for (pixel_y = 0; pixel_y < 4; pixel_y++) { \ |
53 for (pixel_x = 0; pixel_x < 4; pixel_x++, pixel_ptr++) \ | 54 for (pixel_x = 0; pixel_x < 4; pixel_x++, pixel_ptr++) \ |
54 pixels[pixel_ptr] = prev_pixels[pixel_ptr]; \ | 55 pixels[pixel_ptr] = prev_pixels[pixel_ptr]; \ |
55 pixel_ptr -= row_dec; \ | 56 pixel_ptr -= row_dec; \ |
56 } | 57 } \ |
58 } | |
57 | 59 |
58 typedef struct Msvideo1Context { | 60 typedef struct Msvideo1Context { |
59 | 61 |
60 AVCodecContext *avctx; | 62 AVCodecContext *avctx; |
61 DSPContext dsp; | 63 DSPContext dsp; |
316 void *data, int *data_size, | 318 void *data, int *data_size, |
317 uint8_t *buf, int buf_size) | 319 uint8_t *buf, int buf_size) |
318 { | 320 { |
319 Msvideo1Context *s = (Msvideo1Context *)avctx->priv_data; | 321 Msvideo1Context *s = (Msvideo1Context *)avctx->priv_data; |
320 | 322 |
323 /* no supplementary picture */ | |
324 if (buf_size == 0) | |
325 return 0; | |
326 | |
321 s->buf = buf; | 327 s->buf = buf; |
322 s->size = buf_size; | 328 s->size = buf_size; |
323 | 329 |
330 s->frame.reference = 1; | |
331 s->frame.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE; | |
332 if (avctx->cr_available) | |
333 s->frame.buffer_hints |= FF_BUFFER_HINTS_REUSABLE; | |
334 else | |
335 s->frame.buffer_hints |= FF_BUFFER_HINTS_READABLE; | |
324 if (avctx->get_buffer(avctx, &s->frame)) { | 336 if (avctx->get_buffer(avctx, &s->frame)) { |
325 av_log(s->avctx, AV_LOG_ERROR, " MS Video-1 Video: get_buffer() failed\n"); | 337 av_log(s->avctx, AV_LOG_ERROR, " MS Video-1 Video: get_buffer() failed\n"); |
326 return -1; | 338 return -1; |
327 } | 339 } |
328 | 340 |
338 | 350 |
339 if (s->prev_frame.data[0]) | 351 if (s->prev_frame.data[0]) |
340 avctx->release_buffer(avctx, &s->prev_frame); | 352 avctx->release_buffer(avctx, &s->prev_frame); |
341 | 353 |
342 /* shuffle frames */ | 354 /* shuffle frames */ |
355 if (!avctx->cr_available) | |
343 s->prev_frame = s->frame; | 356 s->prev_frame = s->frame; |
344 | 357 |
345 *data_size = sizeof(AVFrame); | 358 *data_size = sizeof(AVFrame); |
346 *(AVFrame*)data = s->frame; | 359 *(AVFrame*)data = s->frame; |
347 | 360 |
366 sizeof(Msvideo1Context), | 379 sizeof(Msvideo1Context), |
367 msvideo1_decode_init, | 380 msvideo1_decode_init, |
368 NULL, | 381 NULL, |
369 msvideo1_decode_end, | 382 msvideo1_decode_end, |
370 msvideo1_decode_frame, | 383 msvideo1_decode_frame, |
371 CODEC_CAP_DR1, | 384 CODEC_CAP_DR1 | CODEC_CAP_CR, |
372 }; | 385 }; |