mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-19 22:10:34 +00:00
* DR1 support
Originally committed as revision 1157 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
8664c807e6
commit
b0397e0e00
@ -551,11 +551,31 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
|
|||||||
else
|
else
|
||||||
mb_pos_ptr = dv_place_420;
|
mb_pos_ptr = dv_place_420;
|
||||||
|
|
||||||
|
if (avctx->flags & CODEC_FLAG_DR1 && avctx->get_buffer_callback)
|
||||||
|
{
|
||||||
|
s->width = -1;
|
||||||
|
avctx->dr_buffer[0] = avctx->dr_buffer[1] = avctx->dr_buffer[2] = 0;
|
||||||
|
if(avctx->get_buffer_callback(avctx, width, height, I_TYPE) < 0){
|
||||||
|
fprintf(stderr, "get_buffer() failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* (re)alloc picture if needed */
|
/* (re)alloc picture if needed */
|
||||||
if (s->width != width || s->height != height) {
|
if (s->width != width || s->height != height) {
|
||||||
for(i=0;i<3;i++)
|
if (!(avctx->flags & CODEC_FLAG_DR1))
|
||||||
av_freep(&s->current_picture[i]);
|
|
||||||
for(i=0;i<3;i++) {
|
for(i=0;i<3;i++) {
|
||||||
|
if (avctx->dr_buffer[i] != s->current_picture[i])
|
||||||
|
av_freep(&s->current_picture[i]);
|
||||||
|
avctx->dr_buffer[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i=0;i<3;i++) {
|
||||||
|
if (avctx->dr_buffer[i]) {
|
||||||
|
s->current_picture[i] = avctx->dr_buffer[i];
|
||||||
|
s->linesize[i] = (i == 0) ? avctx->dr_stride : avctx->dr_uvstride;
|
||||||
|
} else {
|
||||||
size = width * height;
|
size = width * height;
|
||||||
s->linesize[i] = width;
|
s->linesize[i] = width;
|
||||||
if (i >= 1) {
|
if (i >= 1) {
|
||||||
@ -563,6 +583,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
|
|||||||
s->linesize[i] >>= s->sampling_411 ? 2 : 1;
|
s->linesize[i] >>= s->sampling_411 ? 2 : 1;
|
||||||
}
|
}
|
||||||
s->current_picture[i] = av_malloc(size);
|
s->current_picture[i] = av_malloc(size);
|
||||||
|
}
|
||||||
if (!s->current_picture[i])
|
if (!s->current_picture[i])
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -614,6 +635,7 @@ static int dvvideo_decode_end(AVCodecContext *avctx)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for(i=0;i<3;i++)
|
for(i=0;i<3;i++)
|
||||||
|
if (avctx->dr_buffer[i] != s->current_picture[i])
|
||||||
av_freep(&s->current_picture[i]);
|
av_freep(&s->current_picture[i]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -627,7 +649,7 @@ AVCodec dvvideo_decoder = {
|
|||||||
NULL,
|
NULL,
|
||||||
dvvideo_decode_end,
|
dvvideo_decode_end,
|
||||||
dvvideo_decode_frame,
|
dvvideo_decode_frame,
|
||||||
0,
|
CODEC_CAP_DR1,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user