@ -2076,9 +2076,7 @@ void *grow_array(void *array, int elem_size, int *size, int new_size)
static int print_device_sources ( AVInputFormat * fmt , AVDictionary * opts )
{
int ret , i ;
AVFormatContext * dev = NULL ;
AVDeviceInfoList * device_list = NULL ;
AVDictionary * tmp_opts = NULL ;
if ( ! fmt | | ! fmt - > priv_class | | ! AV_IS_INPUT_DEVICE ( fmt - > priv_class - > category ) )
return AVERROR ( EINVAL ) ;
@ -2090,15 +2088,7 @@ static int print_device_sources(AVInputFormat *fmt, AVDictionary *opts)
goto fail ;
}
/* TODO: avformat_open_input calls read_header callback which is not necessary.
Function like avformat_alloc_output_context2 for input could be helpful here . */
av_dict_copy ( & tmp_opts , opts , 0 ) ;
if ( ( ret = avformat_open_input ( & dev , NULL , fmt , & tmp_opts ) ) < 0 ) {
printf ( " Cannot open device: %s. \n " , fmt - > name ) ;
goto fail ;
}
if ( ( ret = avdevice_list_devices ( dev , & device_list ) ) < 0 ) {
if ( ( ret = avdevice_list_input_sources ( fmt , NULL , opts , & device_list ) ) < 0 ) {
printf ( " Cannot list sources. \n " ) ;
goto fail ;
}
@ -2109,18 +2099,14 @@ static int print_device_sources(AVInputFormat *fmt, AVDictionary *opts)
}
fail :
av_dict_free ( & tmp_opts ) ;
avdevice_free_list_devices ( & device_list ) ;
avformat_close_input ( & dev ) ;
return ret ;
}
static int print_device_sinks ( AVOutputFormat * fmt , AVDictionary * opts )
{
int ret , i ;
AVFormatContext * dev = NULL ;
AVDeviceInfoList * device_list = NULL ;
AVDictionary * tmp_opts = NULL ;
if ( ! fmt | | ! fmt - > priv_class | | ! AV_IS_OUTPUT_DEVICE ( fmt - > priv_class - > category ) )
return AVERROR ( EINVAL ) ;
@ -2132,14 +2118,7 @@ static int print_device_sinks(AVOutputFormat *fmt, AVDictionary *opts)
goto fail ;
}
if ( ( ret = avformat_alloc_output_context2 ( & dev , fmt , NULL , NULL ) ) < 0 ) {
printf ( " Cannot open device: %s. \n " , fmt - > name ) ;
goto fail ;
}
av_dict_copy ( & tmp_opts , opts , 0 ) ;
av_opt_set_dict2 ( dev , & tmp_opts , AV_OPT_SEARCH_CHILDREN ) ;
if ( ( ret = avdevice_list_devices ( dev , & device_list ) ) < 0 ) {
if ( ( ret = avdevice_list_output_sinks ( fmt , NULL , opts , & device_list ) ) < 0 ) {
printf ( " Cannot list sinks. \n " ) ;
goto fail ;
}
@ -2150,9 +2129,7 @@ static int print_device_sinks(AVOutputFormat *fmt, AVDictionary *opts)
}
fail :
av_dict_free ( & tmp_opts ) ;
avdevice_free_list_devices ( & device_list ) ;
avformat_free_context ( dev ) ;
return ret ;
}