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 |