History

Revert "lavd: add new API for iterating input and output devices"

This reverts commit 0fd475704e871ef3a535947596a012894bae3cbd. Revert "lavd: fix iterating of input and output devices" This reverts commit ce1d77a5e7cebce11074bf6f9e38ad6da37338ff.

Josh de Kock committed 8 years ago

Commit d8ae4061 parent 8f1382f11 files · +103 −244Browse files

Unified · Split

11 files
  1. Makefile +1 −2
  2. configure +11 −12
  3. doc/APIchanges +0 −5
  4. libavdevice/.gitignore +0 −2
  5. libavdevice/alldevices.c +43 −136
  6. libavdevice/avdevice.c +46 −0
  7. libavdevice/avdevice.h +0 −28
  8. libavdevice/version.h +0 −4
  9. libavformat/allformats.c +2 −40
  10. libavformat/format.c +0 −8
  11. libavformat/internal.h +0 −7
Makefile+1−2
@@ -144,8 +144,7 @@ distclean:: clean · 143 unmodified lines
144 version.h libavutil/ffversion.h libavcodec/codec_names.h \144 version.h libavutil/ffversion.h libavcodec/codec_names.h \
145 libavcodec/bsf_list.c libavformat/protocol_list.c \145 libavcodec/bsf_list.c libavformat/protocol_list.c \
146 libavcodec/codec_list.c libavcodec/parser_list.c \146 libavcodec/codec_list.c libavcodec/parser_list.c \
147 libavformat/muxer_list.c libavformat/demuxer_list.c \147 libavformat/muxer_list.c libavformat/demuxer_list.c
148 libavdevice/indev_list.c libavdevice/outdev_list.c
149ifeq ($(SRC_LINK),src)148ifeq ($(SRC_LINK),src)
150 $(RM) src149 $(RM) src
151endif150endif
configure+11−12
@@ -3622,12 +3622,21 @@ for v in "$@"; do · 3621 unmodified lines
3622 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"3622 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
3623done3623done
3624 3624
3625find_things(){
3626 thing=$1
3627 pattern=$2
3628 file=$source_path/$3
3629 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
3630}
3631
3632OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
3633INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
3634
3625find_things_extern(){3635find_things_extern(){
3626 thing=$13636 thing=$1
3627 pattern=$23637 pattern=$2
3628 file=$source_path/$33638 file=$source_path/$3
3629 out=${4:-$thing}3639 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
3630 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$out/p" "$file"
3631}3640}
3632 3641
3633find_filters_extern(){3642find_filters_extern(){
@@ -3637,8 +3646,6 @@ find_filters_extern(){ · 3 unmodified lines
3637}3646}
3638 3647
3639FILTER_LIST=$(find_filters_extern libavfilter/allfilters.c)3648FILTER_LIST=$(find_filters_extern libavfilter/allfilters.c)
3640OUTDEV_LIST=$(find_things_extern muxer AVOutputFormat libavdevice/alldevices.c outdev)
3641INDEV_LIST=$(find_things_extern demuxer AVInputFormat libavdevice/alldevices.c indev)
3642MUXER_LIST=$(find_things_extern muxer AVOutputFormat libavformat/allformats.c)3649MUXER_LIST=$(find_things_extern muxer AVOutputFormat libavformat/allformats.c)
3643DEMUXER_LIST=$(find_things_extern demuxer AVInputFormat libavformat/allformats.c)3650DEMUXER_LIST=$(find_things_extern demuxer AVInputFormat libavformat/allformats.c)
3644ENCODER_LIST=$(find_things_extern encoder AVCodec libavcodec/allcodecs.c)3651ENCODER_LIST=$(find_things_extern encoder AVCodec libavcodec/allcodecs.c)
@@ -7172,12 +7179,6 @@ print_enabled_components(){ · 3527 unmodified lines
7172 filter_list)7179 filter_list)
7173 c=$(full_filter_name $(remove_suffix _filter $c))7180 c=$(full_filter_name $(remove_suffix _filter $c))
7174 ;;7181 ;;
7175 indev_list)
7176 c=$(add_suffix _demuxer $(remove_suffix _indev $c))
7177 ;;
7178 outdev_list)
7179 c=$(add_suffix _muxer $(remove_suffix _outdev $c))
7180 ;;
7181 esac7182 esac
7182 printf " &ff_%s,\n" $c >> $TMPH7183 printf " &ff_%s,\n" $c >> $TMPH
7183 fi7184 fi
@@ -7195,8 +7196,6 @@ print_enabled_components libavfilter/filter_list.c AVFilter filter_list $FILTER_ · 11 unmodified lines
7195print_enabled_components libavcodec/codec_list.c AVCodec codec_list $CODEC_LIST7196print_enabled_components libavcodec/codec_list.c AVCodec codec_list $CODEC_LIST
7196print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list $PARSER_LIST7197print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list $PARSER_LIST
7197print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST7198print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST
7198print_enabled_components libavdevice/indev_list.c AVInputFormat indev_list $INDEV_LIST
7199print_enabled_components libavdevice/outdev_list.c AVOutputFormat outdev_list $OUTDEV_LIST
7200print_enabled_components libavformat/demuxer_list.c AVInputFormat demuxer_list $DEMUXER_LIST7199print_enabled_components libavformat/demuxer_list.c AVInputFormat demuxer_list $DEMUXER_LIST
7201print_enabled_components libavformat/muxer_list.c AVOutputFormat muxer_list $MUXER_LIST7200print_enabled_components libavformat/muxer_list.c AVOutputFormat muxer_list $MUXER_LIST
7202print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST7201print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
doc/APIchanges+0−5
@@ -56,11 +56,6 @@ API changes, most recent first: · 55 unmodified lines
562018-02-xx - xxxxxxx - lavc 58.11.100 - avcodec.h562018-02-xx - xxxxxxx - lavc 58.11.100 - avcodec.h
57 Add AVCodecContext.extra_hw_frames.57 Add AVCodecContext.extra_hw_frames.
58 58
592018-02-06 - 0fd475704e - lavd 58.1.100 - avdevice.h
60 Deprecate use of av_input_audio_device_next(), av_input_video_device_next(),
61 av_output_audio_device_next(), av_output_video_device_next().
62 Add av_indev_iterate(), and av_outdev_iterate().
63
642018-xx-xx - xxxxxxx - lavf 58.9.100 - avformat.h592018-xx-xx - xxxxxxx - lavf 58.9.100 - avformat.h
65 Deprecate use of av_register_input_format(), av_register_output_format(),60 Deprecate use of av_register_input_format(), av_register_output_format(),
66 av_register_all(), av_iformat_next(), av_oformat_next().61 av_register_all(), av_iformat_next(), av_oformat_next().
libavdevice/.gitignore+0−2
@@ -1,2 +0,0 @@
1/indev_list.c
2/outdev_list.c
libavdevice/alldevices.c+43−136
@@ -22,150 +22,57 @@ · 21 unmodified lines
22#include "libavutil/thread.h"22#include "libavutil/thread.h"
23#include "avdevice.h"23#include "avdevice.h"
24 24
25#if FF_API_NEXT25#define REGISTER_OUTDEV(X, x) \
26#include "libavformat/internal.h"26 { \
27#endif27 extern AVOutputFormat ff_##x##_muxer; \
28 28 if (CONFIG_##X##_OUTDEV) \
29/* devices */29 av_register_output_format(&ff_##x##_muxer); \
30extern AVInputFormat ff_alsa_demuxer;
31extern AVOutputFormat ff_alsa_muxer;
32extern AVInputFormat ff_android_camera_demuxer;
33extern AVInputFormat ff_avfoundation_demuxer;
34extern AVInputFormat ff_bktr_demuxer;
35extern AVOutputFormat ff_caca_muxer;
36extern AVInputFormat ff_decklink_demuxer;
37extern AVOutputFormat ff_decklink_muxer;
38extern AVInputFormat ff_libndi_newtek_demuxer;
39extern AVOutputFormat ff_libndi_newtek_muxer;
40extern AVInputFormat ff_dshow_demuxer;
41extern AVInputFormat ff_fbdev_demuxer;
42extern AVOutputFormat ff_fbdev_muxer;
43extern AVInputFormat ff_gdigrab_demuxer;
44extern AVInputFormat ff_iec61883_demuxer;
45extern AVInputFormat ff_jack_demuxer;
46extern AVInputFormat ff_kmsgrab_demuxer;
47extern AVInputFormat ff_lavfi_demuxer;
48extern AVInputFormat ff_openal_demuxer;
49extern AVOutputFormat ff_opengl_muxer;
50extern AVInputFormat ff_oss_demuxer;
51extern AVOutputFormat ff_oss_muxer;
52extern AVInputFormat ff_pulse_demuxer;
53extern AVOutputFormat ff_pulse_muxer;
54extern AVOutputFormat ff_sdl2_muxer;
55extern AVInputFormat ff_sndio_demuxer;
56extern AVOutputFormat ff_sndio_muxer;
57extern AVInputFormat ff_v4l2_demuxer;
58extern AVOutputFormat ff_v4l2_muxer;
59extern AVInputFormat ff_vfwcap_demuxer;
60extern AVInputFormat ff_xcbgrab_demuxer;
61extern AVOutputFormat ff_xv_muxer;
62
63/* external libraries */
64extern AVInputFormat ff_libcdio_demuxer;
65extern AVInputFormat ff_libdc1394_demuxer;
66
67#include "libavdevice/outdev_list.c"
68#include "libavdevice/indev_list.c"
69
70const AVOutputFormat *av_outdev_iterate(void **opaque)
71{
72 uintptr_t i = (uintptr_t)*opaque;
73 const AVOutputFormat *f = outdev_list[i];
74
75 if (f)
76 *opaque = (void*)(i + 1);
77 return f;
78}
79
80const AVInputFormat *av_indev_iterate(void **opaque)
81{
82 uintptr_t i = (uintptr_t)*opaque;
83 const AVInputFormat *f = indev_list[i];
84
85 if (f)
86 *opaque = (void*)(i + 1);
87 return f;
88}
89
90#if FF_API_NEXT
91FF_DISABLE_DEPRECATION_WARNINGS
92static AVOnce av_device_next_init = AV_ONCE_INIT;
93
94static void av_device_init_next(void)
95{
96 AVOutputFormat *prevout = NULL, *out;
97 AVInputFormat *previn = NULL, *in;
98 void *i = 0;
99
100 while ((out = (AVOutputFormat*)av_outdev_iterate(&i))) {
101 if (prevout)
102 prevout->next = out;
103 prevout = out;
104 }30 }
105 31
106 i = 0;32#define REGISTER_INDEV(X, x) \
107 while ((in = (AVInputFormat*)av_indev_iterate(&i))) {33 { \
108 if (previn)34 extern AVInputFormat ff_##x##_demuxer; \
109 previn->next = in;35 if (CONFIG_##X##_INDEV) \
110 previn = in;36 av_register_input_format(&ff_##x##_demuxer); \
111 }37 }
112 38
113 avpriv_register_devices(outdev_list, indev_list);39#define REGISTER_INOUTDEV(X, x) REGISTER_OUTDEV(X, x); REGISTER_INDEV(X, x)
114}
115
116void avdevice_register_all(void)
117{
118 ff_thread_once(&av_device_next_init, av_device_init_next);
119}
120
121static void *device_next(void *prev, int output,
122 AVClassCategory c1, AVClassCategory c2)
123{
124 const AVClass *pc;
125 AVClassCategory category = AV_CLASS_CATEGORY_NA;
126
127 ff_thread_once(&av_device_next_init, av_device_init_next);
128
129 do {
130 if (output) {
131 if (!(prev = prev ? ((AVOutputFormat *)prev)->next : (void*)outdev_list[0]))
132 break;
133 pc = ((AVOutputFormat *)prev)->priv_class;
134 } else {
135 if (!(prev = prev ? ((AVInputFormat *)prev)->next : (void*)indev_list[0]))
136 break;
137 pc = ((AVInputFormat *)prev)->priv_class;
138 }
139 if (!pc)
140 continue;
141 category = pc->category;
142 } while (category != c1 && category != c2);
143 return prev;
144}
145
146AVInputFormat *av_input_audio_device_next(AVInputFormat *d)
147{
148 return device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT,
149 AV_CLASS_CATEGORY_DEVICE_INPUT);
150}
151 40
152AVInputFormat *av_input_video_device_next(AVInputFormat *d)41static void register_all(void)
153{42{
154 return device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT,43 /* devices */
155 AV_CLASS_CATEGORY_DEVICE_INPUT);44 REGISTER_INOUTDEV(ALSA, alsa);
45 REGISTER_INDEV (AVFOUNDATION, avfoundation);
46 REGISTER_INDEV (BKTR, bktr);
47 REGISTER_OUTDEV (CACA, caca);
48 REGISTER_INOUTDEV(DECKLINK, decklink);
49 REGISTER_INOUTDEV(LIBNDI_NEWTEK, libndi_newtek);
50 REGISTER_INDEV (DSHOW, dshow);
51 REGISTER_INOUTDEV(FBDEV, fbdev);
52 REGISTER_INDEV (GDIGRAB, gdigrab);
53 REGISTER_INDEV (IEC61883, iec61883);
54 REGISTER_INDEV (JACK, jack);
55 REGISTER_INDEV (KMSGRAB, kmsgrab);
56 REGISTER_INDEV (LAVFI, lavfi);
57 REGISTER_INDEV (OPENAL, openal);
58 REGISTER_OUTDEV (OPENGL, opengl);
59 REGISTER_INOUTDEV(OSS, oss);
60 REGISTER_INOUTDEV(PULSE, pulse);
61 REGISTER_OUTDEV (SDL2, sdl2);
62 REGISTER_INOUTDEV(SNDIO, sndio);
63 REGISTER_INOUTDEV(V4L2, v4l2);
64 REGISTER_INDEV (VFWCAP, vfwcap);
65 REGISTER_INDEV (XCBGRAB, xcbgrab);
66 REGISTER_OUTDEV (XV, xv);
67
68 /* external libraries */
69 REGISTER_INDEV (LIBCDIO, libcdio);
70 REGISTER_INDEV (LIBDC1394, libdc1394);
156}71}
157 72
158AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d)73void avdevice_register_all(void)
159{74{
160 return device_next(d, 1, AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT,75 static AVOnce control = AV_ONCE_INIT;
161 AV_CLASS_CATEGORY_DEVICE_OUTPUT);
162}
163 76
164AVOutputFormat *av_output_video_device_next(AVOutputFormat *d)77 ff_thread_once(&control, register_all);
165{
166 return device_next(d, 1, AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT,
167 AV_CLASS_CATEGORY_DEVICE_OUTPUT);
168}78}
169FF_DISABLE_DEPRECATION_WARNINGS
170#endif
171
libavdevice/avdevice.c+46−0
@@ -78,6 +78,52 @@ const char * avdevice_license(void) · 77 unmodified lines
78 return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;78 return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
79}79}
80 80
81static void *device_next(void *prev, int output,
82 AVClassCategory c1, AVClassCategory c2)
83{
84 const AVClass *pc;
85 AVClassCategory category = AV_CLASS_CATEGORY_NA;
86 do {
87 if (output) {
88 if (!(prev = av_oformat_next(prev)))
89 break;
90 pc = ((AVOutputFormat *)prev)->priv_class;
91 } else {
92 if (!(prev = av_iformat_next(prev)))
93 break;
94 pc = ((AVInputFormat *)prev)->priv_class;
95 }
96 if (!pc)
97 continue;
98 category = pc->category;
99 } while (category != c1 && category != c2);
100 return prev;
101}
102
103AVInputFormat *av_input_audio_device_next(AVInputFormat *d)
104{
105 return device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT,
106 AV_CLASS_CATEGORY_DEVICE_INPUT);
107}
108
109AVInputFormat *av_input_video_device_next(AVInputFormat *d)
110{
111 return device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT,
112 AV_CLASS_CATEGORY_DEVICE_INPUT);
113}
114
115AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d)
116{
117 return device_next(d, 1, AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT,
118 AV_CLASS_CATEGORY_DEVICE_OUTPUT);
119}
120
121AVOutputFormat *av_output_video_device_next(AVOutputFormat *d)
122{
123 return device_next(d, 1, AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT,
124 AV_CLASS_CATEGORY_DEVICE_OUTPUT);
125}
126
81int avdevice_app_to_dev_control_message(struct AVFormatContext *s, enum AVAppToDevMessageType type,127int avdevice_app_to_dev_control_message(struct AVFormatContext *s, enum AVAppToDevMessageType type,
82 void *data, size_t data_size)128 void *data, size_t data_size)
83{129{
libavdevice/avdevice.h+0−28
@@ -65,29 +65,6 @@ const char *avdevice_configuration(void); · 64 unmodified lines
65 */65 */
66const char *avdevice_license(void);66const char *avdevice_license(void);
67 67
68/**
69 * Iterate over all registered output devices.
70 *
71 * @param opaque a pointer where libavdevice will store the iteration state. Must
72 * point to NULL to start the iteration.
73 *
74 * @return the next registered output device or NULL when the iteration is
75 * finished
76 */
77const AVOutputFormat *av_outdev_iterate(void **opaque);
78
79/**
80 * Iterate over all registered input devices.
81 *
82 * @param opaque a pointer where libavdevice will store the iteration state. Must
83 * point to NULL to start the iteration.
84 *
85 * @return the next registered input device or NULL when the iteration is
86 * finished
87 */
88const AVInputFormat *av_indev_iterate(void **opaque);
89
90#if FF_API_NEXT
91/**68/**
92 * Initialize libavdevice and register all the input and output devices.69 * Initialize libavdevice and register all the input and output devices.
93 */70 */
@@ -100,7 +77,6 @@ void avdevice_register_all(void); · 6 unmodified lines
100 * if d is non-NULL, returns the next registered input audio/video device after d77 * if d is non-NULL, returns the next registered input audio/video device after d
101 * or NULL if d is the last one.78 * or NULL if d is the last one.
102 */79 */
103attribute_deprecated
104AVInputFormat *av_input_audio_device_next(AVInputFormat *d);80AVInputFormat *av_input_audio_device_next(AVInputFormat *d);
105 81
106/**82/**
@@ -110,7 +86,6 @@ AVInputFormat *av_input_audio_device_next(AVInputFormat *d); · 3 unmodified lines
110 * if d is non-NULL, returns the next registered input audio/video device after d86 * if d is non-NULL, returns the next registered input audio/video device after d
111 * or NULL if d is the last one.87 * or NULL if d is the last one.
112 */88 */
113attribute_deprecated
114AVInputFormat *av_input_video_device_next(AVInputFormat *d);89AVInputFormat *av_input_video_device_next(AVInputFormat *d);
115 90
116/**91/**
@@ -120,7 +95,6 @@ AVInputFormat *av_input_video_device_next(AVInputFormat *d); · 3 unmodified lines
120 * if d is non-NULL, returns the next registered output audio/video device after d95 * if d is non-NULL, returns the next registered output audio/video device after d
121 * or NULL if d is the last one.96 * or NULL if d is the last one.
122 */97 */
123attribute_deprecated
124AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d);98AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d);
125 99
126/**100/**
@@ -130,9 +104,7 @@ AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d); · 3 unmodified lines
130 * if d is non-NULL, returns the next registered output audio/video device after d104 * if d is non-NULL, returns the next registered output audio/video device after d
131 * or NULL if d is the last one.105 * or NULL if d is the last one.
132 */106 */
133attribute_deprecated
134AVOutputFormat *av_output_video_device_next(AVOutputFormat *d);107AVOutputFormat *av_output_video_device_next(AVOutputFormat *d);
135#endif
136 108
137typedef struct AVDeviceRect {109typedef struct AVDeviceRect {
138 int x; /**< x coordinate of top left corner */110 int x; /**< x coordinate of top left corner */
libavdevice/version.h+0−4
@@ -47,8 +47,4 @@ · 46 unmodified lines
47 * the public API and may change, break or disappear at any time.47 * the public API and may change, break or disappear at any time.
48 */48 */
49 49
50#ifndef FF_API_NEXT
51#define FF_API_NEXT (LIBAVDEVICE_VERSION_MAJOR < 59)
52#endif
53
54#endif /* AVDEVICE_VERSION_H */50#endif /* AVDEVICE_VERSION_H */
libavformat/allformats.c+2−40
@@ -25,9 +25,6 @@ · 24 unmodified lines
25#include "rdt.h"25#include "rdt.h"
26#include "url.h"26#include "url.h"
27#include "version.h"27#include "version.h"
28#if FF_API_NEXT
29#include "internal.h"
30#endif
31 28
32/* (de)muxers */29/* (de)muxers */
33extern AVOutputFormat ff_a64_muxer;30extern AVOutputFormat ff_a64_muxer;
@@ -491,7 +488,6 @@ const AVOutputFormat *av_muxer_iterate(void **opaque) · 457 unmodified lines
491{488{
492 uintptr_t i = (uintptr_t)*opaque;489 uintptr_t i = (uintptr_t)*opaque;
493 const AVOutputFormat *f = muxer_list[i];490 const AVOutputFormat *f = muxer_list[i];
494
495 if (f)491 if (f)
496 *opaque = (void*)(i + 1);492 *opaque = (void*)(i + 1);
497 return f;493 return f;
@@ -510,9 +506,6 @@ const AVInputFormat *av_demuxer_iterate(void **opaque){ · 12 unmodified lines
510FF_DISABLE_DEPRECATION_WARNINGS506FF_DISABLE_DEPRECATION_WARNINGS
511static AVOnce av_format_next_init = AV_ONCE_INIT;507static AVOnce av_format_next_init = AV_ONCE_INIT;
512 508
513static const AVInputFormat * const *indev_list = NULL;
514static const AVOutputFormat * const *outdev_list = NULL;
515
516static void av_format_init_next(void)509static void av_format_init_next(void)
517{510{
518 AVOutputFormat *prevout = NULL, *out;511 AVOutputFormat *prevout = NULL, *out;
@@ -525,61 +518,30 @@ static void av_format_init_next(void) · 6 unmodified lines
525 prevout = out;518 prevout = out;
526 }519 }
527 520
528 if (outdev_list) {
529 for (int j = 0; (out = (AVOutputFormat*)outdev_list[j]); j++) {
530 if (prevout)
531 prevout->next = out;
532 prevout = out;
533 }
534 }
535
536 i = 0;521 i = 0;
537 while ((in = (AVInputFormat*)av_demuxer_iterate(&i))) {522 while ((in = (AVInputFormat*)av_demuxer_iterate(&i))) {
538 if (previn)523 if (previn)
539 previn->next = in;524 previn->next = in;
540 previn = in;525 previn = in;
541 }526 }
542
543 if (indev_list) {
544 for (int j = 0; (in = (AVInputFormat*)indev_list[j]); j++) {
545 if (previn)
546 previn->next = in;
547 previn = in;
548 }
549 }
550
551}
552
553void avpriv_register_devices(const AVOutputFormat * const o[], const AVInputFormat * const i[])
554{
555 static AVMutex avpriv_register_devices_mutex = AV_MUTEX_INITIALIZER;
556 ff_mutex_lock(&avpriv_register_devices_mutex);
557 outdev_list = o;
558 indev_list = i;
559 av_format_init_next();
560 ff_mutex_unlock(&avpriv_register_devices_mutex);
561}527}
562 528
563AVInputFormat *av_iformat_next(const AVInputFormat *f)529AVInputFormat *av_iformat_next(const AVInputFormat *f)
564{530{
565 ff_thread_once(&av_format_next_init, av_format_init_next);531 ff_thread_once(&av_format_next_init, av_format_init_next);
566
567 if (f)532 if (f)
568 return f->next;533 return f->next;
569 else534 else
570 /* If there are no demuxers but input devices, then return the first input device.535 return demuxer_list[0];
571 * This will still return null if both there are both no demuxers or input devices. */
572 return demuxer_list[0] ? (AVInputFormat*)demuxer_list[0] : (indev_list ? (AVInputFormat*)indev_list[0] : NULL);
573}536}
574 537
575AVOutputFormat *av_oformat_next(const AVOutputFormat *f)538AVOutputFormat *av_oformat_next(const AVOutputFormat *f)
576{539{
577 ff_thread_once(&av_format_next_init, av_format_init_next);540 ff_thread_once(&av_format_next_init, av_format_init_next);
578
579 if (f)541 if (f)
580 return f->next;542 return f->next;
581 else543 else
582 return muxer_list[0] ? (AVOutputFormat*)muxer_list[0] : (outdev_list ? (AVOutputFormat*)outdev_list[0] : NULL);544 return muxer_list[0];
583}545}
584 546
585void av_register_all(void)547void av_register_all(void)
libavformat/format.c+0−8
@@ -129,18 +129,10 @@ enum AVCodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, · 128 unmodified lines
129AVInputFormat *av_find_input_format(const char *short_name)129AVInputFormat *av_find_input_format(const char *short_name)
130{130{
131 AVInputFormat *fmt = NULL;131 AVInputFormat *fmt = NULL;
132#if FF_API_NEXT
133FF_DISABLE_DEPRECATION_WARNINGS
134 while ((fmt = av_iformat_next(fmt)))
135 if (av_match_name(short_name, fmt->name))
136 return fmt;
137FF_ENABLE_DEPRECATION_WARNINGS
138#else
139 void *i = 0;132 void *i = 0;
140 while ((fmt = av_demuxer_iterate(&i)))133 while ((fmt = av_demuxer_iterate(&i)))
141 if (av_match_name(short_name, fmt->name))134 if (av_match_name(short_name, fmt->name))
142 return fmt;135 return fmt;
143#endif
144 return NULL;136 return NULL;
145}137}
146 138
libavformat/internal.h+0−7
@@ -731,11 +731,4 @@ int ff_unlock_avformat(void); · 730 unmodified lines
731 */731 */
732void ff_format_set_url(AVFormatContext *s, char *url);732void ff_format_set_url(AVFormatContext *s, char *url);
733 733
734#if FF_API_NEXT
735/**
736 * Register devices in deprecated format linked list.
737 */
738void avpriv_register_devices(const AVOutputFormat * const o[], const AVInputFormat * const i[]);
739#endif
740
741#endif /* AVFORMAT_INTERNAL_H */734#endif /* AVFORMAT_INTERNAL_H */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t