You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	Revert "lavd: add new API for iterating input and output devices"
This reverts commit0fd475704e. Revert "lavd: fix iterating of input and output devices" This reverts commitce1d77a5e7. Signed-off-by: Josh de Kock <josh@itanimul.li>
This commit is contained in:
		
							
								
								
									
										3
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Makefile
									
									
									
									
									
								
							| @@ -144,8 +144,7 @@ distclean:: clean | ||||
| 		version.h libavutil/ffversion.h libavcodec/codec_names.h \ | ||||
| 		libavcodec/bsf_list.c libavformat/protocol_list.c \ | ||||
| 		libavcodec/codec_list.c libavcodec/parser_list.c \ | ||||
| 		libavformat/muxer_list.c libavformat/demuxer_list.c \ | ||||
| 		libavdevice/indev_list.c libavdevice/outdev_list.c | ||||
| 		libavformat/muxer_list.c libavformat/demuxer_list.c | ||||
| ifeq ($(SRC_LINK),src) | ||||
| 	$(RM) src | ||||
| endif | ||||
|   | ||||
							
								
								
									
										23
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -3622,12 +3622,21 @@ for v in "$@"; do | ||||
|     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}" | ||||
| done | ||||
|  | ||||
| find_things(){ | ||||
|     thing=$1 | ||||
|     pattern=$2 | ||||
|     file=$source_path/$3 | ||||
|     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file" | ||||
| } | ||||
|  | ||||
| OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c) | ||||
| INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c) | ||||
|  | ||||
| find_things_extern(){ | ||||
|     thing=$1 | ||||
|     pattern=$2 | ||||
|     file=$source_path/$3 | ||||
|     out=${4:-$thing} | ||||
|     sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$out/p" "$file" | ||||
|     sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file" | ||||
| } | ||||
|  | ||||
| find_filters_extern(){ | ||||
| @@ -3637,8 +3646,6 @@ find_filters_extern(){ | ||||
| } | ||||
|  | ||||
| FILTER_LIST=$(find_filters_extern libavfilter/allfilters.c) | ||||
| 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) | ||||
| @@ -7172,12 +7179,6 @@ print_enabled_components(){ | ||||
|                 filter_list) | ||||
|                     c=$(full_filter_name $(remove_suffix _filter $c)) | ||||
|                 ;; | ||||
|                 indev_list) | ||||
|                     c=$(add_suffix _demuxer $(remove_suffix _indev $c)) | ||||
|                 ;; | ||||
|                 outdev_list) | ||||
|                     c=$(add_suffix _muxer $(remove_suffix _outdev $c)) | ||||
|                 ;; | ||||
|             esac | ||||
|             printf "    &ff_%s,\n" $c >> $TMPH | ||||
|         fi | ||||
| @@ -7195,8 +7196,6 @@ print_enabled_components libavfilter/filter_list.c AVFilter filter_list $FILTER_ | ||||
| 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 | ||||
|   | ||||
| @@ -56,11 +56,6 @@ API changes, most recent first: | ||||
| 2018-02-xx - xxxxxxx - lavc 58.11.100 - avcodec.h | ||||
|   Add AVCodecContext.extra_hw_frames. | ||||
|  | ||||
| 2018-02-06 - 0fd475704e - lavd 58.1.100 - avdevice.h | ||||
|   Deprecate use of av_input_audio_device_next(), av_input_video_device_next(), | ||||
|   av_output_audio_device_next(), av_output_video_device_next(). | ||||
|   Add av_indev_iterate(), and av_outdev_iterate(). | ||||
|  | ||||
| 2018-xx-xx - xxxxxxx - lavf 58.9.100 - avformat.h | ||||
|   Deprecate use of av_register_input_format(), av_register_output_format(), | ||||
|   av_register_all(), av_iformat_next(), av_oformat_next(). | ||||
|   | ||||
							
								
								
									
										2
									
								
								libavdevice/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								libavdevice/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,2 +0,0 @@ | ||||
