comparison rpza.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
138 switch (opcode & 0xe0) { 138 switch (opcode & 0xe0) {
139 139
140 /* Skip blocks */ 140 /* Skip blocks */
141 case 0x80: 141 case 0x80:
142 while (n_blocks--) { 142 while (n_blocks--) {
143 if (!s->avctx->cr_available) {
143 block_ptr = row_ptr + pixel_ptr; 144 block_ptr = row_ptr + pixel_ptr;
144 for (pixel_y = 0; pixel_y < 4; pixel_y++) { 145 for (pixel_y = 0; pixel_y < 4; pixel_y++) {
145 for (pixel_x = 0; pixel_x < 4; pixel_x++){ 146 for (pixel_x = 0; pixel_x < 4; pixel_x++){
146 pixels[block_ptr] = prev_pixels[block_ptr]; 147 pixels[block_ptr] = prev_pixels[block_ptr];
147 block_ptr++; 148 block_ptr++;
148 } 149 }
149 block_ptr += row_inc; 150 block_ptr += row_inc;
150 } 151 }
151 ADVANCE_BLOCK(); 152 }
153 ADVANCE_BLOCK();
152 } 154 }
153 break; 155 break;
154 156
155 /* Fill blocks with one color */ 157 /* Fill blocks with one color */
156 case 0xa0: 158 case 0xa0:
262 void *data, int *data_size, 264 void *data, int *data_size,
263 uint8_t *buf, int buf_size) 265 uint8_t *buf, int buf_size)
264 { 266 {
265 RpzaContext *s = (RpzaContext *)avctx->priv_data; 267 RpzaContext *s = (RpzaContext *)avctx->priv_data;
266 268
269 /* no supplementary picture */
270 if (buf_size == 0)
271 return 0;
272
267 s->buf = buf; 273 s->buf = buf;
268 s->size = buf_size; 274 s->size = buf_size;
269 275
270 s->frame.reference = 1; 276 s->frame.reference = 1;
277 s->frame.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE;
278 if (avctx->cr_available)
279 s->frame.buffer_hints |= FF_BUFFER_HINTS_REUSABLE;
280 else
281 s->frame.buffer_hints |= FF_BUFFER_HINTS_READABLE;
271 if (avctx->get_buffer(avctx, &s->frame)) { 282 if (avctx->get_buffer(avctx, &s->frame)) {
272 av_log(avctx, AV_LOG_ERROR, " RPZA Video: get_buffer() failed\n"); 283 av_log(avctx, AV_LOG_ERROR, " RPZA Video: get_buffer() failed\n");
273 return -1; 284 return -1;
274 } 285 }
275 286
287 if (s->prev_frame.data[0] &&(s->frame.linesize[0] != s->prev_frame.linesize[0]))
288 av_log(avctx, AV_LOG_ERROR, "Buffer linesize changed: current %u, previous %u.\n"
289 "Expect wrong image and/or crash!\n",
290 s->frame.linesize[0], s->prev_frame.linesize[0]);
291
276 rpza_decode_stream(s); 292 rpza_decode_stream(s);
277 293
278 if (s->prev_frame.data[0]) 294 if (s->prev_frame.data[0])
279 avctx->release_buffer(avctx, &s->prev_frame); 295 avctx->release_buffer(avctx, &s->prev_frame);
280 296
281 /* shuffle frames */ 297 /* shuffle frames */
298 if (!avctx->cr_available)
282 s->prev_frame = s->frame; 299 s->prev_frame = s->frame;
283 300
284 *data_size = sizeof(AVFrame); 301 *data_size = sizeof(AVFrame);
285 *(AVFrame*)data = s->frame; 302 *(AVFrame*)data = s->frame;
286 303
305 sizeof(RpzaContext), 322 sizeof(RpzaContext),
306 rpza_decode_init, 323 rpza_decode_init,
307 NULL, 324 NULL,
308 rpza_decode_end, 325 rpza_decode_end,
309 rpza_decode_frame, 326 rpza_decode_frame,
310 CODEC_CAP_DR1, 327 CODEC_CAP_DR1 | CODEC_CAP_CR,
311 }; 328 };