Commit 38a08e0a authored by Michael Niedermayer's avatar Michael Niedermayer

Merge remote-tracking branch 'lukaszmluki/master'

* lukaszmluki/master:
  lavd: add list devices API
  lavd/opengl_enc_shaders: fix gray* shader

Conflicts:
	doc/APIchanges
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents b02b7834 81c3f81d
...@@ -15,6 +15,9 @@ libavutil: 2012-10-22 ...@@ -15,6 +15,9 @@ libavutil: 2012-10-22
API changes, most recent first: API changes, most recent first:
2014-02-xx - xxxxxxx - lavd 55.10.100 - avdevice.h
Add avdevice_list_devices() and avdevice_free_list_devices()
2014-02-16 - db3c970 - lavf 55.33.100 - avio.h 2014-02-16 - db3c970 - lavf 55.33.100 - avio.h
Add avio_find_protocol_name() to find out the name of the protocol that would Add avio_find_protocol_name() to find out the name of the protocol that would
be selected for a given URL. be selected for a given URL.
......
...@@ -52,3 +52,44 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToA ...@@ -52,3 +52,44 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToA
return AVERROR(ENOSYS); return AVERROR(ENOSYS);
return s->control_message_cb(s, type, data, data_size); return s->control_message_cb(s, type, data, data_size);
} }
int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list)
{
av_assert0(s);
av_assert0(device_list);
av_assert0(s->oformat || s->iformat);
if ((s->oformat && !s->oformat->get_device_list) ||
(s->iformat && !s->iformat->get_device_list)) {
*device_list = NULL;
return AVERROR(ENOSYS);
}
*device_list = av_mallocz(sizeof(AVDeviceInfoList));
if (!(*device_list))
return AVERROR(ENOMEM);
if (s->oformat)
return s->oformat->get_device_list(s, *device_list);
return s->iformat->get_device_list(s, *device_list);
}
void avdevice_free_list_devices(AVDeviceInfoList **device_list)
{
AVDeviceInfoList *list;
AVDeviceInfo *dev;
int i;
av_assert0(device_list);
list = *device_list;
if (!list)
return;
for (i = 0; i < list->nb_devices; i++) {
dev = list->devices[i];
if (dev) {
av_free(dev->device_name);
av_free(dev->device_description);
av_free(dev);
}
}
av_free(list->devices);
av_freep(device_list);
}
...@@ -191,4 +191,43 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s, ...@@ -191,4 +191,43 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s,
enum AVDevToAppMessageType type, enum AVDevToAppMessageType type,
void *data, size_t data_size); void *data, size_t data_size);
/**
* Structure describes basic parameters of the device.
*/
typedef struct AVDeviceInfo {
char *device_name; /**< device name, format depends on device */
char *device_description; /**< human friendly name */
} AVDeviceInfo;
/**
* List of devices.
*/
typedef struct AVDeviceInfoList {
AVDeviceInfo **devices; /**< list of autodetected devices */
int nb_devices; /**< number of autodetected devices */
int default_device; /**< index of default device or -1 if no default */
} AVDeviceInfoList;
/**
* List devices.
*
* Returns available device names and their parameters.
*
* @note: Some devices may accept system-dependent device names that cannot be
* autodetected. The list returned by this function cannot be assumed to
* be always completed.
*
* @param s device context.
* @param[out] device_list list of autodetected devices.
* @return count of autodetected devices, negative on error.
*/
int avdevice_list_devices(struct AVFormatContext *s, AVDeviceInfoList **device_list);
/**
* Convinient function to free result of avdevice_list_devices().
*
* @param devices device list to be freed.
*/
void avdevice_free_list_devices(AVDeviceInfoList **device_list);
#endif /* AVDEVICE_AVDEVICE_H */ #endif /* AVDEVICE_AVDEVICE_H */
...@@ -181,7 +181,7 @@ static const char * const FF_OPENGL_FRAGMENT_SHADER_GRAY = ...@@ -181,7 +181,7 @@ static const char * const FF_OPENGL_FRAGMENT_SHADER_GRAY =
"varying vec2 texture_coordinate;" "varying vec2 texture_coordinate;"
"void main()" "void main()"
"{" "{"
"float c = texture2D(u_texture0, texture_coordinate);" "float c = texture2D(u_texture0, texture_coordinate).r;"
"gl_FragColor = vec4(c, c, c, 1.0);" "gl_FragColor = vec4(c, c, c, 1.0);"
"}"; "}";
......
...@@ -28,8 +28,8 @@ ...@@ -28,8 +28,8 @@
#include "libavutil/version.h" #include "libavutil/version.h"
#define LIBAVDEVICE_VERSION_MAJOR 55 #define LIBAVDEVICE_VERSION_MAJOR 55
#define LIBAVDEVICE_VERSION_MINOR 9 #define LIBAVDEVICE_VERSION_MINOR 10
#define LIBAVDEVICE_VERSION_MICRO 101 #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, \
LIBAVDEVICE_VERSION_MINOR, \ LIBAVDEVICE_VERSION_MINOR, \
......
...@@ -261,6 +261,7 @@ ...@@ -261,6 +261,7 @@
struct AVFormatContext; struct AVFormatContext;
struct AVDeviceInfoList;
/** /**
* @defgroup metadata_api Public Metadata API * @defgroup metadata_api Public Metadata API
...@@ -523,6 +524,11 @@ typedef struct AVOutputFormat { ...@@ -523,6 +524,11 @@ typedef struct AVOutputFormat {
*/ */
int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index, int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index,
AVFrame **frame, unsigned flags); AVFrame **frame, unsigned flags);
/**
* Returns device list with it properties.
* @see avdevice_list_devices() for more details.
*/
int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
} AVOutputFormat; } AVOutputFormat;
/** /**
* @} * @}
...@@ -651,6 +657,12 @@ typedef struct AVInputFormat { ...@@ -651,6 +657,12 @@ typedef struct AVInputFormat {
* Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL.
*/ */
int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);
/**
* Returns device list with it properties.
* @see avdevice_list_devices() for more details.
*/
int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
} AVInputFormat; } AVInputFormat;
/** /**
* @} * @}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment