本文整理汇总了C++中GST_STR_NULL函数的典型用法代码示例。如果您正苦于以下问题:C++ GST_STR_NULL函数的具体用法?C++ GST_STR_NULL怎么用?C++ GST_STR_NULL使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GST_STR_NULL函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: gst_jack_audio_get_connection
static GstJackAudioConnection *
gst_jack_audio_get_connection (const gchar * id, const gchar * server,
jack_client_t * jclient, jack_status_t * status)
{
GstJackAudioConnection *conn;
GList *found;
FindData data;
GST_DEBUG ("getting connection for id %s, server %s", id,
GST_STR_NULL (server));
data.id = id;
data.server = server;
G_LOCK (connections_lock);
found =
g_list_find_custom (connections, &data, (GCompareFunc) connection_find);
if (found != NULL && jclient != NULL) {
/* we found it, increase refcount and return it */
conn = (GstJackAudioConnection *) found->data;
conn->refcount++;
GST_DEBUG ("found connection %p", conn);
} else {
/* make new connection */
conn = gst_jack_audio_make_connection (id, server, jclient, status);
if (conn != NULL) {
GST_DEBUG ("created connection %p", conn);
/* add to list on success */
connections = g_list_prepend (connections, conn);
} else {
GST_WARNING ("could not create connection");
}
}
G_UNLOCK (connections_lock);
return conn;
}
示例2: print_plugin
static void
print_plugin (const gchar * marker, GstRegistry * registry, GstPlugin * plugin)
{
const gchar *name;
GList *features, *f;
name = gst_plugin_get_name (plugin);
GST_DEBUG ("%s: plugin %p %d %s file: %s", marker, plugin,
GST_OBJECT_REFCOUNT (plugin), name,
GST_STR_NULL (gst_plugin_get_filename (plugin)));
features = gst_registry_get_feature_list_by_plugin (registry, name);
for (f = features; f != NULL; f = f->next) {
GstPluginFeature *feature;
feature = GST_PLUGIN_FEATURE (f->data);
GST_LOG ("%s: feature: %p %s", marker, feature,
GST_OBJECT_NAME (feature));
}
gst_plugin_feature_list_free (features);
}
示例3: gst_element_factory_make
/**
* gst_element_factory_make:
* @factoryname: a named factory to instantiate
* @name: (allow-none): name of new element, or NULL to automatically create
* a unique name
*
* Create a new element of the type defined by the given element factory.
* If name is NULL, then the element will receive a guaranteed unique name,
* consisting of the element factory name and a number.
* If name is given, it will be given the name supplied.
*
* Returns: (transfer full): new #GstElement or NULL if unable to create element
*/
GstElement *
gst_element_factory_make (const gchar * factoryname, const gchar * name)
{
GstElementFactory *factory;
GstElement *element;
g_return_val_if_fail (factoryname != NULL, NULL);
g_return_val_if_fail (gst_is_initialized (), NULL);
GST_LOG ("gstelementfactory: make \"%s\" \"%s\"",
factoryname, GST_STR_NULL (name));
factory = gst_element_factory_find (factoryname);
if (factory == NULL)
goto no_factory;
GST_LOG_OBJECT (factory, "found factory %p", factory);
element = gst_element_factory_create (factory, name);
if (element == NULL)
goto create_failed;
gst_object_unref (factory);
return element;
/* ERRORS */
no_factory:
{
GST_INFO ("no such element factory \"%s\"!", factoryname);
return NULL;
}
create_failed:
{
GST_INFO_OBJECT (factory, "couldn't create instance!");
gst_object_unref (factory);
return NULL;
}
}
示例4: jack_shutdown_cb
static void
jack_shutdown_cb (void *arg)
{
GstJackAudioConnection *conn = (GstJackAudioConnection *) arg;
GList *walk;
GST_DEBUG ("disconnect client %s from server %s", conn->id,
GST_STR_NULL (conn->server));
g_mutex_lock (conn->lock);
for (walk = conn->src_clients; walk; walk = g_list_next (walk)) {
GstJackAudioClient *client = (GstJackAudioClient *) walk->data;
if (client->shutdown)
client->shutdown (client->user_data);
}
for (walk = conn->sink_clients; walk; walk = g_list_next (walk)) {
GstJackAudioClient *client = (GstJackAudioClient *) walk->data;
if (client->shutdown)
client->shutdown (client->user_data);
}
g_mutex_unlock (conn->lock);
}
示例5: gst_mms_do_seek
static gboolean
gst_mms_do_seek (GstBaseSrc * src, GstSegment * segment)
{
mms_off_t start;
GstMMS *mmssrc = GST_MMS (src);
if (segment->format == GST_FORMAT_TIME) {
if (!mmsx_time_seek (NULL, mmssrc->connection,
(double) segment->start / GST_SECOND)) {
GST_LOG_OBJECT (mmssrc, "mmsx_time_seek() failed");
return FALSE;
}
start = mmsx_get_current_pos (mmssrc->connection);
GST_INFO_OBJECT (mmssrc, "sought to %" GST_TIME_FORMAT ", offset after "
"seek: %" G_GINT64_FORMAT, GST_TIME_ARGS (segment->start), start);
} else if (segment->format == GST_FORMAT_BYTES) {
start = mmsx_seek (NULL, mmssrc->connection, segment->start, SEEK_SET);
/* mmsx_seek will close and reopen the connection when seeking with the
mmsh protocol, if the reopening fails this is indicated with -1 */
if (start == -1) {
GST_DEBUG_OBJECT (mmssrc, "connection broken during seek");
return FALSE;
}
GST_INFO_OBJECT (mmssrc, "sought to: %" G_GINT64_FORMAT " bytes, "
"result: %" G_GINT64_FORMAT, segment->start, start);
} else {
GST_DEBUG_OBJECT (mmssrc, "unsupported seek segment format: %s",
GST_STR_NULL (gst_format_get_name (segment->format)));
return FALSE;
}
gst_segment_init (segment, GST_FORMAT_BYTES);
gst_segment_set_seek (segment, segment->rate, GST_FORMAT_BYTES,
segment->flags, GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_NONE,
segment->stop, NULL);
return TRUE;
}
示例6: totem_gst_message_print
void
totem_gst_message_print (GstMessage *msg,
GstElement *play,
const char *filename)
{
GError *err = NULL;
char *dbg = NULL;
g_return_if_fail (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR);
if (play != NULL) {
g_return_if_fail (filename != NULL);
GST_DEBUG_BIN_TO_DOT_FILE (GST_BIN_CAST (play),
GST_DEBUG_GRAPH_SHOW_ALL ^ GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS,
filename);
}
gst_message_parse_error (msg, &err, &dbg);
if (err) {
char *uri;
g_object_get (play, "uri", &uri, NULL);
GST_ERROR ("message = %s", GST_STR_NULL (err->message));
GST_ERROR ("domain = %d (%s)", err->domain,
GST_STR_NULL (g_quark_to_string (err->domain)));
GST_ERROR ("code = %d", err->code);
GST_ERROR ("debug = %s", GST_STR_NULL (dbg));
GST_ERROR ("source = %" GST_PTR_FORMAT, msg->src);
GST_ERROR ("uri = %s", GST_STR_NULL (uri));
g_free (uri);
g_message ("Error: %s\n%s\n", GST_STR_NULL (err->message),
GST_STR_NULL (dbg));
g_error_free (err);
}
g_free (dbg);
}
示例7: gst_rtp_g722_depay_setcaps
static gboolean
gst_rtp_g722_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
{
GstStructure *structure;
GstRtpG722Depay *rtpg722depay;
gint clock_rate, payload, samplerate;
gint channels;
GstCaps *srccaps;
gboolean res;
const gchar *channel_order;
const GstRTPChannelOrder *order;
rtpg722depay = GST_RTP_G722_DEPAY (depayload);
structure = gst_caps_get_structure (caps, 0);
payload = 96;
gst_structure_get_int (structure, "payload", &payload);
switch (payload) {
case GST_RTP_PAYLOAD_G722:
channels = 1;
clock_rate = 8000;
samplerate = 16000;
break;
default:
/* no fixed mapping, we need clock-rate */
channels = 0;
clock_rate = 0;
samplerate = 0;
break;
}
/* caps can overwrite defaults */
clock_rate =
gst_rtp_g722_depay_parse_int (structure, "clock-rate", clock_rate);
if (clock_rate == 0)
goto no_clockrate;
if (clock_rate == 8000)
samplerate = 16000;
if (samplerate == 0)
samplerate = clock_rate;
channels =
gst_rtp_g722_depay_parse_int (structure, "encoding-params", channels);
if (channels == 0) {
channels = gst_rtp_g722_depay_parse_int (structure, "channels", channels);
if (channels == 0) {
/* channels defaults to 1 otherwise */
channels = 1;
}
}
depayload->clock_rate = clock_rate;
rtpg722depay->rate = samplerate;
rtpg722depay->channels = channels;
srccaps = gst_caps_new_simple ("audio/G722",
"rate", G_TYPE_INT, samplerate, "channels", G_TYPE_INT, channels, NULL);
/* add channel positions */
channel_order = gst_structure_get_string (structure, "channel-order");
order = gst_rtp_channels_get_by_order (channels, channel_order);
if (order) {
gst_audio_set_channel_positions (gst_caps_get_structure (srccaps, 0),
order->pos);
} else {
GstAudioChannelPosition *pos;
GST_ELEMENT_WARNING (rtpg722depay, STREAM, DECODE,
(NULL), ("Unknown channel order '%s' for %d channels",
GST_STR_NULL (channel_order), channels));
/* create default NONE layout */
pos = gst_rtp_channels_create_default (channels);
gst_audio_set_channel_positions (gst_caps_get_structure (srccaps, 0), pos);
g_free (pos);
}
res = gst_pad_set_caps (depayload->srcpad, srccaps);
gst_caps_unref (srccaps);
return res;
/* ERRORS */
no_clockrate:
{
GST_ERROR_OBJECT (depayload, "no clock-rate specified");
return FALSE;
}
}
示例8: gst_gsettings_audio_sink_change_child
static gboolean
gst_gsettings_audio_sink_change_child (GstGSettingsAudioSink * sink)
{
const gchar *key = NULL;
gchar *new_string;
GError *err = NULL;
GstElement *new_kid;
GST_OBJECT_LOCK (sink);
switch (sink->profile) {
case GST_GSETTINGS_AUDIOSINK_PROFILE_SOUNDS:
key = GST_GSETTINGS_KEY_SOUNDS_AUDIOSINK;
break;
case GST_GSETTINGS_AUDIOSINK_PROFILE_MUSIC:
key = GST_GSETTINGS_KEY_MUSIC_AUDIOSINK;
break;
case GST_GSETTINGS_AUDIOSINK_PROFILE_CHAT:
key = GST_GSETTINGS_KEY_CHAT_AUDIOSINK;
break;
default:
break;
}
new_string = g_settings_get_string (sink->settings, key);
if (new_string != NULL && sink->gsettings_str != NULL &&
(strlen (new_string) == 0 ||
strcmp (sink->gsettings_str, new_string) == 0)) {
g_free (new_string);
GST_DEBUG_OBJECT (sink,
"GSettings key was updated, but it didn't change. Ignoring");
GST_OBJECT_UNLOCK (sink);
return TRUE;
}
GST_OBJECT_UNLOCK (sink);
GST_DEBUG_OBJECT (sink, "GSettings key changed from '%s' to '%s'",
GST_STR_NULL (sink->gsettings_str), GST_STR_NULL (new_string));
if (new_string) {
new_kid = gst_parse_bin_from_description (new_string, TRUE, &err);
if (err) {
GST_ERROR_OBJECT (sink, "error creating bin '%s': %s", new_string,
err->message);
g_error_free (err);
}
} else {
new_kid = NULL;
}
if (new_kid == NULL) {
GST_ELEMENT_ERROR (sink, LIBRARY, SETTINGS, (NULL),
("Failed to render audio sink from GSettings"));
goto fail;
}
if (!gst_switch_sink_set_child (GST_SWITCH_SINK (sink), new_kid)) {
GST_WARNING_OBJECT (sink, "Failed to update child element");
goto fail;
}
g_free (sink->gsettings_str);
sink->gsettings_str = new_string;
return TRUE;
fail:
g_free (new_string);
return FALSE;
}
示例9: gst_pulsesrc_open
static gboolean
gst_pulsesrc_open (GstAudioSrc * asrc)
{
GstPulseSrc *pulsesrc = GST_PULSESRC_CAST (asrc);
gchar *name = gst_pulse_client_name ();
pa_threaded_mainloop_lock (pulsesrc->mainloop);
g_assert (!pulsesrc->context);
g_assert (!pulsesrc->stream);
GST_DEBUG_OBJECT (pulsesrc, "opening device");
if (!(pulsesrc->context =
pa_context_new (pa_threaded_mainloop_get_api (pulsesrc->mainloop),
name))) {
GST_ELEMENT_ERROR (pulsesrc, RESOURCE, FAILED, ("Failed to create context"),
(NULL));
goto unlock_and_fail;
}
pa_context_set_state_callback (pulsesrc->context,
gst_pulsesrc_context_state_cb, pulsesrc);
GST_DEBUG_OBJECT (pulsesrc, "connect to server %s",
GST_STR_NULL (pulsesrc->server));
if (pa_context_connect (pulsesrc->context, pulsesrc->server, 0, NULL) < 0) {
GST_ELEMENT_ERROR (pulsesrc, RESOURCE, FAILED, ("Failed to connect: %s",
pa_strerror (pa_context_errno (pulsesrc->context))), (NULL));
goto unlock_and_fail;
}
for (;;) {
pa_context_state_t state;
state = pa_context_get_state (pulsesrc->context);
if (!PA_CONTEXT_IS_GOOD (state)) {
GST_ELEMENT_ERROR (pulsesrc, RESOURCE, FAILED, ("Failed to connect: %s",
pa_strerror (pa_context_errno (pulsesrc->context))), (NULL));
goto unlock_and_fail;
}
if (state == PA_CONTEXT_READY)
break;
/* Wait until the context is ready */
pa_threaded_mainloop_wait (pulsesrc->mainloop);
}
GST_DEBUG_OBJECT (pulsesrc, "connected");
pa_threaded_mainloop_unlock (pulsesrc->mainloop);
g_free (name);
return TRUE;
/* ERRORS */
unlock_and_fail:
{
gst_pulsesrc_destroy_context (pulsesrc);
pa_threaded_mainloop_unlock (pulsesrc->mainloop);
g_free (name);
return FALSE;
}
}
示例10: gst_jack_audio_make_connection
/* make a connection with @id and @server. Returns NULL on failure with the
* status set. */
static GstJackAudioConnection *
gst_jack_audio_make_connection (const gchar * id, const gchar * server,
jack_client_t * jclient, jack_status_t * status)
{
GstJackAudioConnection *conn;
jack_options_t options;
gint res;
*status = 0;
GST_DEBUG ("new client %s, connecting to server %s", id,
GST_STR_NULL (server));
/* never start a server */
options = JackNoStartServer;
/* if we have a servername, use it */
if (server != NULL)
options |= JackServerName;
/* open the client */
if (jclient == NULL)
jclient = jack_client_open (id, options, status, server);
if (jclient == NULL)
goto could_not_open;
/* now create object */
conn = g_new (GstJackAudioConnection, 1);
conn->refcount = 1;
g_mutex_init (&conn->lock);
g_cond_init (&conn->flush_cond);
conn->id = g_strdup (id);
conn->server = g_strdup (server);
conn->client = jclient;
conn->n_clients = 0;
conn->src_clients = NULL;
conn->sink_clients = NULL;
conn->cur_ts = -1;
conn->transport_state = GST_STATE_VOID_PENDING;
/* set our callbacks */
jack_set_process_callback (jclient, jack_process_cb, conn);
/* these callbacks cause us to error */
jack_set_buffer_size_callback (jclient, jack_buffer_size_cb, conn);
jack_set_sample_rate_callback (jclient, jack_sample_rate_cb, conn);
jack_on_shutdown (jclient, jack_shutdown_cb, conn);
/* all callbacks are set, activate the client */
GST_INFO ("activate jack_client %p", jclient);
if ((res = jack_activate (jclient)))
goto could_not_activate;
GST_DEBUG ("opened connection %p", conn);
return conn;
/* ERRORS */
could_not_open:
{
GST_DEBUG ("failed to open jack client, %d", *status);
return NULL;
}
could_not_activate:
{
GST_ERROR ("Could not activate client (%d)", res);
*status = JackFailure;
g_mutex_clear (&conn->lock);
g_free (conn->id);
g_free (conn->server);
g_free (conn);
return NULL;
}
}
示例11: main
int
main (int argc, char **argv)
{
GstBus *bus;
GOptionContext *ctx;
GIOChannel *io_stdin;
GError *err = NULL;
gboolean res;
GOptionEntry options[] = {
{NULL}
};
GThread *rthread;
/* Clear application state */
memset (state, 0, sizeof (*state));
state->animate = TRUE;
/* must initialise the threading system before using any other GLib funtion */
if (!g_thread_supported ())
g_thread_init (NULL);
ctx = g_option_context_new ("[ADDITIONAL ARGUMENTS]");
g_option_context_add_main_entries (ctx, options, NULL);
g_option_context_add_group (ctx, gst_init_get_option_group ());
if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Error initializing: %s\n", GST_STR_NULL (err->message));
exit (1);
}
g_option_context_free (ctx);
if (argc != 2) {
g_print ("Usage: %s <URI> or <PIPELINE-DESCRIPTION>\n", argv[0]);
exit (1);
}
/* Initialize GStreamer */
gst_init (&argc, &argv);
/* initialize inter thread comunnication */
init_intercom (state);
TRACE_VC_MEMORY ("state 0");
if (!(rthread = g_thread_new ("render", (GThreadFunc) render_func, NULL))) {
g_print ("Render thread create failed\n");
exit (1);
}
/* Initialize player */
if (gst_uri_is_valid (argv[1])) {
res = init_playbin_player (state, argv[1]);
} else {
res = init_parse_launch_player (state, argv[1]);
}
if (!res)
goto done;
/* Create a GLib Main Loop and set it to run */
state->main_loop = g_main_loop_new (NULL, FALSE);
/* Add a keyboard watch so we get notified of keystrokes */
io_stdin = g_io_channel_unix_new (fileno (stdin));
g_io_add_watch (io_stdin, G_IO_IN, (GIOFunc) handle_keyboard, state);
g_io_channel_unref (io_stdin);
/* *INDENT-OFF* */
g_print ("Available commands: \n"
" a - Toggle animation \n"
" p - Pause playback \n"
" r - Resume playback \n"
" l - Query position/duration\n"
" f - Seek 30 seconds forward \n"
" b - Seek 30 seconds backward \n"
" q - Quit \n");
/* *INDENT-ON* */
/* Connect the bus handlers */
bus = gst_element_get_bus (state->pipeline);
gst_bus_set_sync_handler (bus, (GstBusSyncHandler) bus_sync_handler, state,
NULL);
gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
gst_bus_enable_sync_message_emission (bus);
g_signal_connect (G_OBJECT (bus), "message::error", (GCallback) error_cb,
state);
g_signal_connect (G_OBJECT (bus), "message::buffering",
(GCallback) buffering_cb, state);
g_signal_connect (G_OBJECT (bus), "message::eos", (GCallback) eos_cb, state);
g_signal_connect (G_OBJECT (bus), "message::qos", (GCallback) qos_cb, state);
g_signal_connect (G_OBJECT (bus), "message::state-changed",
(GCallback) state_changed_cb, state);
gst_object_unref (bus);
/* Make player start playing */
gst_element_set_state (state->pipeline, GST_STATE_PLAYING);
/* Start the mainloop */
//.........这里部分代码省略.........
示例12: gst_rtp_L16_depay_setcaps
static gboolean
gst_rtp_L16_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps)
{
GstStructure *structure;
GstRtpL16Depay *rtpL16depay;
gint clock_rate, payload;
gint channels;
GstCaps *srccaps;
gboolean res;
const gchar *channel_order;
const GstRTPChannelOrder *order;
GstAudioInfo *info;
rtpL16depay = GST_RTP_L16_DEPAY (depayload);
structure = gst_caps_get_structure (caps, 0);
payload = 96;
gst_structure_get_int (structure, "payload", &payload);
switch (payload) {
case GST_RTP_PAYLOAD_L16_STEREO:
channels = 2;
clock_rate = 44100;
break;
case GST_RTP_PAYLOAD_L16_MONO:
channels = 1;
clock_rate = 44100;
break;
default:
/* no fixed mapping, we need clock-rate */
channels = 0;
clock_rate = 0;
break;
}
/* caps can overwrite defaults */
clock_rate =
gst_rtp_L16_depay_parse_int (structure, "clock-rate", clock_rate);
if (clock_rate == 0)
goto no_clockrate;
channels =
gst_rtp_L16_depay_parse_int (structure, "encoding-params", channels);
if (channels == 0) {
channels = gst_rtp_L16_depay_parse_int (structure, "channels", channels);
if (channels == 0) {
/* channels defaults to 1 otherwise */
channels = 1;
}
}
depayload->clock_rate = clock_rate;
info = &rtpL16depay->info;
gst_audio_info_init (info);
info->finfo = gst_audio_format_get_info (GST_AUDIO_FORMAT_S16BE);
info->rate = clock_rate;
info->channels = channels;
info->bpf = (info->finfo->width / 8) * channels;
/* add channel positions */
channel_order = gst_structure_get_string (structure, "channel-order");
order = gst_rtp_channels_get_by_order (channels, channel_order);
rtpL16depay->order = order;
if (order) {
memcpy (info->position, order->pos,
sizeof (GstAudioChannelPosition) * channels);
gst_audio_channel_positions_to_valid_order (info->position, info->channels);
} else {
GST_ELEMENT_WARNING (rtpL16depay, STREAM, DECODE,
(NULL), ("Unknown channel order '%s' for %d channels",
GST_STR_NULL (channel_order), channels));
/* create default NONE layout */
gst_rtp_channels_create_default (channels, info->position);
}
srccaps = gst_audio_info_to_caps (info);
res = gst_pad_set_caps (depayload->srcpad, srccaps);
gst_caps_unref (srccaps);
return res;
/* ERRORS */
no_clockrate:
{
GST_ERROR_OBJECT (depayload, "no clock-rate specified");
return FALSE;
}
}
示例13: gst_amc_audio_dec_set_format
//.........这里部分代码省略.........
GstBuffer *codec_data = gst_value_get_buffer (h);
GstMapInfo minfo;
guint8 *data;
gst_buffer_map (codec_data, &minfo, GST_MAP_READ);
data = g_memdup (minfo.data, minfo.size);
self->codec_datas = g_list_prepend (self->codec_datas, data);
gst_amc_format_set_buffer (format, "csd-0", data, minfo.size, &err);
if (err)
GST_ELEMENT_WARNING_FROM_ERROR (self, err);
gst_buffer_unmap (codec_data, &minfo);
} else if (gst_structure_has_field (s, "streamheader")) {
const GValue *sh = gst_structure_get_value (s, "streamheader");
gint nsheaders = gst_value_array_get_size (sh);
GstBuffer *buf;
const GValue *h;
gint i, j;
gchar *fname;
GstMapInfo minfo;
guint8 *data;
for (i = 0, j = 0; i < nsheaders; i++) {
h = gst_value_array_get_value (sh, i);
buf = gst_value_get_buffer (h);
if (strcmp (mime, "audio/vorbis") == 0) {
guint8 header_type;
gst_buffer_extract (buf, 0, &header_type, 1);
/* Only use the identification and setup packets */
if (header_type != 0x01 && header_type != 0x05)
continue;
}
fname = g_strdup_printf ("csd-%d", j);
gst_buffer_map (buf, &minfo, GST_MAP_READ);
data = g_memdup (minfo.data, minfo.size);
self->codec_datas = g_list_prepend (self->codec_datas, data);
gst_amc_format_set_buffer (format, fname, data, minfo.size, &err);
if (err)
GST_ELEMENT_WARNING_FROM_ERROR (self, err);
gst_buffer_unmap (buf, &minfo);
g_free (fname);
j++;
}
}
format_string = gst_amc_format_to_string (format, &err);
if (err)
GST_ELEMENT_WARNING_FROM_ERROR (self, err);
GST_DEBUG_OBJECT (self, "Configuring codec with format: %s",
GST_STR_NULL (format_string));
g_free (format_string);
if (!gst_amc_codec_configure (self->codec, format, 0, &err)) {
GST_ERROR_OBJECT (self, "Failed to configure codec");
GST_ELEMENT_ERROR_FROM_ERROR (self, err);
return FALSE;
}
gst_amc_format_free (format);
if (!gst_amc_codec_start (self->codec, &err)) {
GST_ERROR_OBJECT (self, "Failed to start codec");
GST_ELEMENT_ERROR_FROM_ERROR (self, err);
return FALSE;
}
self->spf = -1;
/* TODO: Implement for other codecs too */
if (gst_structure_has_name (s, "audio/mpeg")) {
gint mpegversion = -1;
gst_structure_get_int (s, "mpegversion", &mpegversion);
if (mpegversion == 1) {
gint layer = -1, mpegaudioversion = -1;
gst_structure_get_int (s, "layer", &layer);
gst_structure_get_int (s, "mpegaudioversion", &mpegaudioversion);
if (layer == 1)
self->spf = 384;
else if (layer == 2)
self->spf = 1152;
else if (layer == 3 && mpegaudioversion != -1)
self->spf = (mpegaudioversion == 1 ? 1152 : 576);
}
}
self->started = TRUE;
self->input_caps_changed = TRUE;
/* Start the srcpad loop again */
self->flushing = FALSE;
self->downstream_flow_ret = GST_FLOW_OK;
gst_pad_start_task (GST_AUDIO_DECODER_SRC_PAD (self),
(GstTaskFunction) gst_amc_audio_dec_loop, decoder, NULL);
return TRUE;
}
示例14: gst_sunaudiomixer_options_new
GstMixerOptions *
gst_sunaudiomixer_options_new (GstSunAudioMixerCtrl * mixer, gint track_num)
{
GstMixerOptions *opts;
GstSunAudioMixerOptions *sun_opts;
GstMixerTrack *track;
const gchar *label;
gint i;
struct audio_info audioinfo;
if ((mixer == NULL) || (mixer->mixer_fd == -1)) {
g_warning ("mixer not initialized");
return NULL;
}
if (track_num != GST_SUNAUDIO_TRACK_RECSRC) {
g_warning ("invalid options track");
return (NULL);
}
label = N_("Record Source");
opts = g_object_new (GST_TYPE_SUNAUDIO_MIXER_OPTIONS,
"untranslated-label", label, NULL);
sun_opts = GST_SUNAUDIO_MIXER_OPTIONS (opts);
track = GST_MIXER_TRACK (opts);
GST_DEBUG_OBJECT (opts, "New mixer options, track %d: %s",
track_num, GST_STR_NULL (label));
/* save off names for the record sources */
sun_opts->names[0] = g_quark_from_string (_("Microphone"));
sun_opts->names[1] = g_quark_from_string (_("Line In"));
sun_opts->names[2] = g_quark_from_string (_("Internal CD"));
sun_opts->names[3] = g_quark_from_string (_("SPDIF In"));
sun_opts->names[4] = g_quark_from_string (_("AUX 1 In"));
sun_opts->names[5] = g_quark_from_string (_("AUX 2 In"));
sun_opts->names[6] = g_quark_from_string (_("Codec Loopback"));
sun_opts->names[7] = g_quark_from_string (_("SunVTS Loopback"));
/* set basic information */
track->label = g_strdup (_(label));
track->num_channels = 0;
track->min_volume = 0;
track->max_volume = 0;
track->flags =
GST_MIXER_TRACK_INPUT | GST_MIXER_TRACK_WHITELIST |
GST_MIXER_TRACK_NO_RECORD;
if (ioctl (mixer->mixer_fd, AUDIO_GETINFO, &audioinfo) < 0) {
g_warning ("Error getting audio device settings");
g_object_unref (G_OBJECT (sun_opts));
return NULL;
}
sun_opts->avail = audioinfo.record.avail_ports;
sun_opts->track_num = track_num;
for (i = 0; i < 8; i++) {
if ((1 << i) & audioinfo.record.avail_ports) {
const char *s = g_quark_to_string (sun_opts->names[i]);
opts->values = g_list_append (opts->values, g_strdup (s));
GST_DEBUG_OBJECT (opts, "option for track %d: %s",
track_num, GST_STR_NULL (s));
}
}
return opts;
}
示例15: event_loop
/* returns TRUE if there was an error or we caught a keyboard interrupt. */
static gboolean
event_loop (GstElement * pipeline, gboolean blocking, GstState target_state)
{
GstBus *bus;
GstMessage *message = NULL;
gboolean res = FALSE;
gboolean buffering = FALSE;
bus = gst_element_get_bus (GST_ELEMENT (pipeline));
#ifndef DISABLE_FAULT_HANDLER
g_timeout_add (50, (GSourceFunc) check_intr, pipeline);
#endif
while (TRUE) {
message = gst_bus_poll (bus, GST_MESSAGE_ANY, blocking ? -1 : 0);
/* if the poll timed out, only when !blocking */
if (message == NULL)
goto exit;
switch (GST_MESSAGE_TYPE (message)) {
case GST_MESSAGE_NEW_CLOCK:
{
GstClock *clock;
gst_message_parse_new_clock (message, &clock);
g_print ("New clock: %s\n", (clock ? GST_OBJECT_NAME (clock) : "NULL"));
break;
}
case GST_MESSAGE_EOS:
g_print ("Got EOS from element \"%s\".\n",
GST_STR_NULL (GST_ELEMENT_NAME (GST_MESSAGE_SRC (message))));
goto exit;
case GST_MESSAGE_TAG:
if (tags) {
GstTagList *tags;
gst_message_parse_tag (message, &tags);
g_print ("FOUND TAG : found by element \"%s\".\n",
GST_STR_NULL (GST_ELEMENT_NAME (GST_MESSAGE_SRC (message))));
gst_tag_list_foreach (tags, print_tag, NULL);
gst_tag_list_free (tags);
}
break;
case GST_MESSAGE_INFO:{
GError *gerror;
gchar *debug;
gchar *name = gst_object_get_path_string (GST_MESSAGE_SRC (message));
gst_message_parse_info (message, &gerror, &debug);
if (debug) {
g_print ("INFO:\n%s\n", debug);
}
g_error_free (gerror);
g_free (debug);
g_free (name);
break;
}
case GST_MESSAGE_WARNING:{
GError *gerror;
gchar *debug;
gchar *name = gst_object_get_path_string (GST_MESSAGE_SRC (message));
/* dump graph on warning */
GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (pipeline),
GST_DEBUG_GRAPH_SHOW_ALL, "gst-launch.warning");
gst_message_parse_warning (message, &gerror, &debug);
g_print ("WARNING: from element %s: %s\n", name, gerror->message);
if (debug) {
g_print ("Additional debug info:\n%s\n", debug);
}
g_error_free (gerror);
g_free (debug);
g_free (name);
break;
}
case GST_MESSAGE_ERROR:{
GError *gerror;
gchar *debug;
/* dump graph on error */
GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (pipeline),
GST_DEBUG_GRAPH_SHOW_ALL, "gst-launch.error");
gst_message_parse_error (message, &gerror, &debug);
gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
g_error_free (gerror);
g_free (debug);
/* we have an error */
res = TRUE;
goto exit;
}
case GST_MESSAGE_STATE_CHANGED:{
GstState old, newX, pending;
gst_message_parse_state_changed (message, &old, &newX, &pending);
//.........这里部分代码省略.........