@ -1193,16 +1193,29 @@ int show_license(void *optctx, const char *opt, const char *arg)
return 0 ;
return 0 ;
}
}
int show_formats ( void * optctx , const char * opt , const char * arg )
static int is_device ( const AVClass * avclass )
{
if ( ! avclass )
return 0 ;
return avclass - > category = = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT | |
avclass - > category = = AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT | |
avclass - > category = = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT | |
avclass - > category = = AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT | |
avclass - > category = = AV_CLASS_CATEGORY_DEVICE_OUTPUT | |
avclass - > category = = AV_CLASS_CATEGORY_DEVICE_INPUT ;
}
static int show_formats_devices ( void * optctx , const char * opt , const char * arg , int device_only )
{
{
AVInputFormat * ifmt = NULL ;
AVInputFormat * ifmt = NULL ;
AVOutputFormat * ofmt = NULL ;
AVOutputFormat * ofmt = NULL ;
const char * last_name ;
const char * last_name ;
int is_dev ;
printf ( " File formats: \n "
printf ( " %s \n "
" D. = Demuxing supported \n "
" D. = Demuxing supported \n "
" .E = Muxing supported \n "
" .E = Muxing supported \n "
" -- \n " ) ;
" -- \n " , device_only ? " Devices: " : " File formats: " ) ;
last_name = " 000 " ;
last_name = " 000 " ;
for ( ; ; ) {
for ( ; ; ) {
int decode = 0 ;
int decode = 0 ;
@ -1211,6 +1224,9 @@ int show_formats(void *optctx, const char *opt, const char *arg)
const char * long_name = NULL ;
const char * long_name = NULL ;
while ( ( ofmt = av_oformat_next ( ofmt ) ) ) {
while ( ( ofmt = av_oformat_next ( ofmt ) ) ) {
is_dev = is_device ( ofmt - > priv_class ) ;
if ( ! is_dev & & device_only )
continue ;
if ( ( name = = NULL | | strcmp ( ofmt - > name , name ) < 0 ) & &
if ( ( name = = NULL | | strcmp ( ofmt - > name , name ) < 0 ) & &
strcmp ( ofmt - > name , last_name ) > 0 ) {
strcmp ( ofmt - > name , last_name ) > 0 ) {
name = ofmt - > name ;
name = ofmt - > name ;
@ -1219,6 +1235,9 @@ int show_formats(void *optctx, const char *opt, const char *arg)
}
}
}
}
while ( ( ifmt = av_iformat_next ( ifmt ) ) ) {
while ( ( ifmt = av_iformat_next ( ifmt ) ) ) {
is_dev = is_device ( ifmt - > priv_class ) ;
if ( ! is_dev & & device_only )
continue ;
if ( ( name = = NULL | | strcmp ( ifmt - > name , name ) < 0 ) & &
if ( ( name = = NULL | | strcmp ( ifmt - > name , name ) < 0 ) & &
strcmp ( ifmt - > name , last_name ) > 0 ) {
strcmp ( ifmt - > name , last_name ) > 0 ) {
name = ifmt - > name ;
name = ifmt - > name ;
@ -1241,6 +1260,16 @@ int show_formats(void *optctx, const char *opt, const char *arg)
return 0 ;
return 0 ;
}
}
int show_formats ( void * optctx , const char * opt , const char * arg )
{
return show_formats_devices ( optctx , opt , arg , 0 ) ;
}
int show_devices ( void * optctx , const char * opt , const char * arg )
{
return show_formats_devices ( optctx , opt , arg , 1 ) ;
}
# define PRINT_CODEC_SUPPORTED(codec, field, type, list_name, term, get_name) \
# define PRINT_CODEC_SUPPORTED(codec, field, type, list_name, term, get_name) \
if ( codec - > field ) { \
if ( codec - > field ) { \
const type * p = codec - > field ; \
const type * p = codec - > field ; \