1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Register all the grabbing devices. 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * This file is part of FFmpeg. 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14cabdff1aSopenharmony_ci * Lesser General Public License for more details. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19cabdff1aSopenharmony_ci */ 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci#include "libavformat/internal.h" 22cabdff1aSopenharmony_ci#include "avdevice.h" 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_ci/* devices */ 25cabdff1aSopenharmony_ciextern const AVInputFormat ff_alsa_demuxer; 26cabdff1aSopenharmony_ciextern const AVOutputFormat ff_alsa_muxer; 27cabdff1aSopenharmony_ciextern const AVInputFormat ff_android_camera_demuxer; 28cabdff1aSopenharmony_ciextern const AVOutputFormat ff_audiotoolbox_muxer; 29cabdff1aSopenharmony_ciextern const AVInputFormat ff_avfoundation_demuxer; 30cabdff1aSopenharmony_ciextern const AVInputFormat ff_bktr_demuxer; 31cabdff1aSopenharmony_ciextern const AVOutputFormat ff_caca_muxer; 32cabdff1aSopenharmony_ciextern const AVInputFormat ff_decklink_demuxer; 33cabdff1aSopenharmony_ciextern const AVOutputFormat ff_decklink_muxer; 34cabdff1aSopenharmony_ciextern const AVInputFormat ff_dshow_demuxer; 35cabdff1aSopenharmony_ciextern const AVInputFormat ff_fbdev_demuxer; 36cabdff1aSopenharmony_ciextern const AVOutputFormat ff_fbdev_muxer; 37cabdff1aSopenharmony_ciextern const AVInputFormat ff_gdigrab_demuxer; 38cabdff1aSopenharmony_ciextern const AVInputFormat ff_iec61883_demuxer; 39cabdff1aSopenharmony_ciextern const AVInputFormat ff_jack_demuxer; 40cabdff1aSopenharmony_ciextern const AVInputFormat ff_kmsgrab_demuxer; 41cabdff1aSopenharmony_ciextern const AVInputFormat ff_lavfi_demuxer; 42cabdff1aSopenharmony_ciextern const AVInputFormat ff_openal_demuxer; 43cabdff1aSopenharmony_ciextern const AVOutputFormat ff_opengl_muxer; 44cabdff1aSopenharmony_ciextern const AVInputFormat ff_oss_demuxer; 45cabdff1aSopenharmony_ciextern const AVOutputFormat ff_oss_muxer; 46cabdff1aSopenharmony_ciextern const AVInputFormat ff_pulse_demuxer; 47cabdff1aSopenharmony_ciextern const AVOutputFormat ff_pulse_muxer; 48cabdff1aSopenharmony_ciextern const AVOutputFormat ff_sdl2_muxer; 49cabdff1aSopenharmony_ciextern const AVInputFormat ff_sndio_demuxer; 50cabdff1aSopenharmony_ciextern const AVOutputFormat ff_sndio_muxer; 51cabdff1aSopenharmony_ciextern const AVInputFormat ff_v4l2_demuxer; 52cabdff1aSopenharmony_ciextern const AVOutputFormat ff_v4l2_muxer; 53cabdff1aSopenharmony_ciextern const AVInputFormat ff_vfwcap_demuxer; 54cabdff1aSopenharmony_ciextern const AVInputFormat ff_xcbgrab_demuxer; 55cabdff1aSopenharmony_ciextern const AVOutputFormat ff_xv_muxer; 56cabdff1aSopenharmony_ci 57cabdff1aSopenharmony_ci/* external libraries */ 58cabdff1aSopenharmony_ciextern const AVInputFormat ff_libcdio_demuxer; 59cabdff1aSopenharmony_ciextern const AVInputFormat ff_libdc1394_demuxer; 60cabdff1aSopenharmony_ci 61cabdff1aSopenharmony_ci#include "libavdevice/outdev_list.c" 62cabdff1aSopenharmony_ci#include "libavdevice/indev_list.c" 63cabdff1aSopenharmony_ci 64cabdff1aSopenharmony_civoid avdevice_register_all(void) 65cabdff1aSopenharmony_ci{ 66cabdff1aSopenharmony_ci avpriv_register_devices(outdev_list, indev_list); 67cabdff1aSopenharmony_ci} 68cabdff1aSopenharmony_ci 69cabdff1aSopenharmony_cistatic const void *next_input(const AVInputFormat *prev, AVClassCategory c2) 70cabdff1aSopenharmony_ci{ 71cabdff1aSopenharmony_ci const AVClass *pc; 72cabdff1aSopenharmony_ci const AVClassCategory c1 = AV_CLASS_CATEGORY_DEVICE_INPUT; 73cabdff1aSopenharmony_ci AVClassCategory category = AV_CLASS_CATEGORY_NA; 74cabdff1aSopenharmony_ci const AVInputFormat *fmt = NULL; 75cabdff1aSopenharmony_ci int i = 0; 76cabdff1aSopenharmony_ci 77cabdff1aSopenharmony_ci while (prev && (fmt = indev_list[i])) { 78cabdff1aSopenharmony_ci i++; 79cabdff1aSopenharmony_ci if (prev == fmt) 80cabdff1aSopenharmony_ci break; 81cabdff1aSopenharmony_ci } 82cabdff1aSopenharmony_ci 83cabdff1aSopenharmony_ci do { 84cabdff1aSopenharmony_ci fmt = indev_list[i++]; 85cabdff1aSopenharmony_ci if (!fmt) 86cabdff1aSopenharmony_ci break; 87cabdff1aSopenharmony_ci pc = fmt->priv_class; 88cabdff1aSopenharmony_ci if (!pc) 89cabdff1aSopenharmony_ci continue; 90cabdff1aSopenharmony_ci category = pc->category; 91cabdff1aSopenharmony_ci } while (category != c1 && category != c2); 92cabdff1aSopenharmony_ci return fmt; 93cabdff1aSopenharmony_ci} 94cabdff1aSopenharmony_ci 95cabdff1aSopenharmony_cistatic const void *next_output(const AVOutputFormat *prev, AVClassCategory c2) 96cabdff1aSopenharmony_ci{ 97cabdff1aSopenharmony_ci const AVClass *pc; 98cabdff1aSopenharmony_ci const AVClassCategory c1 = AV_CLASS_CATEGORY_DEVICE_OUTPUT; 99cabdff1aSopenharmony_ci AVClassCategory category = AV_CLASS_CATEGORY_NA; 100cabdff1aSopenharmony_ci const AVOutputFormat *fmt = NULL; 101cabdff1aSopenharmony_ci int i = 0; 102cabdff1aSopenharmony_ci 103cabdff1aSopenharmony_ci while (prev && (fmt = outdev_list[i])) { 104cabdff1aSopenharmony_ci i++; 105cabdff1aSopenharmony_ci if (prev == fmt) 106cabdff1aSopenharmony_ci break; 107cabdff1aSopenharmony_ci } 108cabdff1aSopenharmony_ci 109cabdff1aSopenharmony_ci do { 110cabdff1aSopenharmony_ci fmt = outdev_list[i++]; 111cabdff1aSopenharmony_ci if (!fmt) 112cabdff1aSopenharmony_ci break; 113cabdff1aSopenharmony_ci pc = fmt->priv_class; 114cabdff1aSopenharmony_ci if (!pc) 115cabdff1aSopenharmony_ci continue; 116cabdff1aSopenharmony_ci category = pc->category; 117cabdff1aSopenharmony_ci } while (category != c1 && category != c2); 118cabdff1aSopenharmony_ci return fmt; 119cabdff1aSopenharmony_ci} 120cabdff1aSopenharmony_ci 121cabdff1aSopenharmony_ciconst AVInputFormat *av_input_audio_device_next(const AVInputFormat *d) 122cabdff1aSopenharmony_ci{ 123cabdff1aSopenharmony_ci return next_input(d, AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT); 124cabdff1aSopenharmony_ci} 125cabdff1aSopenharmony_ci 126cabdff1aSopenharmony_ciconst AVInputFormat *av_input_video_device_next(const AVInputFormat *d) 127cabdff1aSopenharmony_ci{ 128cabdff1aSopenharmony_ci return next_input(d, AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT); 129cabdff1aSopenharmony_ci} 130cabdff1aSopenharmony_ci 131cabdff1aSopenharmony_ciconst AVOutputFormat *av_output_audio_device_next(const AVOutputFormat *d) 132cabdff1aSopenharmony_ci{ 133cabdff1aSopenharmony_ci return next_output(d, AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT); 134cabdff1aSopenharmony_ci} 135cabdff1aSopenharmony_ci 136cabdff1aSopenharmony_ciconst AVOutputFormat *av_output_video_device_next(const AVOutputFormat *d) 137cabdff1aSopenharmony_ci{ 138cabdff1aSopenharmony_ci return next_output(d, AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT); 139cabdff1aSopenharmony_ci} 140