Commit e9feea59 authored by Arpi's avatar Arpi

DV ntsc support, 411P colorspace added

Originally committed as revision 1010 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent acd2e05c
...@@ -64,7 +64,8 @@ enum PixelFormat { ...@@ -64,7 +64,8 @@ enum PixelFormat {
PIX_FMT_YUV444P, PIX_FMT_YUV444P,
PIX_FMT_RGBA32, PIX_FMT_RGBA32,
PIX_FMT_BGRA32, PIX_FMT_BGRA32,
PIX_FMT_YUV410P PIX_FMT_YUV410P,
PIX_FMT_YUV411P
}; };
/* currently unused, may be used if 24/32 bits samples ever supported */ /* currently unused, may be used if 24/32 bits samples ever supported */
......
...@@ -521,6 +521,14 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, ...@@ -521,6 +521,14 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
nb_dif_segs = 10; nb_dif_segs = 10;
} }
/* XXX: is it correct to assume that 420 is always used in PAL
mode ? */
s->sampling_411 = !dsf;
if (s->sampling_411)
mb_pos_ptr = dv_place_411;
else
mb_pos_ptr = dv_place_420;
/* (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++) for(i=0;i<3;i++)
...@@ -530,7 +538,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, ...@@ -530,7 +538,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
s->linesize[i] = width; s->linesize[i] = width;
if (i >= 1) { if (i >= 1) {
size >>= 2; size >>= 2;
s->linesize[i] >>= 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])
...@@ -540,14 +548,6 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, ...@@ -540,14 +548,6 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
s->height = height; s->height = height;
} }
/* XXX: is it correct to assume that 420 is always used in PAL
mode ? */
s->sampling_411 = !dsf;
if (s->sampling_411)
mb_pos_ptr = dv_place_411;
else
mb_pos_ptr = dv_place_420;
/* for each DIF segment */ /* for each DIF segment */
buf_ptr = buf; buf_ptr = buf;
for (ds = 0; ds < nb_dif_segs; ds++) { for (ds = 0; ds < nb_dif_segs; ds++) {
...@@ -568,7 +568,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, ...@@ -568,7 +568,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
avctx->width = width; avctx->width = width;
avctx->height = height; avctx->height = height;
if (s->sampling_411) if (s->sampling_411)
avctx->pix_fmt = PIX_FMT_YUV420P; /* XXX: incorrect, add PIX_FMT_YUV411P */ avctx->pix_fmt = PIX_FMT_YUV411P;
else else
avctx->pix_fmt = PIX_FMT_YUV420P; avctx->pix_fmt = PIX_FMT_YUV420P;
if (dsf) if (dsf)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment