Advertisement
Guest User

Untitled

a guest
Sep 28th, 2011
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.02 KB | None | 0 0
  1. #include <QDebug>
  2. #include <QTimer>
  3. #include <stdio.h>
  4. #include "gstaudioplayer.h"
  5.  
  6.  
  7. extern "C"
  8. {
  9. void my_bus_callback(GstBus *bus, GstMessage *msg, gpointer data)
  10. {
  11. /*GList *strinfo;
  12. GstPad vpad;
  13. GstCaps *vcaps;
  14. GstTagList *taglist;
  15. GstAudioPlayer *self = (GstAudioPlayer *) data;
  16. if ()
  17. {
  18. g_object_get(G_OBJECT(gplay), "stream-info", strinfo, NULL);
  19. g_object_get(G_OBJECT(strinfo->data), "caps", caps, NULL);
  20. if (!gst_structure_get_int (str, "fps", &fps))
  21. qDebug() << fps;
  22. }*/
  23. }
  24. void
  25. cb_new_pad (GstElement *element,
  26. GstPad *pad,
  27. gpointer data)
  28. {
  29. gchar *name;
  30.  
  31. name = gst_pad_get_name (pad);
  32. g_print("A new pad %s was created\n", name);
  33. g_free(name);
  34. }
  35. }
  36.  
  37. GstAudioPlayer::GstAudioPlayer() : FilePlayer()
  38. {
  39.  
  40. }
  41.  
  42. bool GstAudioPlayer::init(QStringList opt)
  43. {
  44. GstBus *bus;
  45.  
  46.  
  47. handleOption(opt);
  48. gst_init(0, 0);
  49. gplay = gst_element_factory_make("playbin2", "play");
  50. g_object_set (G_OBJECT (gplay), "flags", "video" , NULL);
  51. /*bus = gst_pipeline_get_bus (GST_PIPELINE (gplay));
  52. gst_bus_add_watch (bus, my_bus_callback, this);*/
  53. return true;
  54. }
  55.  
  56. void GstAudioPlayer::open(QString filename)
  57. {
  58. QString tmp;
  59. tmp = filename;
  60. tmp.prepend("file:");
  61. g_object_set (G_OBJECT (gplay), "uri", tmp.toUtf8().constData(), NULL);
  62. }
  63.  
  64. void GstAudioPlayer::play()
  65. {
  66. GList *strinfo;
  67. GstPad *vpad;
  68. GstCaps *vcaps;
  69. GstTagList *taglist;
  70. GstIterator *gstit;
  71. gpointer *item = NULL;
  72. bool done = false;
  73. int fpsnum;
  74. int fpsden;
  75. int tmp = 0;
  76.  
  77. gst_element_set_state (gplay, GST_STATE_PLAYING);
  78.  
  79. gstit = gst_element_iterate_pads(gplay);
  80. if (gstit == NULL)
  81. qDebug() << "iterator null, fuck Oo";
  82. while (!done)
  83. {
  84. if (gstit == NULL)
  85. break;
  86. qDebug() << "Loop : " << gstit;
  87. switch(gst_iterator_next(gstit, item))
  88. {
  89. case GST_ITERATOR_OK :
  90. qDebug() << "OK";
  91. vpad = GST_PAD(item);
  92. qDebug() << gst_pad_get_name(vpad);
  93. gst_object_unref(item);
  94. break;
  95. case GST_ITERATOR_RESYNC:
  96. qDebug() << "RESYNC";
  97. gst_iterator_resync(gstit);
  98. break;
  99. case GST_ITERATOR_ERROR:
  100. qDebug() << "ERROR";
  101. done = true;
  102. break;
  103. case GST_ITERATOR_DONE :
  104. qDebug() << "DONE";
  105. done = true;
  106. break;
  107. }
  108. }
  109. gst_iterator_free(gstit);
  110. QTimer *timer = new QTimer(this);
  111. connect(timer, SIGNAL(timeout()), this, SLOT(checkFrame()));
  112. timer->start(50);
  113.  
  114. }
  115.  
  116. void GstAudioPlayer::seek(const int step)
  117. {
  118.  
  119. }
  120.  
  121. void GstAudioPlayer::stop()
  122. {
  123. //gst_element_set_state (gplay, GST_STATE_STOPED);
  124. }
  125.  
  126. void GstAudioPlayer::checkFrame()
  127. {
  128. static int framenb = -1;
  129. GstFormat fmt = GST_FORMAT_DEFAULT;
  130. gint64 pos, len;
  131. qDebug() << gst_format_get_name(fmt);
  132.  
  133. if (gst_element_query_position (gplay, &fmt, &pos)
  134. ) {
  135. /*qDebug() << "Time: ";
  136. g_print ("Time: %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT "\r",
  137. GST_TIME_ARGS (pos), GST_TIME_ARGS (len));*/
  138. qDebug() << gst_format_get_name(fmt);
  139. qDebug() << "Plop : " << pos;
  140.  
  141. }
  142. }
  143.  
  144.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement