Merge branch 'master' into 0.11

Conflicts:
	ext/wavpack/gstwavpackparse.c
	sys/v4l2/gstv4l2bufferpool.c
	sys/v4l2/gstv4l2bufferpool.h
	sys/v4l2/gstv4l2videooverlay.c
This commit is contained in:
Mark Nauwelaerts 2012-03-05 13:29:59 +01:00
commit 26dd999b68
13 changed files with 40 additions and 70 deletions

View file

@ -52,16 +52,14 @@ gst_jack_transport_get_type (void)
static volatile gsize type = 0; static volatile gsize type = 0;
if (g_once_init_enter (&type)) { if (g_once_init_enter (&type)) {
static const GEnumValue enum_values[] = { static const GFlagsValue flag_values[] = {
{GST_JACK_TRANSPORT_AUTONOMOUS,
"No transport support", "autonomous"},
{GST_JACK_TRANSPORT_MASTER, {GST_JACK_TRANSPORT_MASTER,
"Start and stop transport with state changes", "master"}, "Start and stop transport with state changes", "master"},
{GST_JACK_TRANSPORT_SLAVE, {GST_JACK_TRANSPORT_SLAVE,
"Follow transport state changes", "slave"}, "Follow transport state changes", "slave"},
{0, NULL, NULL}, {0, NULL, NULL},
}; };
GType tmp = g_enum_register_static ("GstJackTransport", enum_values); GType tmp = g_flags_register_static ("GstJackTransport", flag_values);
g_once_init_leave (&type, tmp); g_once_init_leave (&type, tmp);
} }
return (GType) type; return (GType) type;

View file

@ -53,9 +53,9 @@ typedef enum {
* client behaviour regarding to the transport mechanism. * client behaviour regarding to the transport mechanism.
*/ */
typedef enum { typedef enum {
GST_JACK_TRANSPORT_AUTONOMOUS, GST_JACK_TRANSPORT_AUTONOMOUS = 0,
GST_JACK_TRANSPORT_MASTER, GST_JACK_TRANSPORT_MASTER = (1 << 0),
GST_JACK_TRANSPORT_SLAVE GST_JACK_TRANSPORT_SLAVE = (1 << 1),
} GstJackTransport; } GstJackTransport;
typedef jack_default_audio_sample_t sample_t; typedef jack_default_audio_sample_t sample_t;

View file

@ -88,10 +88,10 @@ static gboolean
jack_handle_transport_change (GstJackAudioClient * client, GstState state) jack_handle_transport_change (GstJackAudioClient * client, GstState state)
{ {
GstObject *obj = GST_OBJECT_PARENT (client->user_data); GstObject *obj = GST_OBJECT_PARENT (client->user_data);
GstJackTransport mode; guint mode;
g_object_get (obj, "transport", &mode, NULL); g_object_get (obj, "transport", &mode, NULL);
if ((mode == GST_JACK_TRANSPORT_SLAVE) && (GST_STATE (obj) != state)) { if ((mode & GST_JACK_TRANSPORT_SLAVE) && (GST_STATE (obj) != state)) {
GST_INFO_OBJECT (obj, "requesting state change: %s", GST_INFO_OBJECT (obj, "requesting state change: %s",
gst_element_state_get_name (state)); gst_element_state_get_name (state));
gst_element_post_message (GST_ELEMENT (obj), gst_element_post_message (GST_ELEMENT (obj),

View file

@ -564,7 +564,7 @@ gst_jack_ring_buffer_start (GstAudioRingBuffer * buf)
GST_DEBUG_OBJECT (sink, "start"); GST_DEBUG_OBJECT (sink, "start");
if (sink->transport == GST_JACK_TRANSPORT_MASTER) { if (sink->transport & GST_JACK_TRANSPORT_MASTER) {
jack_client_t *client; jack_client_t *client;
client = gst_jack_audio_client_get_client (sink->client); client = gst_jack_audio_client_get_client (sink->client);
@ -583,7 +583,7 @@ gst_jack_ring_buffer_pause (GstAudioRingBuffer * buf)
GST_DEBUG_OBJECT (sink, "pause"); GST_DEBUG_OBJECT (sink, "pause");
if (sink->transport == GST_JACK_TRANSPORT_MASTER) { if (sink->transport & GST_JACK_TRANSPORT_MASTER) {
jack_client_t *client; jack_client_t *client;
client = gst_jack_audio_client_get_client (sink->client); client = gst_jack_audio_client_get_client (sink->client);
@ -602,7 +602,7 @@ gst_jack_ring_buffer_stop (GstAudioRingBuffer * buf)
GST_DEBUG_OBJECT (sink, "stop"); GST_DEBUG_OBJECT (sink, "stop");
if (sink->transport == GST_JACK_TRANSPORT_MASTER) { if (sink->transport & GST_JACK_TRANSPORT_MASTER) {
jack_client_t *client; jack_client_t *client;
client = gst_jack_audio_client_get_client (sink->client); client = gst_jack_audio_client_get_client (sink->client);
@ -761,7 +761,7 @@ gst_jack_audio_sink_class_init (GstJackAudioSinkClass * klass)
* Since: 0.10.31 * Since: 0.10.31
*/ */
g_object_class_install_property (gobject_class, PROP_TRANSPORT, g_object_class_install_property (gobject_class, PROP_TRANSPORT,
g_param_spec_enum ("transport", "Transport mode", g_param_spec_flags ("transport", "Transport mode",
"Jack transport behaviour of the client", "Jack transport behaviour of the client",
GST_TYPE_JACK_TRANSPORT, DEFAULT_PROP_TRANSPORT, GST_TYPE_JACK_TRANSPORT, DEFAULT_PROP_TRANSPORT,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@ -840,7 +840,7 @@ gst_jack_audio_sink_set_property (GObject * object, guint prop_id,
} }
break; break;
case PROP_TRANSPORT: case PROP_TRANSPORT:
sink->transport = g_value_get_enum (value); sink->transport = g_value_get_flags (value);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -870,7 +870,7 @@ gst_jack_audio_sink_get_property (GObject * object, guint prop_id,
g_value_set_boxed (value, sink->jclient); g_value_set_boxed (value, sink->jclient);
break; break;
case PROP_TRANSPORT: case PROP_TRANSPORT:
g_value_set_enum (value, sink->transport); g_value_set_flags (value, sink->transport);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);

View file

@ -59,7 +59,7 @@ struct _GstJackAudioSink {
gchar *server; gchar *server;
jack_client_t *jclient; jack_client_t *jclient;
gchar *client_name; gchar *client_name;
GstJackTransport transport; guint transport;
/* our client */ /* our client */
GstJackAudioClient *client; GstJackAudioClient *client;

View file

@ -576,7 +576,7 @@ gst_jack_ring_buffer_start (GstAudioRingBuffer * buf)
GST_DEBUG_OBJECT (src, "start"); GST_DEBUG_OBJECT (src, "start");
if (src->transport == GST_JACK_TRANSPORT_MASTER) { if (src->transport & GST_JACK_TRANSPORT_MASTER) {
jack_client_t *client; jack_client_t *client;
client = gst_jack_audio_client_get_client (src->client); client = gst_jack_audio_client_get_client (src->client);
@ -595,7 +595,7 @@ gst_jack_ring_buffer_pause (GstAudioRingBuffer * buf)
GST_DEBUG_OBJECT (src, "pause"); GST_DEBUG_OBJECT (src, "pause");
if (src->transport == GST_JACK_TRANSPORT_MASTER) { if (src->transport & GST_JACK_TRANSPORT_MASTER) {
jack_client_t *client; jack_client_t *client;
client = gst_jack_audio_client_get_client (src->client); client = gst_jack_audio_client_get_client (src->client);
@ -614,7 +614,7 @@ gst_jack_ring_buffer_stop (GstAudioRingBuffer * buf)
GST_DEBUG_OBJECT (src, "stop"); GST_DEBUG_OBJECT (src, "stop");
if (src->transport == GST_JACK_TRANSPORT_MASTER) { if (src->transport & GST_JACK_TRANSPORT_MASTER) {
jack_client_t *client; jack_client_t *client;
client = gst_jack_audio_client_get_client (src->client); client = gst_jack_audio_client_get_client (src->client);
@ -782,7 +782,7 @@ gst_jack_audio_src_class_init (GstJackAudioSrcClass * klass)
* Since: 0.10.31 * Since: 0.10.31
*/ */
g_object_class_install_property (gobject_class, PROP_TRANSPORT, g_object_class_install_property (gobject_class, PROP_TRANSPORT,
g_param_spec_enum ("transport", "Transport mode", g_param_spec_flags ("transport", "Transport mode",
"Jack transport behaviour of the client", "Jack transport behaviour of the client",
GST_TYPE_JACK_TRANSPORT, DEFAULT_PROP_TRANSPORT, GST_TYPE_JACK_TRANSPORT, DEFAULT_PROP_TRANSPORT,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@ -859,7 +859,7 @@ gst_jack_audio_src_set_property (GObject * object, guint prop_id,
} }
break; break;
case PROP_TRANSPORT: case PROP_TRANSPORT:
src->transport = g_value_get_enum (value); src->transport = g_value_get_flags (value);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -887,7 +887,7 @@ gst_jack_audio_src_get_property (GObject * object, guint prop_id,
g_value_set_boxed (value, src->jclient); g_value_set_boxed (value, src->jclient);
break; break;
case PROP_TRANSPORT: case PROP_TRANSPORT:
g_value_set_enum (value, src->transport); g_value_set_flags (value, src->transport);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);

View file

@ -76,7 +76,7 @@ struct _GstJackAudioSrc
gchar *server; gchar *server;
jack_client_t *jclient; jack_client_t *jclient;
gchar *client_name; gchar *client_name;
GstJackTransport transport; guint transport;
/* our client */ /* our client */
GstJackAudioClient *client; GstJackAudioClient *client;

View file

@ -171,6 +171,8 @@ gst_wavpack_dec_start (GstAudioDecoder * dec)
gst_audio_decoder_set_max_errors (dec, 16); gst_audio_decoder_set_max_errors (dec, 16);
/* don't bother us with flushing */ /* don't bother us with flushing */
gst_audio_decoder_set_drainable (dec, FALSE); gst_audio_decoder_set_drainable (dec, FALSE);
/* aim for some perfect timestamping */
gst_audio_decoder_set_tolerance (dec, 10 * GST_MSECOND);
return TRUE; return TRUE;
} }
@ -396,14 +398,14 @@ gst_wavpack_dec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buf)
if (width == 8) { if (width == 8) {
gint8 *outbuffer = (gint8 *) out_data; gint8 *outbuffer = (gint8 *) out_data;
for (i = 0; i < max; i--) { for (i = 0; i < max; i++) {
*outbuffer++ = (gint8) (dec_data[i]); *outbuffer++ = (gint8) (dec_data[i]);
} }
} else if (width == 16) { } else if (width == 16) {
gint16 *outbuffer = (gint16 *) out_data; gint16 *outbuffer = (gint16 *) out_data;
for (i = 0; i < max; i++) { for (i = 0; i < max; i++) {
*outbuffer++ = (gint8) (dec_data[i]); *outbuffer++ = (gint16) (dec_data[i]);
} }
} else if (dec->width == 32) { } else if (dec->width == 32) {
gint32 *outbuffer = (gint32 *) out_data; gint32 *outbuffer = (gint32 *) out_data;

View file

@ -619,6 +619,13 @@ gst_wavpack_enc_push_block (void *id, void *data, int32_t count)
} }
} }
samples = wph.block_samples; samples = wph.block_samples;
/* decorate buffer */
/* NOTE: this will get overwritten by baseclass, but stay for those
* that are pushed directly
* FIXME: add setting to baseclass to avoid overwriting it ?? */
GST_BUFFER_OFFSET (buffer) = wph.block_index;
GST_BUFFER_OFFSET_END (buffer) = wph.block_index + wph.block_samples;
} else { } else {
/* if it's something else set no timestamp and duration on the buffer */ /* if it's something else set no timestamp and duration on the buffer */
GST_DEBUG_OBJECT (enc, "got %d bytes of unknown data", count); GST_DEBUG_OBJECT (enc, "got %d bytes of unknown data", count);

View file

@ -142,7 +142,6 @@ static void
gst_wavpack_parse_class_init (GstWavpackParseClass * klass) gst_wavpack_parse_class_init (GstWavpackParseClass * klass)
{ {
GObjectClass *gobject_class; GObjectClass *gobject_class;
GstElementClass *gstelement_class; GstElementClass *gstelement_class;
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
@ -166,7 +165,6 @@ gst_wavpack_parse_index_get_entry_from_sample (GstWavpackParse * wvparse,
gint64 sample_offset) gint64 sample_offset)
{ {
gint i; gint i;
GSList *node; GSList *node;
if (wvparse->entries == NULL) if (wvparse->entries == NULL)
@ -287,9 +285,7 @@ static gboolean
gst_wavpack_parse_src_query (GstPad * pad, GstQuery * query) gst_wavpack_parse_src_query (GstPad * pad, GstQuery * query)
{ {
GstWavpackParse *parse = GST_WAVPACK_PARSE (gst_pad_get_parent (pad)); GstWavpackParse *parse = GST_WAVPACK_PARSE (gst_pad_get_parent (pad));
GstFormat format; GstFormat format;
gboolean ret = FALSE; gboolean ret = FALSE;
switch (GST_QUERY_TYPE (query)) { switch (GST_QUERY_TYPE (query)) {
@ -409,9 +405,7 @@ gst_wavpack_parse_scan_to_find_sample (GstWavpackParse * parse,
gint64 sample, gint64 * byte_offset, gint64 * start_sample) gint64 sample, gint64 * byte_offset, gint64 * start_sample)
{ {
GstWavpackParseIndexEntry *entry; GstWavpackParseIndexEntry *entry;
GstFlowReturn ret; GstFlowReturn ret;
gint64 off = 0; gint64 off = 0;
/* first, check if we have to scan at all */ /* first, check if we have to scan at all */
@ -439,7 +433,6 @@ gst_wavpack_parse_scan_to_find_sample (GstWavpackParse * parse,
/* now scan forward until we find the chunk we're looking for or hit EOS */ /* now scan forward until we find the chunk we're looking for or hit EOS */
do { do {
WavpackHeader header; WavpackHeader header;
GstBuffer *buf; GstBuffer *buf;
buf = gst_wavpack_parse_pull_buffer (parse, off, sizeof (WavpackHeader), buf = gst_wavpack_parse_pull_buffer (parse, off, sizeof (WavpackHeader),
@ -479,13 +472,9 @@ gst_wavpack_parse_send_newsegment (GstWavpackParse * wvparse, gboolean update)
GstSegment *s = &wvparse->segment; GstSegment *s = &wvparse->segment;
gboolean ret; gboolean ret;
gint64 stop_time = -1; gint64 stop_time = -1;
gint64 start_time = 0; gint64 start_time = 0;
gint64 cur_pos_time; gint64 cur_pos_time;
gint64 diff; gint64 diff;
/* segment is in DEFAULT format, but we want to send a TIME newsegment */ /* segment is in DEFAULT format, but we want to send a TIME newsegment */
@ -522,31 +511,18 @@ gst_wavpack_parse_handle_seek_event (GstWavpackParse * wvparse,
GstEvent * event) GstEvent * event)
{ {
GstSeekFlags seek_flags; GstSeekFlags seek_flags;
GstSeekType start_type; GstSeekType start_type;
GstSeekType stop_type; GstSeekType stop_type;
GstSegment segment; GstSegment segment;
GstFormat format; GstFormat format;
gboolean only_update; gboolean only_update;
gboolean flush, ret; gboolean flush, ret;
gdouble speed; gdouble speed;
gint64 stop; gint64 stop;
gint64 start; /* sample we want to seek to */ gint64 start; /* sample we want to seek to */
gint64 byte_offset; /* byte offset the chunk we seek to starts at */ gint64 byte_offset; /* byte offset the chunk we seek to starts at */
gint64 chunk_start; /* first sample in chunk we seek to */ gint64 chunk_start; /* first sample in chunk we seek to */
guint rate; guint rate;
gint64 last_stop; gint64 last_stop;
if (wvparse->adapter) { if (wvparse->adapter) {
@ -672,7 +648,6 @@ static gboolean
gst_wavpack_parse_sink_event (GstPad * pad, GstEvent * event) gst_wavpack_parse_sink_event (GstPad * pad, GstEvent * event)
{ {
GstWavpackParse *parse; GstWavpackParse *parse;
gboolean ret = TRUE; gboolean ret = TRUE;
parse = GST_WAVPACK_PARSE (gst_pad_get_parent (pad)); parse = GST_WAVPACK_PARSE (gst_pad_get_parent (pad));
@ -731,7 +706,6 @@ static gboolean
gst_wavpack_parse_src_event (GstPad * pad, GstEvent * event) gst_wavpack_parse_src_event (GstPad * pad, GstEvent * event)
{ {
GstWavpackParse *parse; GstWavpackParse *parse;
gboolean ret; gboolean ret;
parse = GST_WAVPACK_PARSE (gst_pad_get_parent (pad)); parse = GST_WAVPACK_PARSE (gst_pad_get_parent (pad));
@ -753,7 +727,6 @@ static void
gst_wavpack_parse_init (GstWavpackParse * parse, GstWavpackParseClass * gclass) gst_wavpack_parse_init (GstWavpackParse * parse, GstWavpackParseClass * gclass)
{ {
GstElementClass *klass = GST_ELEMENT_GET_CLASS (parse); GstElementClass *klass = GST_ELEMENT_GET_CLASS (parse);
GstPadTemplate *tmpl; GstPadTemplate *tmpl;
tmpl = gst_element_class_get_pad_template (klass, "sink"); tmpl = gst_element_class_get_pad_template (klass, "sink");
@ -778,7 +751,6 @@ static gint64
gst_wavpack_parse_get_upstream_length (GstWavpackParse * parse) gst_wavpack_parse_get_upstream_length (GstWavpackParse * parse)
{ {
gint64 length = -1; gint64 length = -1;
GstFormat format = GST_FORMAT_BYTES; GstFormat format = GST_FORMAT_BYTES;
if (!gst_pad_query_peer_duration (parse->sinkpad, &format, &length)) { if (!gst_pad_query_peer_duration (parse->sinkpad, &format, &length)) {
@ -794,7 +766,6 @@ gst_wavpack_parse_pull_buffer (GstWavpackParse * wvparse, gint64 offset,
guint size, GstFlowReturn * flow) guint size, GstFlowReturn * flow)
{ {
GstFlowReturn flow_ret; GstFlowReturn flow_ret;
GstBuffer *buf = NULL; GstBuffer *buf = NULL;
if (offset + size > wvparse->upstream_length) { if (offset + size > wvparse->upstream_length) {
@ -835,9 +806,7 @@ gst_wavpack_parse_create_src_pad (GstWavpackParse * wvparse, GstBuffer * buf,
WavpackHeader * header) WavpackHeader * header)
{ {
GstWavpackMetadata meta; GstWavpackMetadata meta;
GstCaps *caps = NULL; GstCaps *caps = NULL;
guchar *bufptr; guchar *bufptr;
g_assert (wvparse->srcpad == NULL); g_assert (wvparse->srcpad == NULL);
@ -952,8 +921,8 @@ gst_wavpack_parse_push_buffer (GstWavpackParse * wvparse, GstBuffer * buf,
WavpackHeader * header) WavpackHeader * header)
{ {
GstFlowReturn ret; GstFlowReturn ret;
wvparse->current_offset += header->ckSize + 8;
wvparse->current_offset += header->ckSize + 8;
wvparse->segment.last_stop = header->block_index; wvparse->segment.last_stop = header->block_index;
if (wvparse->need_newsegment) { if (wvparse->need_newsegment) {
@ -1019,8 +988,7 @@ gst_wavpack_parse_push_buffer (GstWavpackParse * wvparse, GstBuffer * buf,
static guint8 * static guint8 *
gst_wavpack_parse_find_marker (guint8 * buf, guint size) gst_wavpack_parse_find_marker (guint8 * buf, guint size)
{ {
int i; gint i;
guint8 *ret = NULL; guint8 *ret = NULL;
if (G_UNLIKELY (size < 4)) if (G_UNLIKELY (size < 4))
@ -1039,7 +1007,6 @@ static GstFlowReturn
gst_wavpack_parse_resync_loop (GstWavpackParse * parse, WavpackHeader * header) gst_wavpack_parse_resync_loop (GstWavpackParse * parse, WavpackHeader * header)
{ {
GstFlowReturn flow_ret = GST_FLOW_EOS; GstFlowReturn flow_ret = GST_FLOW_EOS;
GstBuffer *buf = NULL; GstBuffer *buf = NULL;
/* loop until we have a frame header or reach the end of the stream */ /* loop until we have a frame header or reach the end of the stream */
@ -1106,7 +1073,6 @@ static void
gst_wavpack_parse_loop (GstElement * element) gst_wavpack_parse_loop (GstElement * element)
{ {
GstWavpackParse *parse = GST_WAVPACK_PARSE (element); GstWavpackParse *parse = GST_WAVPACK_PARSE (element);
GstFlowReturn flow_ret; GstFlowReturn flow_ret;
WavpackHeader header = { {0,}, 0, }; WavpackHeader header = { {0,}, 0, };
GstBuffer *buf = NULL; GstBuffer *buf = NULL;
@ -1180,7 +1146,6 @@ static gboolean
gst_wavpack_parse_resync_adapter (GstAdapter * adapter) gst_wavpack_parse_resync_adapter (GstAdapter * adapter)
{ {
const guint8 *buf, *marker; const guint8 *buf, *marker;
guint avail = gst_adapter_available (adapter); guint avail = gst_adapter_available (adapter);
if (avail < 4) if (avail < 4)
@ -1212,11 +1177,8 @@ static GstFlowReturn
gst_wavpack_parse_chain (GstPad * pad, GstBuffer * buf) gst_wavpack_parse_chain (GstPad * pad, GstBuffer * buf)
{ {
GstWavpackParse *wvparse = GST_WAVPACK_PARSE (GST_PAD_PARENT (pad)); GstWavpackParse *wvparse = GST_WAVPACK_PARSE (GST_PAD_PARENT (pad));
GstFlowReturn ret = GST_FLOW_OK; GstFlowReturn ret = GST_FLOW_OK;
WavpackHeader wph; WavpackHeader wph;
const guint8 *tmp_buf; const guint8 *tmp_buf;
if (!wvparse->adapter) { if (!wvparse->adapter) {
@ -1276,7 +1238,6 @@ static GstStateChangeReturn
gst_wavpack_parse_change_state (GstElement * element, GstStateChange transition) gst_wavpack_parse_change_state (GstElement * element, GstStateChange transition)
{ {
GstWavpackParse *wvparse = GST_WAVPACK_PARSE (element); GstWavpackParse *wvparse = GST_WAVPACK_PARSE (element);
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
switch (transition) { switch (transition) {

View file

@ -399,7 +399,7 @@ gst_wavpack_parse_frame_header (GstWavpackParse * parse, GstBuffer * buf,
gint skip, WavpackHeader * _wph) gint skip, WavpackHeader * _wph)
{ {
GstByteReader br = GST_BYTE_READER_INIT_FROM_BUFFER (buf); GstByteReader br = GST_BYTE_READER_INIT_FROM_BUFFER (buf);
WavpackHeader wph; WavpackHeader wph = { {0,}, 0, };
g_return_val_if_fail (GST_BUFFER_SIZE (buf) >= skip + sizeof (WavpackHeader), g_return_val_if_fail (GST_BUFFER_SIZE (buf) >= skip + sizeof (WavpackHeader),
FALSE); FALSE);

View file

@ -178,7 +178,7 @@ static GstStaticPadTemplate audio_sink_factory =
"rate = (int) [ 1000, 96000 ], " "channels = (int) [ 1, 2 ]; " "rate = (int) [ 1000, 96000 ], " "channels = (int) [ 1, 2 ]; "
#endif*/ #endif*/
"audio/x-ac3, " "audio/x-ac3, "
"rate = (int) [ 1000, 96000 ], " "channels = (int) [ 1, 2 ]; " "rate = (int) [ 1000, 96000 ], " "channels = (int) [ 1, 6 ]; "
"audio/x-alaw, " "audio/x-alaw, "
"rate = (int) [ 1000, 48000 ], " "channels = (int) [ 1, 2 ]; " "rate = (int) [ 1000, 48000 ], " "channels = (int) [ 1, 2 ]; "
"audio/x-mulaw, " "audio/x-mulaw, "

View file

@ -31,6 +31,8 @@
#include <X11/extensions/Xv.h> #include <X11/extensions/Xv.h>
#include <X11/extensions/Xvlib.h> #include <X11/extensions/Xvlib.h>
#include <sys/stat.h> #include <sys/stat.h>
/* for XkbKeycodeToKeysym */
#include <X11/XKBlib.h>
#include <gst/interfaces/navigation.h> #include <gst/interfaces/navigation.h>
@ -323,7 +325,7 @@ event_refresh (gpointer data)
case KeyPress: case KeyPress:
case KeyRelease: case KeyRelease:
g_mutex_lock (&v4l2xv->mutex); g_mutex_lock (&v4l2xv->mutex);
keysym = XKeycodeToKeysym (v4l2xv->dpy, e.xkey.keycode, 0); keysym = XkbKeycodeToKeysym (v4l2xv->dpy, e.xkey.keycode, 0, 0);
if (keysym != NoSymbol) { if (keysym != NoSymbol) {
key_str = XKeysymToString (keysym); key_str = XKeysymToString (keysym);
} else { } else {