internal/gstplayer/src/SymGstreamer.cpp
changeset 16 8e837d1bf446
parent 14 32e421e6175c
equal deleted inserted replaced
15:4b0c6ed43234 16:8e837d1bf446
    31 #include <stdlib.h>
    31 #include <stdlib.h>
    32 #include <mmf/server/sounddevice.h>
    32 #include <mmf/server/sounddevice.h>
    33 
    33 
    34 #include "gstplayerappview.h"
    34 #include "gstplayerappview.h"
    35 
    35 
    36 GstElement *pipeline, *source, *wavparse,*sink,*decoder,*conv,*resample,*record,*fakesink,*filesink,*encoder,*filter,*wavenc;
    36 GstElement *pipeline, *source, *wavparse,*sink,*decoder,*conv,*resample,*record,*fakesink,*filesink,*encoder,*filter,*wavenc, *amrmux, *aacenc, *mp4mux;
    37 GstBus *bus;
    37 GstBus *bus;
    38 GstCaps* caps;
    38 GstCaps* caps;
    39 GstState current,pending;
    39 GstState current,pending;
    40 char carray[1024];
    40 char carray[1024];
    41 
    41 
   314  gst_element_set_state (pipeline, GST_STATE_PLAYING);
   314  gst_element_set_state (pipeline, GST_STATE_PLAYING);
   315 
   315 
   316  return 0;  
   316  return 0;  
   317 }
   317 }
   318  
   318  
   319 
       
   320  int gst_play_wave()
   319  int gst_play_wave()
   321  {
   320  {
   322     /* create elements */
   321     /* create elements */
   323      if(!pipeline)
   322   pipeline = gst_pipeline_new ("pipeline");
   324          {
   323   source = gst_element_factory_make ("filesrc", "pavsrc");
   325          pipeline = gst_pipeline_new ("pipeline");
   324   wavparse = gst_element_factory_make ("wavparse", "parse");
   326          bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
   325  
   327          gst_bus_add_watch (bus, bus_call, NULL);
   326   /* set filename property on the file source */
   328          gst_object_unref (bus);
   327   g_object_set (G_OBJECT (source), "location", carray, NULL);
   329          }
   328   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
   330 
   329   gst_bus_add_watch (bus, bus_call, NULL);
   331      if(!source)
   330   gst_object_unref (bus);
   332          {
   331   gst_bin_add_many (GST_BIN (pipeline), source, wavparse, NULL);
   333          source = gst_element_factory_make ("filesrc", "pavsrc");
   332   if (!gst_element_link (source, wavparse))
   334          g_object_set (G_OBJECT (source), "location", carray, NULL);
   333      g_error ("link(src, wavparse) failed!\n");
   335          gst_bin_add (GST_BIN (pipeline), source);
   334 
   336          }
   335   
   337 
   336   g_signal_connect (wavparse, "pad-added", G_CALLBACK (new_pad_cb),pipeline);
   338      if(!wavparse)
   337     
   339          {
   338   gst_element_set_state (pipeline, GST_STATE_PLAYING); 
   340          wavparse = gst_element_factory_make ("wavparse", "parse");
   339   return 0; 
   341          gst_bin_add (GST_BIN (pipeline), wavparse );
       
   342          g_signal_connect (wavparse, "pad-added", G_CALLBACK (new_pad_cb),pipeline);
       
   343          }
       
   344  
       
   345       /* set filename property on the file source */
       
   346       if (!gst_element_link (source, wavparse))
       
   347           {
       
   348           g_print("could not link elements!");
       
   349           return -1;
       
   350           }
       
   351           
       
   352 
       
   353       gst_element_set_state (pipeline, GST_STATE_PLAYING); 
       
   354       return 0; 
       
   355  }
   340  }
   356  
   341  
   357  int gst_record_wav()
   342  int gst_record_wav()
   358     {
   343     {
       
   344      
       
   345      iGstView->DrawText(_L("Recording Wave"),KRgbBlack);
   359 
   346 
   360     /* create a new bin to hold the elements */
   347     /* create a new bin to hold the elements */
   361     pipeline = gst_pipeline_new("pipeline");
   348     pipeline = gst_pipeline_new("pipeline");
   362 
   349 
   363     record = gst_element_factory_make("devsoundsrc", "record_audio");
   350     record = gst_element_factory_make("devsoundsrc", "record_audio");
   364     if (!record)
   351     if (!record)
   365         {
   352         {
   366         g_print("could not create \"record\" element!");
   353         g_print("could not create \"record\" element!");
   367         return -1;
   354         return -1;
   368         }
   355         }
   369     
   356     //g_object_set (G_OBJECT (record), "num-buffers", 5000 , NULL);
   370     filesink = gst_element_factory_make("filesink", "filesink");
   357     filesink = gst_element_factory_make("filesink", "filesink");
   371     if (!filesink)
   358     if (!filesink)
   372         {
   359         {
   373         g_print("could not create \"filesink\" element!");
   360         g_print("could not create \"filesink\" element!");
   374         return -1;
   361         return -1;
   407               "channels", G_TYPE_INT, 1, NULL);
   394               "channels", G_TYPE_INT, 1, NULL);
   408     
   395     
   409     gst_element_link_filtered (record, wavenc, caps);
   396     gst_element_link_filtered (record, wavenc, caps);
   410     gst_element_link (wavenc, filesink);
   397     gst_element_link (wavenc, filesink);
   411     gst_caps_unref (caps);
   398     gst_caps_unref (caps);
   412 
   399     iGstView->DrawText(_L("pipeline created\n"),KRgbBlack);
   413     /* start recording */
   400     /* start recording */
   414     gst_element_set_state(pipeline, GST_STATE_PLAYING);
   401     gst_element_set_state(pipeline, GST_STATE_PLAYING);
   415 
   402     iGstView->DrawText(_L("set to play wave file\n"),KRgbBlack);
       
   403     return 0;
       
   404     }
       
   405  
       
   406  
       
   407  int gst_record_aac()
       
   408     {
       
   409      GstPad *qtsinkpad,*aacencsrcpad;
       
   410      iGstView->DrawText(_L("Recording aac"),KRgbBlack);
       
   411 
       
   412     /* create a new bin to hold the elements */
       
   413     pipeline = gst_pipeline_new("pipeline");
       
   414 
       
   415     record = gst_element_factory_make("devsoundsrc", "record_audio");
       
   416     if (!record)
       
   417         {
       
   418         g_print("could not create \"record\" element!");
       
   419         return -1;
       
   420         }
       
   421     //g_object_set (G_OBJECT (record), "num-buffers", 5000 , NULL);
       
   422     filesink = gst_element_factory_make("filesink", "filesink");
       
   423     if (!filesink)
       
   424         {
       
   425         g_print("could not create \"filesink\" element!");
       
   426         return -1;
       
   427         }
       
   428 
       
   429     aacenc = gst_element_factory_make("nokiaaacenc", "nokiaaacenc");
       
   430     if (!aacenc)
       
   431         {
       
   432         g_print("could not create \"aacenc\" element!");
       
   433         return -1;
       
   434         }
       
   435     
       
   436     mp4mux = gst_element_factory_make("mp4mux", "mp4mux");
       
   437     if (!mp4mux)
       
   438         {
       
   439         g_print("could not create \"mp4mux\" element!");
       
   440         return -1;
       
   441         }    
       
   442     //name = gst_pad_get_name( sinkpad );    
       
   443 
       
   444     _LIT(KFILENAME,"c:\\data\\test.mp4");
       
   445     TFileName fn;
       
   446     fn.Append(KFILENAME);
       
   447     TInt ret;
       
   448     // char carray[FILENAME];
       
   449     ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
       
   450 
       
   451     g_object_set(G_OBJECT (filesink), "location", carray, NULL);
       
   452     bus = gst_pipeline_get_bus(GST_PIPELINE (pipeline));
       
   453     gst_bus_add_watch(bus, bus_call, NULL);
       
   454     gst_object_unref(bus);
       
   455 
       
   456     /* add objects to the main pipeline */
       
   457     gst_bin_add_many(GST_BIN (pipeline),record,aacenc,mp4mux,filesink, NULL);
       
   458 
       
   459     /* link the elements */
       
   460     //gst_element_link_many(record, aacenc,filesink, NULL);
       
   461     caps = gst_caps_new_simple ("audio/x-raw-int",
       
   462               "width", G_TYPE_INT, 16,
       
   463               "depth", G_TYPE_INT, 16,
       
   464               "signed",G_TYPE_BOOLEAN, TRUE,
       
   465               "endianness",G_TYPE_INT, G_BYTE_ORDER,
       
   466               "rate", G_TYPE_INT, 16000,
       
   467               "channels", G_TYPE_INT, 1, NULL);
       
   468     
       
   469     gst_element_link_filtered (record, aacenc, caps);
       
   470     qtsinkpad  = gst_element_get_request_pad( mp4mux, "audio_%d");
       
   471     aacencsrcpad  = gst_element_get_pad( aacenc, "src");  
       
   472     if (gst_pad_link (aacencsrcpad,qtsinkpad) != GST_PAD_LINK_OK) {
       
   473 
       
   474     g_print("gst_pad_link (aacencsrcpad,qtsinkpad) failed");
       
   475     return -1;
       
   476     }       
       
   477     //gst_element_link (aacenc, filesink);
       
   478     gst_element_link (mp4mux, filesink);
       
   479     gst_caps_unref (caps);
       
   480     iGstView->DrawText(_L("pipeline created\n"),KRgbBlack);
       
   481     /* start recording */
       
   482     gst_element_set_state(pipeline, GST_STATE_PLAYING);
       
   483     iGstView->DrawText(_L("set to play aac file\n"),KRgbBlack);
   416     return 0;
   484     return 0;
   417     }
   485     }
   418  
   486  
   419  int gst_record_amr()
   487  int gst_record_amr()
   420  {
   488  {
   421  iGstView->DrawText(_L("Recording AMR"),KRgbRed);
   489  iGstView->DrawText(_L("Recording AMR-NB"),KRgbRed);
   422 
   490 
   423    /* create a new bin to hold the elements */
   491    /* create a new bin to hold the elements */
   424   pipeline = gst_pipeline_new ("pipeline");
   492   pipeline = gst_pipeline_new ("pipeline");
   425   
   493   
   426   //g_print ("pipeline created");
   494   //g_print ("pipeline created");
   430     g_print ("could not create \"record\" element!");
   498     g_print ("could not create \"record\" element!");
   431     iGstView->DrawText(_L("Devsound src not available"),KRgbRed);
   499     iGstView->DrawText(_L("Devsound src not available"),KRgbRed);
   432     return -1;
   500     return -1;
   433   }
   501   }
   434 
   502 
       
   503             
       
   504       amrmux = gst_element_factory_make ("amrmux", "muxer"); 
       
   505  // encoder = gst_element_factory_make ("wavenc", NULL); 
       
   506   if (!amrmux) {
       
   507     g_print ("could not create \"amrmuxer\" element!");
       
   508     iGstView->DrawText(_L("amrmuxer not available"),KRgbRed);
       
   509     return -1;
       
   510   }
       
   511 
   435   filesink = gst_element_factory_make("filesink", "filesink");
   512   filesink = gst_element_factory_make("filesink", "filesink");
   436       if (!filesink)
   513       if (!filesink)
   437           {
   514           {
   438           g_print("could not create \"filesink\" element!");
   515           g_print("could not create \"filesink\" element!");
   439           return -1;
   516           return -1;
   440           }
   517           }        
   441 
   518 
   442   caps = gst_caps_new_simple ("audio/amr",
   519   caps = gst_caps_new_simple ("audio/amr",
   443              "width", G_TYPE_INT, 8,
   520              "width", G_TYPE_INT, 8,
   444              "depth", G_TYPE_INT, 8,
   521              "depth", G_TYPE_INT, 8,
   445              "signed",G_TYPE_BOOLEAN, TRUE,
   522              "signed",G_TYPE_BOOLEAN, TRUE,
   463   gst_bus_add_watch (bus, bus_call, NULL);
   540   gst_bus_add_watch (bus, bus_call, NULL);
   464   gst_object_unref (bus);
   541   gst_object_unref (bus);
   465   
   542   
   466 
   543 
   467   /* add objects to the main pipeline */
   544   /* add objects to the main pipeline */
   468   gst_bin_add_many(GST_BIN (pipeline),record,filesink , NULL);
   545   gst_bin_add_many(GST_BIN (pipeline),record,amrmux,filesink , NULL);
   469   /* link the elements */
   546   /* link the elements */
   470   gst_element_link_filtered (record, filesink, caps);
   547   gst_element_link_filtered (record, amrmux, caps);
       
   548   
       
   549   gst_element_link( amrmux, filesink );
       
   550   
   471   gst_element_set_state (pipeline, GST_STATE_PLAYING);
   551   gst_element_set_state (pipeline, GST_STATE_PLAYING);
   472   
   552   
   473   return 0;
   553   return 0;
   474  }
   554  }
   475  
   555  
   534    record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
   614    record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
   535    if (!record) {
   615    if (!record) {
   536      g_print ("could not create \"record\" element!");
   616      g_print ("could not create \"record\" element!");
   537      return -1;
   617      return -1;
   538    }
   618    }
   539  
   619 
   540    filesink = gst_element_factory_make("filesink", "filesink");
   620    filesink = gst_element_factory_make("filesink", "filesink");
   541        if (!filesink)
   621        if (!filesink)
   542            {
   622            {
   543            g_print("could not create \"filesink\" element!");
   623            g_print("could not create \"filesink\" element!");
   544            return -1;
   624            return -1;
   640   if (!record) {
   720   if (!record) {
   641     g_print ("could not create \"record\" element!");
   721     g_print ("could not create \"record\" element!");
   642     return -1;
   722     return -1;
   643   }
   723   }
   644   //g_print ("record created");
   724   //g_print ("record created");
   645 
       
   646   filesink = gst_element_factory_make("filesink", "filesink");
   725   filesink = gst_element_factory_make("filesink", "filesink");
   647       if (!filesink)
   726       if (!filesink)
   648           {
   727           {
   649           g_print("could not create \"filesink\" element!");
   728           g_print("could not create \"filesink\" element!");
   650           return -1;
   729           return -1;