| /indev_list.c | ||||
| /outdev_list.c | ||||
| @@ -22,150 +22,57 @@ | ||||
| #include "libavutil/thread.h" | ||||
| #include "avdevice.h" | ||||
|  | ||||
| #if FF_API_NEXT | ||||
| #include "libavformat/internal.h" | ||||
| #endif | ||||
|  | ||||
| /* devices */ | ||||
| extern AVInputFormat  ff_alsa_demuxer; | ||||
| extern AVOutputFormat ff_alsa_muxer; | ||||
| extern AVInputFormat  ff_android_camera_demuxer; | ||||
| 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 AVInputFormat  ff_libcdio_demuxer; | ||||
| extern AVInputFormat  ff_libdc1394_demuxer; | ||||
|  | ||||
| #include "libavdevice/outdev_list.c" | ||||
| #include "libavdevice/indev_list.c" | ||||
|  | ||||
| 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; | ||||
| } | ||||
|  | ||||
| #if FF_API_NEXT | ||||
| FF_DISABLE_DEPRECATION_WARNINGS | ||||
| static AVOnce av_device_next_init = AV_ONCE_INIT; | ||||
|  | ||||
| static void av_device_init_next(void) | ||||
| { | ||||
|     AVOutputFormat *prevout = NULL, *out; | ||||
|     AVInputFormat *previn = NULL, *in; | ||||
|     void *i = 0; | ||||
|  | ||||
|     while ((out = (AVOutputFormat*)av_outdev_iterate(&i))) { | ||||
|         if (prevout) | ||||
|             prevout->next = out; | ||||
|         prevout = out; | ||||
| #define REGISTER_OUTDEV(X, x)                                           \ | ||||
|     {                                                                   \ | ||||
|         extern AVOutputFormat ff_##x##_muxer;                           \ | ||||
|         if (CONFIG_##X##_OUTDEV)                                        \ | ||||
|             av_register_output_format(&ff_##x##_muxer);                 \ | ||||
|     } | ||||
|  | ||||
|     i = 0; | ||||
|     while ((in = (AVInputFormat*)av_indev_iterate(&i))) { | ||||
|         if (previn) | ||||
|             previn->next = in; | ||||
|         previn = in; | ||||
| #define REGISTER_INDEV(X, x)                                            \ | ||||
|     {                                                                   \ | ||||
|         extern AVInputFormat ff_##x##_demuxer;                          \ | ||||
|         if (CONFIG_##X##_INDEV)                                         \ | ||||
|             av_register_input_format(&ff_##x##_demuxer);                \ | ||||
|     } | ||||
|  | ||||
|     avpriv_register_devices(outdev_list, indev_list); | ||||
| #define REGISTER_INOUTDEV(X, x) REGISTER_OUTDEV(X, x); REGISTER_INDEV(X, x) | ||||
|  | ||||
| static void register_all(void) | ||||
| { | ||||
|     /* devices */ | ||||
|     REGISTER_INOUTDEV(ALSA,             alsa); | ||||
|     REGISTER_INDEV   (AVFOUNDATION,     avfoundation); | ||||
|     REGISTER_INDEV   (BKTR,             bktr); | ||||
|     REGISTER_OUTDEV  (CACA,             caca); | ||||
|     REGISTER_INOUTDEV(DECKLINK,         decklink); | ||||
|     REGISTER_INOUTDEV(LIBNDI_NEWTEK,    libndi_newtek); | ||||
|     REGISTER_INDEV   (DSHOW,            dshow); | ||||
|     REGISTER_INOUTDEV(FBDEV,            fbdev); | ||||
|     REGISTER_INDEV   (GDIGRAB,          gdigrab); | ||||
|     REGISTER_INDEV   (IEC61883,         iec61883); | ||||
|     REGISTER_INDEV   (JACK,             jack); | ||||
|     REGISTER_INDEV   (KMSGRAB,          kmsgrab); | ||||
|     REGISTER_INDEV   (LAVFI,            lavfi); | ||||
|     REGISTER_INDEV   (OPENAL,           openal); | ||||
|     REGISTER_OUTDEV  (OPENGL,           opengl); | ||||
|     REGISTER_INOUTDEV(OSS,              oss); | ||||
|     REGISTER_INOUTDEV(PULSE,            pulse); | ||||
|     REGISTER_OUTDEV  (SDL2,             sdl2); | ||||
|     REGISTER_INOUTDEV(SNDIO,            sndio); | ||||
|     REGISTER_INOUTDEV(V4L2,             v4l2); | ||||
|     REGISTER_INDEV   (VFWCAP,           vfwcap); | ||||
|     REGISTER_INDEV   (XCBGRAB,          xcbgrab); | ||||
|     REGISTER_OUTDEV  (XV,               xv); | ||||
|  | ||||
|     /* external libraries */ | ||||
|     REGISTER_INDEV   (LIBCDIO,          libcdio); | ||||
|     REGISTER_INDEV   (LIBDC1394,        libdc1394); | ||||
| } | ||||
|  | ||||
| void avdevice_register_all(void) | ||||
| { | ||||
|     ff_thread_once(&av_device_next_init, av_device_init_next); | ||||
|     static AVOnce control = AV_ONCE_INIT; | ||||
|  | ||||
|     ff_thread_once(&control, register_all); | ||||
| } | ||||
|  | ||||
| static void *device_next(void *prev, int output, | ||||
|                          AVClassCategory c1, AVClassCategory c2) | ||||
| { | ||||
|     const AVClass *pc; | ||||
|     AVClassCategory category = AV_CLASS_CATEGORY_NA; | ||||
|  | ||||
|     ff_thread_once(&av_device_next_init, av_device_init_next); | ||||
|  | ||||
|     do { | ||||
|         if (output) { | ||||
|             if (!(prev = prev ? ((AVOutputFormat *)prev)->next : (void*)outdev_list[0])) | ||||
|                 break; | ||||
|             pc = ((AVOutputFormat *)prev)->priv_class; | ||||
|         } else { | ||||
|             if (!(prev = prev ? ((AVInputFormat *)prev)->next : (void*)indev_list[0])) | ||||
|                 break; | ||||
|             pc = ((AVInputFormat *)prev)->priv_class; | ||||
|         } | ||||
|         if (!pc) | ||||
|             continue; | ||||
|         category = pc->category; | ||||
|     } while (category != c1 && category != c2); | ||||
|     return prev; | ||||
| } | ||||
|  | ||||
| AVInputFormat *av_input_audio_device_next(AVInputFormat  *d) | ||||
| { | ||||
|     return device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, | ||||
|                        AV_CLASS_CATEGORY_DEVICE_INPUT); | ||||
| } | ||||
|  | ||||
| AVInputFormat *av_input_video_device_next(AVInputFormat  *d) | ||||
| { | ||||
|     return device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, | ||||
|                        AV_CLASS_CATEGORY_DEVICE_INPUT); | ||||
| } | ||||
|  | ||||
| AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d) | ||||
| { | ||||
|     return device_next(d, 1, AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, | ||||
|                        AV_CLASS_CATEGORY_DEVICE_OUTPUT); | ||||
| } | ||||
|  | ||||
| AVOutputFormat *av_output_video_device_next(AVOutputFormat *d) | ||||
| { | ||||
|     return device_next(d, 1, AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT, | ||||
|                        AV_CLASS_CATEGORY_DEVICE_OUTPUT); | ||||
| } | ||||
| FF_DISABLE_DEPRECATION_WARNINGS | ||||
| #endif | ||||
|  | ||||
|   | ||||
| @@ -78,6 +78,52 @@ const char * avdevice_license(void) | ||||
|     return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1; | ||||
| } | ||||
|  | ||||
| static void *device_next(void *prev, int output, | ||||
|                          AVClassCategory c1, AVClassCategory c2) | ||||
| { | ||||
|     const AVClass *pc; | ||||
|     AVClassCategory category = AV_CLASS_CATEGORY_NA; | ||||
|     do { | ||||
|         if (output) { | ||||
|             if (!(prev = av_oformat_next(prev))) | ||||
|                 break; | ||||
|             pc = ((AVOutputFormat *)prev)->priv_class; | ||||
|         } else { | ||||
|             if (!(prev = av_iformat_next(prev))) | ||||
|                 break; | ||||
|             pc = ((AVInputFormat *)prev)->priv_class; | ||||
|         } | ||||
|         if (!pc) | ||||
|             continue; | ||||
|         category = pc->category; | ||||
|     } while (category != c1 && category != c2); | ||||
|     return prev; | ||||
| } | ||||
|  | ||||
| AVInputFormat *av_input_audio_device_next(AVInputFormat  *d) | ||||
| { | ||||
|     return device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, | ||||
|                        AV_CLASS_CATEGORY_DEVICE_INPUT); | ||||
| } | ||||
|  | ||||
| AVInputFormat *av_input_video_device_next(AVInputFormat  *d) | ||||
| { | ||||
|     return device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, | ||||
|                        AV_CLASS_CATEGORY_DEVICE_INPUT); | ||||
| } | ||||
|  | ||||
| AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d) | ||||
| { | ||||
|     return device_next(d, 1, AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, | ||||
|                        AV_CLASS_CATEGORY_DEVICE_OUTPUT); | ||||
| } | ||||
|  | ||||
| AVOutputFormat *av_output_video_device_next(AVOutputFormat *d) | ||||
| { | ||||
|     return device_next(d, 1, AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT, | ||||
|                        AV_CLASS_CATEGORY_DEVICE_OUTPUT); | ||||
| } | ||||
|  | ||||
| int avdevice_app_to_dev_control_message(struct AVFormatContext *s, enum AVAppToDevMessageType type, | ||||
|                                         void *data, size_t data_size) | ||||
| { | ||||
|   | ||||
| @@ -65,29 +65,6 @@ const char *avdevice_configuration(void); | ||||
|  */ | ||||
| const char *avdevice_license(void); | ||||
|  | ||||
| /** | ||||
|  * Iterate over all registered output devices. | ||||
|  * | ||||
|  * @param opaque a pointer where libavdevice will store the iteration state. Must | ||||
|  *               point to NULL to start the iteration. | ||||
|  * | ||||
|  * @return the next registered output device or NULL when the iteration is | ||||
|  *         finished | ||||
|  */ | ||||
| const AVOutputFormat *av_outdev_iterate(void **opaque); | ||||
|  | ||||
| /** | ||||
|  * Iterate over all registered input devices. | ||||
|  * | ||||
|  * @param opaque a pointer where libavdevice will store the iteration state. Must | ||||
|  *               point to NULL to start the iteration. | ||||
|  * | ||||
|  * @return the next registered input device or NULL when the iteration is | ||||
|  *         finished | ||||
|  */ | ||||
| const AVInputFormat *av_indev_iterate(void **opaque); | ||||
|  | ||||
| #if FF_API_NEXT | ||||
| /** | ||||
|  * Initialize libavdevice and register all the input and output devices. | ||||
|  */ | ||||
| @@ -100,7 +77,6 @@ void avdevice_register_all(void); | ||||
|  * if d is non-NULL, returns the next registered input audio/video device after d | ||||
|  * or NULL if d is the last one. | ||||
|  */ | ||||
| attribute_deprecated | ||||
| AVInputFormat *av_input_audio_device_next(AVInputFormat  *d); | ||||
|  | ||||
| /** | ||||
| @@ -110,7 +86,6 @@ AVInputFormat *av_input_audio_device_next(AVInputFormat  *d); | ||||
|  * if d is non-NULL, returns the next registered input audio/video device after d | ||||
|  * or NULL if d is the last one. | ||||
|  */ | ||||
| attribute_deprecated | ||||
| AVInputFormat *av_input_video_device_next(AVInputFormat  *d); | ||||
|  | ||||
| /** | ||||
| @@ -120,7 +95,6 @@ AVInputFormat *av_input_video_device_next(AVInputFormat  *d); | ||||
|  * if d is non-NULL, returns the next registered output audio/video device after d | ||||
|  * or NULL if d is the last one. | ||||
|  */ | ||||
| attribute_deprecated | ||||
| AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d); | ||||
|  | ||||
| /** | ||||
| @@ -130,9 +104,7 @@ AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d); | ||||
|  * if d is non-NULL, returns the next registered output audio/video device after d | ||||
|  * or NULL if d is the last one. | ||||
|  */ | ||||
| attribute_deprecated | ||||
| AVOutputFormat *av_output_video_device_next(AVOutputFormat *d); | ||||
| #endif | ||||
|  | ||||
| typedef struct AVDeviceRect { | ||||
|     int x;      /**< x coordinate of top left corner */ | ||||
|   | ||||
| @@ -47,8 +47,4 @@ | ||||
|  * the public API and may change, break or disappear at any time. | ||||
|  */ | ||||
|  | ||||
| #ifndef FF_API_NEXT | ||||
| #define FF_API_NEXT              (LIBAVDEVICE_VERSION_MAJOR < 59) | ||||
| #endif | ||||
|  | ||||
| #endif /* AVDEVICE_VERSION_H */ | ||||
|   | ||||
| @@ -25,9 +25,6 @@ | ||||
| #include "rdt.h" | ||||
| #include "url.h" | ||||
| #include "version.h" | ||||
| #if FF_API_NEXT | ||||
| #include "internal.h" | ||||
| #endif | ||||
|  | ||||
| /* (de)muxers */ | ||||
| extern AVOutputFormat ff_a64_muxer; | ||||
| @@ -491,7 +488,6 @@ const AVOutputFormat *av_muxer_iterate(void **opaque) | ||||
| { | ||||
|     uintptr_t i = (uintptr_t)*opaque; | ||||
|     const AVOutputFormat *f = muxer_list[i]; | ||||
|  | ||||
|     if (f) | ||||
|         *opaque = (void*)(i + 1); | ||||
|     return f; | ||||
| @@ -510,9 +506,6 @@ const AVInputFormat *av_demuxer_iterate(void **opaque){ | ||||
| FF_DISABLE_DEPRECATION_WARNINGS | ||||
| static AVOnce av_format_next_init = AV_ONCE_INIT; | ||||
|  | ||||
| static const AVInputFormat * const *indev_list = NULL; | ||||
| static const AVOutputFormat * const *outdev_list = NULL; | ||||
|  | ||||
| static void av_format_init_next(void) | ||||
| { | ||||
|     AVOutputFormat *prevout = NULL, *out; | ||||
| @@ -525,61 +518,30 @@ static void av_format_init_next(void) | ||||
|         prevout = out; | ||||
|     } | ||||
|  | ||||
|     if (outdev_list) { | ||||
|         for (int j = 0; (out = (AVOutputFormat*)outdev_list[j]); j++) { | ||||
|             if (prevout) | ||||
|                 prevout->next = out; | ||||
|             prevout = out; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     i = 0; | ||||
|     while ((in = (AVInputFormat*)av_demuxer_iterate(&i))) { | ||||
|         if (previn) | ||||
|             previn->next = in; | ||||
|         previn = in; | ||||
|     } | ||||
|  | ||||
|     if (indev_list) { | ||||
|         for (int j = 0; (in = (AVInputFormat*)indev_list[j]); j++) { | ||||
|             if (previn) | ||||
|                 previn->next = in; | ||||
|             previn = in; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| void avpriv_register_devices(const AVOutputFormat * const o[], const AVInputFormat * const i[]) | ||||
| { | ||||
|     static AVMutex avpriv_register_devices_mutex = AV_MUTEX_INITIALIZER; | ||||
|     ff_mutex_lock(&avpriv_register_devices_mutex); | ||||
|     outdev_list = o; | ||||
|     indev_list = i; | ||||
|     av_format_init_next(); | ||||
|     ff_mutex_unlock(&avpriv_register_devices_mutex); | ||||
| } | ||||
|  | ||||
| AVInputFormat *av_iformat_next(const AVInputFormat *f) | ||||
| { | ||||
|     ff_thread_once(&av_format_next_init, av_format_init_next); | ||||
|  | ||||
|     if (f) | ||||
|         return f->next; | ||||
|     else | ||||
|     /* If there are no demuxers but input devices, then return the first input device. | ||||
|      * This will still return null if both there are both no demuxers or input devices. */ | ||||
|         return demuxer_list[0] ? (AVInputFormat*)demuxer_list[0] : (indev_list ? (AVInputFormat*)indev_list[0] : NULL); | ||||
|         return demuxer_list[0]; | ||||
| } | ||||
|  | ||||
| AVOutputFormat *av_oformat_next(const AVOutputFormat *f) | ||||
| { | ||||
|     ff_thread_once(&av_format_next_init, av_format_init_next); | ||||
|  | ||||
|     if (f) | ||||
|         return f->next; | ||||
|     else | ||||
|         return muxer_list[0] ? (AVOutputFormat*)muxer_list[0] : (outdev_list ? (AVOutputFormat*)outdev_list[0] : NULL); | ||||
|         return muxer_list[0]; | ||||
| } | ||||
|  | ||||
| void av_register_all(void) | ||||
|   | ||||
| @@ -129,18 +129,10 @@ enum AVCodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, | ||||
| AVInputFormat *av_find_input_format(const char *short_name) | ||||
| { | ||||
|     AVInputFormat *fmt = NULL; | ||||
| #if FF_API_NEXT | ||||
| FF_DISABLE_DEPRECATION_WARNINGS | ||||
|     while ((fmt = av_iformat_next(fmt))) | ||||
|         if (av_match_name(short_name, fmt->name)) | ||||
|             return fmt; | ||||
| FF_ENABLE_DEPRECATION_WARNINGS | ||||
| #else | ||||
|     void *i = 0; | ||||
|     while ((fmt = av_demuxer_iterate(&i))) | ||||
|         if (av_match_name(short_name, fmt->name)) | ||||
|             return fmt; | ||||
| #endif | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -731,11 +731,4 @@ int ff_unlock_avformat(void); | ||||
|  */ | ||||
| void ff_format_set_url(AVFormatContext *s, char *url); | ||||
|  | ||||
| #if FF_API_NEXT | ||||
| /** | ||||
|   * Register devices in deprecated format linked list. | ||||
|   */ | ||||
| void avpriv_register_devices(const AVOutputFormat * const o[], const AVInputFormat * const i[]); | ||||
| #endif | ||||
|  | ||||
| #endif /* AVFORMAT_INTERNAL_H */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user