Re: [FFmpeg-devel] [PATCH 5/6] lavd: add new API for iterating input and output devices

2018-01-03 Thread wm4
On Wed, 3 Jan 2018 00:43:06 +
Josh de Kock  wrote:

> ---
>  configure|  27 ++--
>  libavdevice/alldevices.c | 172 
> +++
>  libavdevice/avdevice.c   |  46 -
>  libavdevice/avdevice.h   |  28 
>  libavdevice/version.h|   4 ++
>  5 files changed, 184 insertions(+), 93 deletions(-)
> 

> +const AVOutputFormat *av_outdev_iterate(void **opaque)
> +{
> +uintptr_t i = (uintptr_t)*opaque;
> +const AVOutputFormat *f = outdev_list[i];
> +if (f)
> +*opaque = (void*)(i + 1);
> +return f;
> +}
> +
> +const AVInputFormat *av_indev_iterate(void **opaque)
> +{
> +uintptr_t i = (uintptr_t)*opaque;
> +const AVInputFormat *f = indev_list[i];
> +
> +if (f)
> +*opaque = (void*)(i + 1);
> +return f;
> +}

(Inconsistent spacing: why does the indev one have an empty line, but
the outev one not?)

> +if (previn)
> +previn->next = NULL;
> +}

(Still wondering if this is redundant.)

So, I think this commit lacks the APIchanges entry.

Same comment about pthread_once() again.
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 5/6] lavd: add new API for iterating input and output devices

2018-01-02 Thread Josh de Kock
---
 configure|  27 ++--
 libavdevice/alldevices.c | 172 +++
 libavdevice/avdevice.c   |  46 -
 libavdevice/avdevice.h   |  28 
 libavdevice/version.h|   4 ++
 5 files changed, 184 insertions(+), 93 deletions(-)

diff --git a/configure b/configure
index 7b46e5c..79eb95a 100755
--- a/configure
+++ b/configure
@@ -569,6 +569,12 @@ add_suffix(){
 for v; do echo ${v}${suffix}; done
 }
 
+remove_suffix(){
+suffix=$1
+shift
+for v; do echo ${v%$suffix}; done
+}
+
 set_all(){
 value=$1
 shift
@@ -3525,17 +3531,18 @@ find_things(){
 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" 
"$file"
 }
 
-OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
-INDEV_LIST=$(find_thingsindev_IN  libavdevice/alldevices.c)
 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
 
 find_things_extern(){
 thing=$1
 pattern=$2
 file=$source_path/$3
-sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
+out=${4:-$thing}
+sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$out/p" "$file"
 }
 
+OUTDEV_LIST=$(find_things_extern muxer AVOutputFormat libavdevice/alldevices.c 
outdev)
+INDEV_LIST=$(find_things_extern demuxer AVInputFormat libavdevice/alldevices.c 
indev)
 MUXER_LIST=$(find_things_extern muxer AVOutputFormat libavformat/allformats.c)
 DEMUXER_LIST=$(find_things_extern demuxer AVInputFormat 
libavformat/allformats.c)
 ENCODER_LIST=$(find_things_extern encoder AVCodec libavcodec/allcodecs.c)
@@ -7032,7 +7039,17 @@ print_enabled_components(){
 shift 3
 echo "static const $struct_name * const $name[] = {" > $TMPH
 for c in $*; do
-enabled $c && printf "_%s,\n" $c >> $TMPH
+if enabled $c; then
+case $name in
+indev_list)
+c=$(add_suffix _demuxer $(remove_suffix _indev $c))
+;;
+outdev_list)
+c=$(add_suffix _muxer $(remove_suffix _outdev $c))
+;;
+esac
+printf "_%s,\n" $c >> $TMPH
+fi
 done
 echo "NULL };" >> $TMPH
 cp_if_changed $TMPH $file
@@ -7041,6 +7058,8 @@ print_enabled_components(){
 print_enabled_components libavcodec/codec_list.c AVCodec codec_list $CODEC_LIST
 print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list 
$PARSER_LIST
 print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter 
bitstream_filters $BSF_LIST
+print_enabled_components libavdevice/indev_list.c AVInputFormat indev_list 
$INDEV_LIST
+print_enabled_components libavdevice/outdev_list.c AVOutputFormat outdev_list 
$OUTDEV_LIST
 print_enabled_components libavformat/demuxer_list.c AVInputFormat demuxer_list 
$DEMUXER_LIST
 print_enabled_components libavformat/muxer_list.c AVOutputFormat muxer_list 
$MUXER_LIST
 print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols 
$PROTOCOL_LIST
diff --git a/libavdevice/alldevices.c b/libavdevice/alldevices.c
index b767b6a..6b2a512 100644
--- a/libavdevice/alldevices.c
+++ b/libavdevice/alldevices.c
@@ -22,57 +22,143 @@
 #include "libavutil/thread.h"
 #include "avdevice.h"
 
-#define REGISTER_OUTDEV(X, x)   \
-{   \
-extern AVOutputFormat ff_##x##_muxer;   \
-if (CONFIG_##X##_OUTDEV)\
-av_register_output_format(_##x##_muxer); \
+/* devices */
+extern AVInputFormat  ff_alsa_demuxer;
+extern AVOutputFormat ff_alsa_muxer;
+extern AVInputFormat  ff_avfoundation_demuxer;
+extern AVInputFormat  ff_bktr_demuxer;
+extern AVOutputFormat ff_caca_muxer;
+extern AVInputFormat  ff_decklink_demuxer;
+extern AVOutputFormat ff_decklink_muxer;
+extern AVInputFormat  ff_libndi_newtek_demuxer;
+extern AVOutputFormat ff_libndi_newtek_muxer;
+extern AVInputFormat  ff_dshow_demuxer;
+extern AVInputFormat  ff_fbdev_demuxer;
+extern AVOutputFormat ff_fbdev_muxer;
+extern AVInputFormat  ff_gdigrab_demuxer;
+extern AVInputFormat  ff_iec61883_demuxer;
+extern AVInputFormat  ff_jack_demuxer;
+extern AVInputFormat  ff_kmsgrab_demuxer;
+extern AVInputFormat  ff_lavfi_demuxer;
+extern AVInputFormat  ff_openal_demuxer;
+extern AVOutputFormat ff_opengl_muxer;
+extern AVInputFormat  ff_oss_demuxer;
+extern AVOutputFormat ff_oss_muxer;
+extern AVInputFormat  ff_pulse_demuxer;
+extern AVOutputFormat ff_pulse_muxer;
+extern AVOutputFormat ff_sdl2_muxer;
+extern AVInputFormat  ff_sndio_demuxer;
+extern AVOutputFormat ff_sndio_muxer;
+extern AVInputFormat  ff_v4l2_demuxer;
+extern AVOutputFormat ff_v4l2_muxer;
+extern AVInputFormat  ff_vfwcap_demuxer;
+extern AVInputFormat  ff_xcbgrab_demuxer;
+extern AVOutputFormat ff_xv_muxer;
+
+/* external libraries */
+extern