[vlc-devel] [PATCH] vaapi: fix profiles detection.
Francois Cartegnie
fcvlcdev at free.fr
Tue Dec 6 15:57:35 CET 2011
The selected profile wasn't checked against card's ones.
(ex: resulting in sending MPEG2 to a VC1/h264 only card)
---
modules/codec/avcodec/vaapi.c | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/modules/codec/avcodec/vaapi.c b/modules/codec/avcodec/vaapi.c
index 710fddd..6ffeb99 100644
--- a/modules/codec/avcodec/vaapi.c
+++ b/modules/codec/avcodec/vaapi.c
@@ -96,7 +96,11 @@ static vlc_va_vaapi_t *vlc_va_vaapi_Get( void *p_va )
static int Open( vlc_va_vaapi_t *p_va, int i_codec_id )
{
VAProfile i_profile;
+ VAProfile *p_profiles_list;
int i_surface_count;
+ bool b_supported_profile = false;
+ int i_profiles_nb;
+ int i_status;
/* */
switch( i_codec_id )
@@ -144,6 +148,26 @@ static int Open( vlc_va_vaapi_t *p_va, int i_codec_id )
if( vaInitialize( p_va->p_display, &p_va->i_version_major, &p_va->i_version_minor ) )
goto error;
+ /* Check if the selected profile is supported */
+ i_profiles_nb = vaMaxNumProfiles( p_va->p_display );
+ p_profiles_list = calloc( i_profiles_nb, sizeof( VAProfile ) );
+ if ( !p_profiles_list ) goto error;
+
+ i_status = vaQueryConfigProfiles( p_va->p_display, p_profiles_list, &i_profiles_nb );
+ if ( i_status == VA_STATUS_SUCCESS )
+ {
+ for( int i = 0; i < i_profiles_nb; i++ )
+ {
+ if ( p_profiles_list[i] == i_profile )
+ {
+ b_supported_profile = true;
+ break;
+ }
+ }
+ }
+ free( p_profiles_list );
+ if ( !b_supported_profile ) goto error;
+
/* Create a VA configuration */
VAConfigAttrib attrib;
memset( &attrib, 0, sizeof(attrib) );
--
1.7.3.4
More information about the vlc-devel
mailing list