All pastes #499482 Raw Edit

Anonymous

public c v1 · immutable
·published 2007-05-21 02:25 UTC
rendered paste body
#include <glib.h>#include <stdio.h>#include <gst/gst.h>#include <assert.h>#include <alp/traces.h>#define ALP_MTL(str, ...) ALP_TM(TL(0, str, ## __VA_ARGS__))static gboolean bus_call(GstBus *bus, GstMessage *msg, gpointer data){    GMainLoop *loop = (GMainLoop *) data;    ALP_MTL("Processing Message: %s", GST_MESSAGE_TYPE_NAME(msg));    switch (GST_MESSAGE_TYPE(msg)) {        case GST_MESSAGE_EOS:            g_main_loop_quit(loop);            ALP_MTL(" End of file");            break;        case GST_MESSAGE_TAG:            //ALP_MTL(" Tag message captured");              break;        case GST_MESSAGE_WARNING:{            gchar *debug;            GError *err;            gst_message_parse_warning(msg, &err, &debug);            g_free(debug);            g_print (" Warning: %s\n", err->message);            break;        }        case GST_MESSAGE_DURATION:{            gint64 *duration=0;            //gst_message_parse_duration(msg, NULL, duration);                ALP_MTL(" duration is %lld\n", duration);            break;        }        case GST_MESSAGE_ERROR: {            gchar *debug;            GError *err;                        gst_message_parse_error (msg, &err, &debug);            g_free (debug);                g_print (" Error: %s", err->message);            g_error_free (err);                g_main_loop_quit (loop);            break;        }            default:            break;    }    return TRUE;}void play_mp3(char *url_mp3){    ALP_MTL(" Playing mp3...\n");    GstElement *src, *decoder, *sink, *pipeline;    GstBus *bus;    GMainLoop *loop;    loop = g_main_loop_new(NULL, FALSE);    pipeline = gst_pipeline_new("mp3player");    if (!pipeline)        ALP_MTL(" error while creating pipeline");    src = gst_element_factory_make("filesrc", "mysrc");    g_object_set(G_OBJECT(src), "location", url_mp3, NULL);    decoder = gst_element_factory_make("oki_mp3_dec", "mydecoder");    sink = gst_element_factory_make("filesink", "mysink");    g_object_set(G_OBJECT(sink), "location", "1.mp3", NULL);        if ((!src) || (!decoder) || (!sink))        ALP_MTL(" error while creating elements\n");    bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));    if (!bus)        ALP_MTL(" error\n");    gst_bus_add_watch(bus, bus_call, loop);    g_object_unref(bus);        gst_bin_add_many(GST_BIN(pipeline), src, decoder, sink, NULL);    if (!gst_element_link_many(src, decoder, sink, NULL))        ALP_MTL(" error while linking elements!");    gst_element_set_state(pipeline, GST_STATE_PLAYING);    g_main_loop_run(loop);    //****************************************************     GstQuery *query;     gboolean res;     query = gst_query_new_duration (GST_FORMAT_TIME);     res = gst_element_query (pipeline, query);     if (res) {       gint64 duration;       gst_query_parse_duration (query, NULL, &duration);       ALP_MTL (" duration = %"GST_TIME_FORMAT, GST_TIME_ARGS (duration));     }     else {       ALP_MTL (" duration query failed...");     }     gst_query_unref (query);    //****************************************************/    gst_element_set_state(pipeline, GST_STATE_NULL);    gst_object_unref(GST_OBJECT(pipeline));}GstElement *audiodec;GstElement *decoder;static void cbnewpad(GstElement *element, GstPad *pad, GstElement *target1){    GstElement *target;    if (strcmp(gst_pad_get_name(pad), "video_00") == 0) {        target = decoder;    }    else        target = audiodec;    GstCaps *cap, *captarget;    cap = gst_pad_get_caps(pad);    GstPad *padtarget;    padtarget = gst_element_get_pad(GST_ELEMENT(target), "sink");    captarget = gst_pad_get_caps(padtarget);    ALP_MTL(" A new pad: %s was created!\n", gst_pad_get_name(pad));    ALP_MTL(" Sink Cap: %s\n", gst_caps_to_string(cap));        ALP_MTL(" Src Cap: %s\n", gst_caps_to_string(captarget));    ALP_MTL(" Linking elements ...");    if (gst_pad_link(pad, padtarget) != GST_PAD_LINK_OK){        ALP_MTL(" Error while linking pad %s and %s", gst_pad_get_name(pad), gst_pad_get_name(padtarget));    }}void play_3gp(gchar *url_3gp){    GstElement *src, *demux,  *sink, *audiosink;//, *decoder;    GstElement *pipeline;    GstBus *bus;    GMainLoop *loop;    ALP_MTL(" Playing 3gp file...");    loop = g_main_loop_new(NULL, FALSE);        pipeline = gst_pipeline_new("3gpplayer");    bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));    gst_bus_add_watch(bus, bus_call, loop);    src = gst_element_factory_make("filesrc", "3gpsrc");    g_object_set(G_OBJECT(src), "location", url_3gp, NULL);        demux = gst_element_factory_make("qtdemux", "3gpdemux");    decoder = gst_element_factory_make("oki_h263_dec", "263decoder");    sink = gst_element_factory_make("fakesink", "vasink");    audiodec = gst_element_factory_make("oki_amrnb_dec", "audiodec");    audiosink = gst_element_factory_make("fakesink", "audiosink");    g_signal_connect(demux, "pad-added", G_CALLBACK(cbnewpad), NULL);    gst_bin_add_many(GST_BIN(pipeline), src, demux, decoder, sink, audiodec, audiosink, NULL);    if (!gst_element_link_many(src, demux, NULL))        ALP_MTL("Error while linking src and demux");    if (!gst_element_link_many(decoder, sink, NULL))        ALP_MTL("Error while linking decoder and sink");    if (!gst_element_link_many(audiodec, audiosink, NULL))        ALP_MTL("Error while linking audiodec and audiosink");        gst_element_set_state(pipeline, GST_STATE_PLAYING);    g_main_loop_run(loop);    //****************************************************     GstQuery *query;     gboolean res;     query = gst_query_new_duration (GST_FORMAT_TIME);     res = gst_element_query (pipeline, query);     if (res) {       gint64 duration;       gst_query_parse_duration (query, NULL, &duration);       ALP_MTL (" duration = %"GST_TIME_FORMAT, GST_TIME_ARGS (duration));     }     else {       ALP_MTL (" duration query failed...");     }     gst_query_unref (query);    //****************************************************/    gst_element_set_state(pipeline, GST_STATE_NULL);    gst_object_unref(GST_OBJECT(pipeline));}int alp_main(int argc, char *argv[]){    gst_init(NULL, NULL);       ALP_MTL("\n************ Codec Test ********************\n");    ALP_MTL(" argc = %d\n", argc);    ALP_MTL(" argv[0] = %s\n", argv[0]);    ALP_MTL(" argv[1] = %s\n", argv[1]);    //play_mp3("/var/opt/alp/bundles/com.access.apps.codec_test/rsc/test.mp3");    play_3gp("/var/opt/alp/bundles/com.access.apps.codec_test/rsc/crazyfrog.3gp");        ALP_MTL("************ Codec Test Exit ***************\n");      return 0;}