From 0bcd380a113e72304ef32daeca955ec7e6502176 Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Sun, 11 Oct 2009 15:58:09 +0200 Subject: [PATCH] Added vlc_fourcc_GetRGBFallback. --- include/vlc_fourcc.h | 8 +++++ src/libvlccore.sym | 1 + src/misc/fourcc.c | 73 +++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 77 insertions(+), 5 deletions(-) diff --git a/include/vlc_fourcc.h b/include/vlc_fourcc.h index 50fde9874a..8563d12c34 100644 --- a/include/vlc_fourcc.h +++ b/include/vlc_fourcc.h @@ -365,6 +365,14 @@ VLC_EXPORT( const char *, vlc_fourcc_GetDescription, ( int i_cat, vlc_fourcc_t i */ VLC_EXPORT( const vlc_fourcc_t *, vlc_fourcc_GetYUVFallback, ( vlc_fourcc_t ) ); +/** + * It returns a list (terminated with the value 0) of RGB fourccs in + * decreasing priority order for the given chroma. + * + * It will always return a non NULL pointer that must not be freed. + */ +VLC_EXPORT( const vlc_fourcc_t *, vlc_fourcc_GetRGBFallback, ( vlc_fourcc_t ) ); + /** * It returns true if the given fourcc is YUV and false otherwise. */ diff --git a/src/libvlccore.sym b/src/libvlccore.sym index ac57220a73..73d2aa2e1d 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -486,6 +486,7 @@ vlc_fourcc_GetCodecAudio vlc_fourcc_GetCodecFromString vlc_fourcc_GetDescription vlc_fourcc_IsYUV +vlc_fourcc_GetRGBFallback vlc_fourcc_GetYUVFallback vlc_fourcc_AreUVPlanesSwapped vlc_gai_strerror diff --git a/src/misc/fourcc.c b/src/misc/fourcc.c index f3dbb08a94..38b8ead419 100644 --- a/src/misc/fourcc.c +++ b/src/misc/fourcc.c @@ -1425,14 +1425,77 @@ static const vlc_fourcc_t p_list_YUV[] = { 0, }; -const vlc_fourcc_t *vlc_fourcc_GetYUVFallback( vlc_fourcc_t i_fourcc ) +/* */ +static const vlc_fourcc_t p_RGB32_fallback[] = { + VLC_CODEC_RGB32, + VLC_CODEC_RGB24, + VLC_CODEC_RGB16, + VLC_CODEC_RGB15, + VLC_CODEC_RGB8, + 0, +}; +static const vlc_fourcc_t p_RGB24_fallback[] = { + VLC_CODEC_RGB24, + VLC_CODEC_RGB32, + VLC_CODEC_RGB16, + VLC_CODEC_RGB15, + VLC_CODEC_RGB8, + 0, +}; +static const vlc_fourcc_t p_RGB16_fallback[] = { + VLC_CODEC_RGB16, + VLC_CODEC_RGB24, + VLC_CODEC_RGB32, + VLC_CODEC_RGB15, + VLC_CODEC_RGB8, + 0, +}; +static const vlc_fourcc_t p_RGB15_fallback[] = { + VLC_CODEC_RGB15, + VLC_CODEC_RGB16, + VLC_CODEC_RGB24, + VLC_CODEC_RGB32, + VLC_CODEC_RGB8, + 0, +}; +static const vlc_fourcc_t p_RGB8_fallback[] = { + VLC_CODEC_RGB8, + VLC_CODEC_RGB15, + VLC_CODEC_RGB16, + VLC_CODEC_RGB24, + VLC_CODEC_RGB32, + 0, +}; +static const vlc_fourcc_t *pp_RGB_fallback[] = { + p_RGB32_fallback, + p_RGB24_fallback, + p_RGB16_fallback, + p_RGB15_fallback, + p_RGB8_fallback, + NULL, +}; + + +/* */ +static const vlc_fourcc_t *GetFallback( vlc_fourcc_t i_fourcc, + const vlc_fourcc_t *pp_fallback[], + const vlc_fourcc_t p_list[] ) { - for( unsigned i = 0; pp_YUV_fallback[i]; i++ ) + for( unsigned i = 0; pp_fallback[i]; i++ ) { - if( pp_YUV_fallback[i][0] == i_fourcc ) - return pp_YUV_fallback[i]; + if( pp_fallback[i][0] == i_fourcc ) + return pp_fallback[i]; } - return p_list_YUV; + return p_list; +} + +const vlc_fourcc_t *vlc_fourcc_GetYUVFallback( vlc_fourcc_t i_fourcc ) +{ + return GetFallback( i_fourcc, pp_YUV_fallback, p_list_YUV ); +} +const vlc_fourcc_t *vlc_fourcc_GetRGBFallback( vlc_fourcc_t i_fourcc ) +{ + return GetFallback( i_fourcc, pp_RGB_fallback, p_RGB32_fallback ); } bool vlc_fourcc_AreUVPlanesSwapped( vlc_fourcc_t a, vlc_fourcc_t b ) -- 2.39.2