Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>tags/n2.6
| @@ -15,6 +15,10 @@ libavutil: 2014-08-09 | |||||
| API changes, most recent first: | API changes, most recent first: | ||||
| 2015-01-11 - xxxxxxx - lavd 56.4.100 - avdevice.h | |||||
| Add avdevice_list_input_sources(). | |||||
| Add avdevice_list_output_sinks(). | |||||
| 201x-xx-xx - xxxxxxx - lavc 56.10.0 - vdpau.h | 201x-xx-xx - xxxxxxx - lavc 56.10.0 - vdpau.h | ||||
| Add av_vdpau_get_surface_parameters(). | Add av_vdpau_get_surface_parameters(). | ||||
| @@ -7,6 +7,7 @@ HEADERS = avdevice.h \ | |||||
| OBJS = alldevices.o \ | OBJS = alldevices.o \ | ||||
| avdevice.o \ | avdevice.o \ | ||||
| utils.o \ | |||||
| # input/output devices | # input/output devices | ||||
| OBJS-$(CONFIG_ALSA_INDEV) += alsa-audio-common.o \ | OBJS-$(CONFIG_ALSA_INDEV) += alsa-audio-common.o \ | ||||
| @@ -21,6 +21,7 @@ | |||||
| #include "libavutil/pixfmt.h" | #include "libavutil/pixfmt.h" | ||||
| #include "libavcodec/avcodec.h" | #include "libavcodec/avcodec.h" | ||||
| #include "avdevice.h" | #include "avdevice.h" | ||||
| #include "internal.h" | |||||
| #include "config.h" | #include "config.h" | ||||
| #include "libavutil/ffversion.h" | #include "libavutil/ffversion.h" | ||||
| @@ -208,6 +209,44 @@ int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list) | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| static int list_devices_for_context(AVFormatContext *s, AVDictionary *options, | |||||
| AVDeviceInfoList **device_list) | |||||
| { | |||||
| AVDictionary *tmp = NULL; | |||||
| int ret; | |||||
| av_dict_copy(&tmp, options, 0); | |||||
| if ((ret = av_opt_set_dict2(s, &tmp, AV_OPT_SEARCH_CHILDREN)) < 0) | |||||
| goto fail; | |||||
| ret = avdevice_list_devices(s, device_list); | |||||
| fail: | |||||
| av_dict_free(&tmp); | |||||
| avformat_free_context(s); | |||||
| return ret; | |||||
| } | |||||
| int avdevice_list_input_sources(AVInputFormat *device, const char *device_name, | |||||
| AVDictionary *device_options, AVDeviceInfoList **device_list) | |||||
| { | |||||
| AVFormatContext *s = NULL; | |||||
| int ret; | |||||
| if ((ret = ff_alloc_input_device_context(&s, device, device_name)) < 0) | |||||
| return ret; | |||||
| return list_devices_for_context(s, device_options, device_list); | |||||
| } | |||||
| int avdevice_list_output_sinks(AVOutputFormat *device, const char *device_name, | |||||
| AVDictionary *device_options, AVDeviceInfoList **device_list) | |||||
| { | |||||
| AVFormatContext *s = NULL; | |||||
| int ret; | |||||
| if ((ret = avformat_alloc_output_context2(&s, device, device_name, NULL)) < 0) | |||||
| return ret; | |||||
| return list_devices_for_context(s, device_options, device_list); | |||||
| } | |||||
| void avdevice_free_list_devices(AVDeviceInfoList **device_list) | void avdevice_free_list_devices(AVDeviceInfoList **device_list) | ||||
| { | { | ||||
| AVDeviceInfoList *list; | AVDeviceInfoList *list; | ||||
| @@ -484,4 +484,26 @@ int avdevice_list_devices(struct AVFormatContext *s, AVDeviceInfoList **device_l | |||||
| */ | */ | ||||
| void avdevice_free_list_devices(AVDeviceInfoList **device_list); | void avdevice_free_list_devices(AVDeviceInfoList **device_list); | ||||
| /** | |||||
| * List devices. | |||||
| * | |||||
| * Returns available device names and their parameters. | |||||
| * These are convinient wrappers for avdevice_list_devices(). | |||||
| * Device context is allocated and deallocated internally. | |||||
| * | |||||
| * @param device device format. May be NULL if device name is set. | |||||
| * @param device_name device name. May be NULL if device format is set. | |||||
| * @param device_options An AVDictionary filled with device-private options. May be NULL. | |||||
| * The same options must be passed later to avformat_write_header() for output | |||||
| * devices or avformat_open_input() for input devices, or at any other place | |||||
| * that affects device-private options. | |||||
| * @param[out] device_list list of autodetected devices | |||||
| * @return count of autodetected devices, negative on error. | |||||
| * @note device argument takes precedence over device_name when both are set. | |||||
| */ | |||||
| int avdevice_list_input_sources(struct AVInputFormat *device, const char *device_name, | |||||
| AVDictionary *device_options, AVDeviceInfoList **device_list); | |||||
| int avdevice_list_output_sinks(struct AVOutputFormat *device, const char *device_name, | |||||
| AVDictionary *device_options, AVDeviceInfoList **device_list); | |||||
| #endif /* AVDEVICE_AVDEVICE_H */ | #endif /* AVDEVICE_AVDEVICE_H */ | ||||
| @@ -0,0 +1,27 @@ | |||||
| /* | |||||
| * This file is part of FFmpeg. | |||||
| * | |||||
| * FFmpeg is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU Lesser General Public | |||||
| * License as published by the Free Software Foundation; either | |||||
| * version 2.1 of the License, or (at your option) any later version. | |||||
| * | |||||
| * FFmpeg is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||||
| * Lesser General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Lesser General Public | |||||
| * License along with FFmpeg; if not, write to the Free Software | |||||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
| */ | |||||
| #ifndef AVDEVICE_INTERNAL_H | |||||
| #define AVDEVICE_INTERNAL_H | |||||
| #include "libavformat/avformat.h" | |||||
| int ff_alloc_input_device_context(struct AVFormatContext **avctx, struct AVInputFormat *iformat, | |||||
| const char *format); | |||||
| #endif | |||||
| @@ -0,0 +1,59 @@ | |||||
| /* | |||||
| * This file is part of FFmpeg. | |||||
| * | |||||
| * FFmpeg is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU Lesser General Public | |||||
| * License as published by the Free Software Foundation; either | |||||
| * version 2.1 of the License, or (at your option) any later version. | |||||
| * | |||||
| * FFmpeg is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||||
| * Lesser General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Lesser General Public | |||||
| * License along with FFmpeg; if not, write to the Free Software | |||||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
| */ | |||||
| #include "internal.h" | |||||
| #include "libavutil/opt.h" | |||||
| #include "libavformat/avformat.h" | |||||
| int ff_alloc_input_device_context(AVFormatContext **avctx, AVInputFormat *iformat, const char *format) | |||||
| { | |||||
| AVFormatContext *s; | |||||
| int ret = 0; | |||||
| *avctx = NULL; | |||||
| if (!iformat && !format) | |||||
| return AVERROR(EINVAL); | |||||
| if (!(s = avformat_alloc_context())) | |||||
| return AVERROR(ENOMEM); | |||||
| if (!iformat) | |||||
| iformat = av_find_input_format(format); | |||||
| if (!iformat || !iformat->priv_class || !AV_IS_INPUT_DEVICE(iformat->priv_class->category)) { | |||||
| ret = AVERROR(EINVAL); | |||||
| goto error; | |||||
| } | |||||
| s->iformat = iformat; | |||||
| if (s->iformat->priv_data_size > 0) { | |||||
| s->priv_data = av_mallocz(s->iformat->priv_data_size); | |||||
| if (!s->priv_data) { | |||||
| ret = AVERROR(ENOMEM); | |||||
| goto error; | |||||
| } | |||||
| if (s->iformat->priv_class) { | |||||
| *(const AVClass**)s->priv_data= s->iformat->priv_class; | |||||
| av_opt_set_defaults(s->priv_data); | |||||
| } | |||||
| } else | |||||
| s->priv_data = NULL; | |||||
| *avctx = s; | |||||
| return 0; | |||||
| error: | |||||
| avformat_free_context(s); | |||||
| return ret; | |||||
| } | |||||
| @@ -28,7 +28,7 @@ | |||||
| #include "libavutil/version.h" | #include "libavutil/version.h" | ||||
| #define LIBAVDEVICE_VERSION_MAJOR 56 | #define LIBAVDEVICE_VERSION_MAJOR 56 | ||||
| #define LIBAVDEVICE_VERSION_MINOR 3 | |||||
| #define LIBAVDEVICE_VERSION_MINOR 4 | |||||
| #define LIBAVDEVICE_VERSION_MICRO 100 | #define LIBAVDEVICE_VERSION_MICRO 100 | ||||
| #define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ | #define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ | ||||