From: Laurent Aimar Date: Mon, 8 Feb 2010 20:01:22 +0000 (+0100) Subject: Added VLC_CODEC_YV9 and remove default mapping to I410 (close #3288). X-Git-Tag: 1.1.0-ff~275 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=9ba7d131bc53a56c443ba849cad10dd2053f6aaa;p=vlc Added VLC_CODEC_YV9 and remove default mapping to I410 (close #3288). They are not the same as the chroma plane are swapped. --- diff --git a/include/vlc_fourcc.h b/include/vlc_fourcc.h index e0560f5307..cfb17aac80 100644 --- a/include/vlc_fourcc.h +++ b/include/vlc_fourcc.h @@ -114,6 +114,8 @@ #define VLC_CODEC_AMV VLC_FOURCC('A','M','V',' ') +/* Planar YUV 4:1:0 Y:V:U */ +#define VLC_CODEC_YV9 VLC_FOURCC('Y','V','U','9') /* Planar YUV 4:2:0 Y:V:U */ #define VLC_CODEC_YV12 VLC_FOURCC('Y','V','1','2') /* Planar YUV 4:1:0 Y:U:V */ diff --git a/src/misc/es_format.c b/src/misc/es_format.c index 650b315913..cad689af8f 100644 --- a/src/misc/es_format.c +++ b/src/misc/es_format.c @@ -170,6 +170,7 @@ void video_format_Setup( video_format_t *p_fmt, vlc_fourcc_t i_chroma, case VLC_CODEC_J420: p_fmt->i_bits_per_pixel = 12; break; + case VLC_CODEC_YV9: case VLC_CODEC_I410: p_fmt->i_bits_per_pixel = 9; break; diff --git a/src/misc/fourcc.c b/src/misc/fourcc.c index 6c34d792e3..7883cb5fb1 100644 --- a/src/misc/fourcc.c +++ b/src/misc/fourcc.c @@ -611,9 +611,10 @@ static const entry_t p_list_video[] = { B(VLC_CODEC_YV12, "Planar 4:2:0 YVU"), A("YV12"), A("yv12"), + B(VLC_CODEC_YV9, "Planar 4:1:0 YVU"), + A("YVU9"), B(VLC_CODEC_I410, "Planar 4:1:0 YUV"), A("I410"), - A("YVU9"), B(VLC_CODEC_I411, "Planar 4:1:1 YUV"), A("I411"), B(VLC_CODEC_I420, "Planar 4:2:0 YUV"), @@ -1321,6 +1322,9 @@ const char *vlc_fourcc_GetDescription( int i_cat, vlc_fourcc_t i_fourcc ) /* */ +#define VLC_CODEC_YUV_PLANAR_410 \ + VLC_CODEC_I410, VLC_CODEC_YV9 + #define VLC_CODEC_YUV_PLANAR_420 \ VLC_CODEC_I420, VLC_CODEC_YV12, VLC_CODEC_J420 @@ -1340,7 +1344,7 @@ const char *vlc_fourcc_GetDescription( int i_cat, vlc_fourcc_t i_fourcc ) #define VLC_CODEC_FALLBACK_420 \ VLC_CODEC_YUV_PLANAR_422, VLC_CODEC_YUV_PACKED, \ VLC_CODEC_YUV_PLANAR_444, VLC_CODEC_YUV_PLANAR_440, \ - VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211 + VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211 static const vlc_fourcc_t p_I420_fallback[] = { VLC_CODEC_I420, VLC_CODEC_YV12, VLC_CODEC_J420, VLC_CODEC_FALLBACK_420, 0 @@ -1355,7 +1359,7 @@ static const vlc_fourcc_t p_YV12_fallback[] = { #define VLC_CODEC_FALLBACK_422 \ VLC_CODEC_YUV_PACKED, VLC_CODEC_YUV_PLANAR_420, \ VLC_CODEC_YUV_PLANAR_444, VLC_CODEC_YUV_PLANAR_440, \ - VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211 + VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211 static const vlc_fourcc_t p_I422_fallback[] = { VLC_CODEC_I422, VLC_CODEC_J422, VLC_CODEC_FALLBACK_422, 0 @@ -1367,7 +1371,7 @@ static const vlc_fourcc_t p_J422_fallback[] = { #define VLC_CODEC_FALLBACK_444 \ VLC_CODEC_YUV_PLANAR_422, VLC_CODEC_YUV_PACKED, \ VLC_CODEC_YUV_PLANAR_420, VLC_CODEC_YUV_PLANAR_440, \ - VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211 + VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211 static const vlc_fourcc_t p_I444_fallback[] = { VLC_CODEC_I444, VLC_CODEC_J444, VLC_CODEC_FALLBACK_444, 0 @@ -1382,13 +1386,13 @@ static const vlc_fourcc_t p_I440_fallback[] = { VLC_CODEC_YUV_PLANAR_422, VLC_CODEC_YUV_PLANAR_444, VLC_CODEC_YUV_PACKED, - VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211, 0 + VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211, 0 }; #define VLC_CODEC_FALLBACK_PACKED \ VLC_CODEC_YUV_PLANAR_422, VLC_CODEC_YUV_PLANAR_420, \ VLC_CODEC_YUV_PLANAR_444, VLC_CODEC_YUV_PLANAR_440, \ - VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211 + VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211 static const vlc_fourcc_t p_YUYV_fallback[] = { VLC_CODEC_YUYV, @@ -1441,7 +1445,7 @@ static const vlc_fourcc_t p_list_YUV[] = { VLC_CODEC_YUV_PLANAR_440, VLC_CODEC_YUV_PLANAR_444, VLC_CODEC_YUV_PACKED, - VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211, + VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211, 0, }; @@ -1520,8 +1524,29 @@ const vlc_fourcc_t *vlc_fourcc_GetRGBFallback( vlc_fourcc_t i_fourcc ) bool vlc_fourcc_AreUVPlanesSwapped( vlc_fourcc_t a, vlc_fourcc_t b ) { - return (((a == VLC_CODEC_I420 || a == VLC_CODEC_J420) && b == VLC_CODEC_YV12) || - ((b == VLC_CODEC_I420 || b == VLC_CODEC_J420) && a == VLC_CODEC_YV12)); + static const vlc_fourcc_t pp_swapped[][4] = { + { VLC_CODEC_YV12, VLC_CODEC_I420, VLC_CODEC_J420, 0 }, + { VLC_CODEC_YV9, VLC_CODEC_I410, 0 }, + { 0 } + }; + + for( int i = 0; pp_swapped[i][0]; i++ ) + { + if( pp_swapped[i][0] == b ) + { + vlc_fourcc_t t = a; + a = b; + b = t; + } + if( pp_swapped[i][0] != a ) + continue; + for( int j = 1; pp_swapped[i][j]; j++ ) + { + if( pp_swapped[i][j] == b ) + return true; + } + } + return false; } bool vlc_fourcc_IsYUV(vlc_fourcc_t fcc) diff --git a/src/video_output/vout_pictures.c b/src/video_output/vout_pictures.c index 1a54dfa890..7370c20367 100644 --- a/src/video_output/vout_pictures.c +++ b/src/video_output/vout_pictures.c @@ -745,6 +745,7 @@ int picture_Setup( picture_t *p_picture, vlc_fourcc_t i_chroma, p_picture->i_planes = 3; break; + case VLC_CODEC_YV9: case VLC_CODEC_I410: p_picture->p[ Y_PLANE ].i_lines = i_height_aligned; p_picture->p[ Y_PLANE ].i_visible_lines = i_height;