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 };