×
Namespaces

Variants
Actions

Monitoramento do nível do volume no Maemo 5 usando MAFW

From Nokia Developer Wiki
Jump to: navigation, search

Archived.pngAquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.

Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)


Article Metadata

Artigo
Tradução:
Por edprado
Última alteração feita por lpvalente em 06 Dec 2012

Este artigo demonstra como monitorar o volume no Maemo 5 usando o MAFW. O Media Application Framework(MAFW) oferece uma camada aberta, flexível e extensível que facilita o desenvolvimento de aplicações multimedia para a plataforma Maemo. MAFW API.

Você normalmente começa com a obtenção do objeto MafwRegistry e depois carrega o(s) plugin(s):

/* gcc mafw.c -o mafw -g --std=gnu99 -Wall $(pkg-config --libs --cflags mafw glib-2.0) */
 
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libmafw/mafw.h>
 
int main(int agrc, char** argv)
{
g_type_init();
 
MafwRegistry *registry = mafw_registry_get_instance();
 
GError *error = NULL;
if(!mafw_registry_load_plugin(registry, "mafw-gst-renderer", &error)) {
if(error) {
printf("%s\n", error->message);
g_error_free(error);
}
printf("Impossível carregar o plugin mafw_gst_renderer\n");
exit(1);
}
 
GList *renderers = mafw_registry_get_renderers(registry);
print_extensions(renderers);
GList *sources = mafw_registry_get_sources(registry);
print_extensions(sources);
 
GMainLoop *loop = g_main_loop_new (NULL, FALSE);
g_main_loop_run (loop);
 
exit(EXIT_SUCCESS);
}

O próximo passo é explorar as propriedades oferecidas por uma extensão(extension) e ouvir o sinal do "property-changed" (veja que você pode conectar ao "property-changed::volume" se você quer somente monitorar a propriedade "volume"

static void print_extensions(GList *extensions)
{
for(GList *iter = extensions; iter; iter = iter->next) {
MafwExtension* extension = (MafwExtension*)iter->data;
g_signal_connect(extension, "property-changed",
G_CALLBACK(property_changed_cb), NULL);
const gchar *name = mafw_extension_get_name(extension);
const gchar *uuid = mafw_extension_get_uuid(extension);
const gchar *plugin = mafw_extension_get_plugin(extension);
printf("%s[%s]:%s\n", name, uuid, plugin);
const GPtrArray *properties = mafw_extension_list_properties(extension);
for(int i = 0; i < properties->len; i++) {
MafwExtensionProperty *property = properties->pdata[i];
mafw_extension_get_property(extension, property->name,
property_get_cb, NULL);
}
}
}

Callbacks são definidos desta maneira:

static void property_get_cb(MafwExtension *self, const gchar *name,
GValue *value, gpointer udata, const GError *error)
{
if(error) {
printf("%s\n", error->message);
} else {
print_property(name, value);
}
}
 
static void property_changed_cb(MafwExtension *self, const gchar *name,
GValue *value, gpointer udata)
{
print_property(name, value);
}


Imprimindo o valor da propriedade (de acordo com o GValue)

static void print_property(const gchar *name, GValue *value)
{
switch(G_VALUE_TYPE(value)) {
case G_TYPE_UINT:
printf("\t%s[%s] = %u\n", name, G_VALUE_TYPE_NAME(value),
g_value_get_uint(value));
break;
case G_TYPE_INT:
printf("\t%s[%s] = %i\n", name, G_VALUE_TYPE_NAME(value),
g_value_get_int(value));
break;
case G_TYPE_BOOLEAN:
printf("\t%s[%s] = %i\n", name, G_VALUE_TYPE_NAME(value),
g_value_get_boolean(value));
break;
case G_TYPE_STRING:
printf("\t%s[%s] = \"%s\"\n", name, G_VALUE_TYPE_NAME(value),
g_value_get_string(value));
break;
default:
printf("\t%s[%s]\n", name, G_VALUE_TYPE_NAME(value));
break;
}
}

A propriedade de seu interesse é o "volume".

This page was last modified on 6 December 2012, at 22:07.
61 page views in the last 30 days.
×