changeset 9028:0f95e4f0a3f5 libavcodec

Add and use ff_pixfmt_list_420.
author michael
date Tue, 24 Feb 2009 18:27:52 +0000
parents 3c141db76660
children e10f554d8fb7
files h263dec.c h264.c mpegvideo.c mpegvideo.h rv10.c rv30.c rv40.c svq3.c wmv2dec.c
diffstat 9 files changed, 24 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/h263dec.c	Tue Feb 24 18:24:56 2009 +0000
+++ b/h263dec.c	Tue Feb 24 18:27:52 2009 +0000
@@ -52,7 +52,7 @@
     s->quant_precision=5;
     s->decode_mb= ff_h263_decode_mb;
     s->low_delay= 1;
-    avctx->pix_fmt= PIX_FMT_YUV420P;
+    avctx->pix_fmt= avctx->get_format(avctx, avctx->codec->pix_fmts);
     s->unrestricted_mv= 1;
 
     /* select sub codec */
@@ -725,6 +725,7 @@
     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY,
     .flush= ff_mpeg_flush,
     .long_name= NULL_IF_CONFIG_SMALL("MPEG-4 part 2"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
 
 AVCodec h263_decoder = {
@@ -739,6 +740,7 @@
     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY,
     .flush= ff_mpeg_flush,
     .long_name= NULL_IF_CONFIG_SMALL("H.263 / H.263-1996, H.263+ / H.263-1998"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
 
 AVCodec msmpeg4v1_decoder = {
@@ -752,6 +754,7 @@
     ff_h263_decode_frame,
     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1,
     .long_name= NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 1"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
 
 AVCodec msmpeg4v2_decoder = {
@@ -765,6 +768,7 @@
     ff_h263_decode_frame,
     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1,
     .long_name= NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 2"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
 
 AVCodec msmpeg4v3_decoder = {
@@ -778,6 +782,7 @@
     ff_h263_decode_frame,
     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1,
     .long_name= NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 3"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
 
 AVCodec wmv1_decoder = {
@@ -791,6 +796,7 @@
     ff_h263_decode_frame,
     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1,
     .long_name= NULL_IF_CONFIG_SMALL("Windows Media Video 7"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
 
 AVCodec h263i_decoder = {
@@ -804,6 +810,7 @@
     ff_h263_decode_frame,
     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1,
     .long_name = NULL_IF_CONFIG_SMALL("Intel H.263"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
 
 AVCodec flv_decoder = {
@@ -817,4 +824,5 @@
     ff_h263_decode_frame,
     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1,
     .long_name= NULL_IF_CONFIG_SMALL("Flash Video"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
--- a/h264.c	Tue Feb 24 18:24:56 2009 +0000
+++ b/h264.c	Tue Feb 24 18:27:52 2009 +0000
@@ -2178,12 +2178,10 @@
     s->quarter_sample = 1;
     s->low_delay= 1;
 
-    if(avctx->codec_id == CODEC_ID_SVQ3)
-        avctx->pix_fmt= PIX_FMT_YUVJ420P;
-    else if(s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU)
+    if(s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU)
         avctx->pix_fmt= PIX_FMT_VDPAU_H264;
     else
-        avctx->pix_fmt= PIX_FMT_YUV420P;
+        avctx->pix_fmt= avctx->get_format(avctx, avctx->codec->pix_fmts);
 
     decode_init_vlc();
 
@@ -8097,6 +8095,7 @@
     /*CODEC_CAP_DRAW_HORIZ_BAND |*/ CODEC_CAP_DR1 | CODEC_CAP_DELAY,
     .flush= flush_dpb,
     .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
 
 #if CONFIG_H264_VDPAU_DECODER
--- a/mpegvideo.c	Tue Feb 24 18:24:56 2009 +0000
+++ b/mpegvideo.c	Tue Feb 24 18:27:52 2009 +0000
@@ -75,6 +75,10 @@
     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 };
 
+const enum PixelFormat ff_pixfmt_list_420[] = {
+    PIX_FMT_YUV420P,
+    PIX_FMT_NONE
+};
 
 const uint8_t *ff_find_start_code(const uint8_t * restrict p, const uint8_t *end, uint32_t * restrict state){
     int i;
--- a/mpegvideo.h	Tue Feb 24 18:24:56 2009 +0000
+++ b/mpegvideo.h	Tue Feb 24 18:27:52 2009 +0000
@@ -708,6 +708,8 @@
 void ff_init_block_index(MpegEncContext *s);
 void ff_copy_picture(Picture *dst, Picture *src);
 
+extern const enum PixelFormat ff_pixfmt_list_420[];
+
 static inline void ff_update_block_index(MpegEncContext *s){
     const int block_size= 8>>s->avctx->lowres;
 
--- a/rv10.c	Tue Feb 24 18:24:56 2009 +0000
+++ b/rv10.c	Tue Feb 24 18:27:52 2009 +0000
@@ -794,6 +794,7 @@
     rv10_decode_frame,
     CODEC_CAP_DR1,
     .long_name = NULL_IF_CONFIG_SMALL("RealVideo 1.0"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
 
 AVCodec rv20_decoder = {
@@ -808,5 +809,6 @@
     CODEC_CAP_DR1 | CODEC_CAP_DELAY,
     .flush= ff_mpeg_flush,
     .long_name = NULL_IF_CONFIG_SMALL("RealVideo 2.0"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
 
--- a/rv30.c	Tue Feb 24 18:24:56 2009 +0000
+++ b/rv30.c	Tue Feb 24 18:27:52 2009 +0000
@@ -278,4 +278,5 @@
     CODEC_CAP_DR1 | CODEC_CAP_DELAY,
     .flush = ff_mpeg_flush,
     .long_name = NULL_IF_CONFIG_SMALL("RealVideo 3.0"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
--- a/rv40.c	Tue Feb 24 18:24:56 2009 +0000
+++ b/rv40.c	Tue Feb 24 18:27:52 2009 +0000
@@ -656,4 +656,5 @@
     CODEC_CAP_DR1 | CODEC_CAP_DELAY,
     .flush = ff_mpeg_flush,
     .long_name = NULL_IF_CONFIG_SMALL("RealVideo 4.0"),
+    .pix_fmts= ff_pixfmt_list_420,
 };
--- a/svq3.c	Tue Feb 24 18:24:56 2009 +0000
+++ b/svq3.c	Tue Feb 24 18:27:52 2009 +0000
@@ -1050,4 +1050,5 @@
     svq3_decode_frame,
     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_DELAY,
     .long_name = NULL_IF_CONFIG_SMALL("Sorenson Vector Quantizer 3"),
+    .pix_fmts= (enum PixelFormat[]){PIX_FMT_YUV410P, PIX_FMT_NONE},
 };
--- a/wmv2dec.c	Tue Feb 24 18:24:56 2009 +0000
+++ b/wmv2dec.c	Tue Feb 24 18:27:52 2009 +0000
@@ -494,4 +494,5 @@
     ff_h263_decode_frame,
     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1,
     .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 8"),
+    .pix_fmts= ff_pixfmt_list_420,
 };