@ -28,7 +28,7 @@
# include "pixdesc.h"
# include "pixfmt.h"
static const HWContextType * hw_table [ ] = {
static const HWContextType * const hw_table [ ] = {
# if CONFIG_CUDA
& ff_hwcontext_type_cuda ,
# endif
@ -50,6 +50,48 @@ static const HWContextType *hw_table[] = {
NULL ,
} ;
static const char * const hw_type_names [ ] = {
[ AV_HWDEVICE_TYPE_CUDA ] = " cuda " ,
[ AV_HWDEVICE_TYPE_DXVA2 ] = " dxva2 " ,
[ AV_HWDEVICE_TYPE_QSV ] = " qsv " ,
[ AV_HWDEVICE_TYPE_VAAPI ] = " vaapi " ,
[ AV_HWDEVICE_TYPE_VDPAU ] = " vdpau " ,
[ AV_HWDEVICE_TYPE_VIDEOTOOLBOX ] = " videotoolbox " ,
} ;
enum AVHWDeviceType av_hwdevice_find_type_by_name ( const char * name )
{
int type ;
for ( type = 0 ; type < FF_ARRAY_ELEMS ( hw_type_names ) ; type + + ) {
if ( hw_type_names [ type ] & & ! strcmp ( hw_type_names [ type ] , name ) )
return type ;
}
return AV_HWDEVICE_TYPE_NONE ;
}
const char * av_hwdevice_get_type_name ( enum AVHWDeviceType type )
{
if ( type > = 0 & & type < FF_ARRAY_ELEMS ( hw_type_names ) )
return hw_type_names [ type ] ;
else
return NULL ;
}
enum AVHWDeviceType av_hwdevice_iterate_types ( enum AVHWDeviceType prev )
{
enum AVHWDeviceType next ;
int i , set = 0 ;
for ( i = 0 ; hw_table [ i ] ; i + + ) {
if ( prev ! = AV_HWDEVICE_TYPE_NONE & & hw_table [ i ] - > type < = prev )
continue ;
if ( ! set | | hw_table [ i ] - > type < next ) {
next = hw_table [ i ] - > type ;
set = 1 ;
}
}
return set ? next : AV_HWDEVICE_TYPE_NONE ;
}
static const AVClass hwdevice_ctx_class = {
. class_name = " AVHWDeviceContext " ,
. item_name = av_default_item_name ,