Advertisement
MohammadAG

Untitled

Mar 16th, 2011
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.80 KB | None | 0 0
  1. #include "mafwrendereradapter.h"
  2.  
  3. MafwRendererAdapter::MafwRendererAdapter()
  4. {
  5.     this->mafw_renderer = NULL;
  6.     //memset(&GVolume, 0, sizeof(GVolume));
  7.     GVolume = NULL;
  8.     g_value_init (GVolume, G_TYPE_UINT);
  9.     g_warning("start\n");
  10.     mafw_registry = MAFW_REGISTRY(mafw_registry_get_instance());
  11.     mafw_shared_init(mafw_registry, NULL);
  12.     findRenderer();
  13.     connectRegistrySignals();
  14. }
  15.  
  16. void MafwRendererAdapter::findRenderer()
  17. {
  18.     if(mafw_registry)
  19.     {
  20.         GList* renderer_list = mafw_registry_get_renderers(mafw_registry);
  21.         if(renderer_list)
  22.         {
  23.  
  24.             GList* renderer_elem = renderer_list;
  25.             while(renderer_elem)
  26.             {
  27.                 MafwRenderer* mafw_renderer = MAFW_RENDERER(renderer_elem->data);
  28.                 g_warning("renderer: %s\n", mafw_extension_get_name(MAFW_EXTENSION(mafw_renderer)));
  29.  
  30.                 if(g_strcmp0(mafw_extension_get_name(MAFW_EXTENSION(mafw_renderer)),MEDIAPLAYER_RENDERER) == 0)
  31.                 {
  32.                     g_object_ref(mafw_renderer);
  33.                     this->mafw_renderer = mafw_renderer;
  34.                     connectRendererSignals();
  35.                     emit rendererReady();
  36.                 }
  37.             }
  38.         }
  39.         else
  40.         {
  41.             g_warning("no renderer\n");
  42.         }
  43.     }
  44.     else
  45.     {
  46.         g_warning("no rgistry\n");
  47.     }
  48. }
  49.  
  50. void MafwRendererAdapter::connectRegistrySignals()
  51. {
  52.     g_signal_connect(mafw_registry,
  53.                      "renderer_added",
  54.                      G_CALLBACK(&onRendererAdded),
  55.                      static_cast<void*>(this));
  56.  
  57.     g_signal_connect(mafw_registry,
  58.                      "renderer_removed",
  59.                      G_CALLBACK(&onRendererRemoved),
  60.                      static_cast<void*>(this));
  61. }
  62.  
  63. void MafwRendererAdapter::connectRendererSignals()
  64. {
  65. #ifdef DEBUG
  66.     qDebug() << "connect renderer signals";
  67. #endif
  68.     g_signal_connect(mafw_renderer,
  69.                      "buffering-info",
  70.                      G_CALLBACK(&onBufferingInfo),
  71.                      static_cast<void*>(this));
  72.     g_signal_connect(mafw_renderer,
  73.                      "media-changed",
  74.                      G_CALLBACK(&onMediaChanged),
  75.                      static_cast<void*>(this));
  76.     g_signal_connect(mafw_renderer,
  77.                      "metadata-changed",
  78.                      G_CALLBACK(&onMetadataChanged),
  79.                      static_cast<void*>(this));
  80.     g_signal_connect(mafw_renderer,
  81.                      "playlist-changed",
  82.                      G_CALLBACK(&onPlaylistChanged),
  83.                      static_cast<void*>(this));
  84.     g_signal_connect(mafw_renderer,
  85.                      "state-changed",
  86.                      G_CALLBACK(&onStateChanged),
  87.                      static_cast<void*>(this));
  88. }
  89.  
  90. void MafwRendererAdapter::disconnectRendererSignals()
  91. {
  92.  
  93. }
  94.  
  95. void MafwRendererAdapter::onRendererAdded(MafwRegistry*,
  96.                                           GObject* renderer,
  97.                                           gpointer user_data)
  98. {
  99.     if(g_strcmp0(mafw_extension_get_name(MAFW_EXTENSION(renderer)), MEDIAPLAYER_RENDERER) == 0)
  100.     {
  101.         g_object_ref(renderer);
  102.         static_cast<MafwRendererAdapter*>(user_data)->mafw_renderer = MAFW_RENDERER(renderer);
  103.         static_cast<MafwRendererAdapter*>(user_data)->connectRendererSignals();
  104.     }
  105. }
  106.  
  107.  
  108. void MafwRendererAdapter::onRendererRemoved(MafwRegistry*,
  109.                                             GObject* renderer,
  110.                                             gpointer user_data)
  111. {
  112.     if(g_strcmp0(mafw_extension_get_name(MAFW_EXTENSION(renderer)), MEDIAPLAYER_RENDERER) == 0)
  113.     {
  114.         g_object_unref(renderer);
  115.         static_cast<MafwRendererAdapter*>(user_data)->mafw_renderer = MAFW_RENDERER(renderer);
  116.         static_cast<MafwRendererAdapter*>(user_data)->disconnectRendererSignals();
  117.     }
  118. }
  119.  
  120. void MafwRendererAdapter::onBufferingInfo(MafwRenderer*,
  121.                                           gfloat status,
  122.                                           gpointer user_data)
  123. {
  124. #ifdef DEBUG
  125.     qDebug() << "On buffering info";
  126. #endif
  127.     emit static_cast<MafwRendererAdapter*>(user_data)->bufferingInfo(status);
  128. }
  129.  
  130. void MafwRendererAdapter::onMediaChanged(MafwRenderer*,
  131.                                          gint index,
  132.                                          gchar* object_id,
  133.                                          gpointer user_data)
  134. {
  135. #ifdef DEBUG
  136.     qDebug() << "On media changed";
  137. #endif
  138.     emit static_cast<MafwRendererAdapter*>(user_data)->mediaChanged(index, object_id);
  139. }
  140.  
  141. void MafwRendererAdapter::onMetadataChanged(MafwRenderer*,
  142.                                             gchar* name,
  143.                                             GValueArray* value,
  144.                                             gpointer user_data)
  145. {
  146. #ifdef DEBUG
  147.     qDebug() << "On Metadata Changed" << name;
  148. #endif
  149.     if(strcmp(name, "is-seekable"))
  150.         emit static_cast<MafwRendererAdapter*>(user_data)->mediaIsSeekable(true);
  151.     if(value->n_values == 1)
  152.     {
  153.         GValue* v = g_value_array_get_nth(value, 0);
  154.         switch(G_VALUE_TYPE(v))
  155.         {
  156.         case G_TYPE_STRING:
  157.             {
  158.                 const gchar* str_value = g_value_get_string(v);
  159.                 QVariant data = QVariant(str_value);
  160. #ifdef DEBUG
  161.                 qDebug() << "string: " << data.toString();
  162. #endif
  163.                 emit static_cast<MafwRendererAdapter*>(user_data)->metadataChanged(QString(name), data);
  164.             }
  165.             break;
  166.         case G_TYPE_INT:
  167.             int int_value = g_value_get_int(v);
  168.             QVariant data = QVariant(int_value);
  169. #ifdef DEBUG
  170.             qDebug() << "int: " << QString::number(data.toInt());
  171. #endif
  172.             emit static_cast<MafwRendererAdapter*>(user_data)->metadataChanged(QString(name), data);
  173.             break;
  174.         }
  175.     }
  176. }
  177.  
  178. void MafwRendererAdapter::onPlaylistChanged(MafwRenderer*,
  179.                                             GObject* playlist,
  180.                                             gpointer user_data)
  181. {
  182. #ifdef DEBUG
  183.     qDebug() << "On playlist changed";
  184. #endif
  185.     emit static_cast<MafwRendererAdapter*>(user_data)->playlistChanged(playlist);
  186. }
  187.  
  188. void MafwRendererAdapter::onStateChanged(MafwRenderer*,
  189.                                          gint state,
  190.                                          gpointer user_data)
  191. {
  192. #ifdef DEBUG
  193.     qDebug() << "On state changed";
  194. #endif
  195.     emit static_cast<MafwRendererAdapter*>(user_data)->stateChanged(state);
  196. }
  197.  
  198. void MafwRendererAdapter::play()
  199. {
  200.     if(mafw_renderer)
  201.     {
  202.         mafw_renderer_play(mafw_renderer, MafwRendererSignalHelper::play_playback_cb, this);
  203.     }
  204. }
  205.  
  206. void MafwRendererAdapter::playObject(const gchar* object_id)
  207. {
  208.     if(mafw_renderer)
  209.     {
  210.         mafw_renderer_play_object(mafw_renderer, object_id, MafwRendererSignalHelper::play_object_playback_cb, this);
  211.     }
  212. }
  213.  
  214. void MafwRendererAdapter::playURI(const gchar* uri)
  215. {
  216.     if(mafw_renderer)
  217.     {
  218.         mafw_renderer_play_uri(mafw_renderer, uri, MafwRendererSignalHelper::play_uri_playback_cb, this);
  219.     }
  220. }
  221.  
  222. void MafwRendererAdapter::stop()
  223. {
  224.     if(mafw_renderer)
  225.     {
  226.         mafw_renderer_stop(mafw_renderer, MafwRendererSignalHelper::stop_playback_cb, this);
  227.     }
  228. }
  229.  
  230.  
  231. void MafwRendererAdapter::pause()
  232. {
  233.     if(mafw_renderer)
  234.     {
  235.         mafw_renderer_pause(mafw_renderer, MafwRendererSignalHelper::pause_playback_cb, this);
  236.     }
  237. }
  238.  
  239. void MafwRendererAdapter::resume()
  240. {
  241.     if(mafw_renderer)
  242.     {
  243.         mafw_renderer_resume(mafw_renderer, MafwRendererSignalHelper::resume_playback_cb, this);
  244.     }
  245. }
  246.  
  247. void MafwRendererAdapter::getStatus()
  248. {
  249.     if(mafw_renderer)
  250.     {
  251.         mafw_renderer_get_status(mafw_renderer, MafwRendererSignalHelper::get_status_cb, this);
  252.     }
  253. }
  254.  
  255. void MafwRendererAdapter::next()
  256. {
  257.     if(mafw_renderer)
  258.     {
  259.         mafw_renderer_next(mafw_renderer, MafwRendererSignalHelper::next_playback_cb, this);
  260.     }
  261. }
  262.  
  263. void MafwRendererAdapter::previous()
  264. {
  265.     if(mafw_renderer)
  266.     {
  267.         mafw_renderer_previous(mafw_renderer, MafwRendererSignalHelper::previous_playback_cb, this);
  268.     }
  269. }
  270.  
  271. void MafwRendererAdapter::gotoIndex(uint index)
  272. {
  273.     if(mafw_renderer)
  274.     {
  275.         mafw_renderer_goto_index(mafw_renderer, index, MafwRendererSignalHelper::goto_index_playback_cb, this);
  276.     }
  277. }
  278.  
  279. void MafwRendererAdapter::setPosition(MafwRendererSeekMode seekmode,
  280.                                       int seconds)
  281. {
  282.     if(mafw_renderer)
  283.     {
  284.         mafw_renderer_set_position(mafw_renderer, seekmode, seconds, MafwRendererSignalHelper::set_position_cb, this);
  285.     }
  286. }
  287.  
  288. void MafwRendererAdapter::getPosition()
  289. {
  290.     if(mafw_renderer)
  291.     {
  292.         mafw_renderer_get_position(mafw_renderer, MafwRendererSignalHelper::get_position_cb, this);
  293.     }
  294. }
  295.  
  296. void MafwRendererAdapter::getCurrentMetadata()
  297. {
  298.     if(mafw_renderer)
  299.     {
  300.         mafw_renderer_get_current_metadata(mafw_renderer, MafwRendererSignalHelper::get_current_metadata_cb, this);
  301.     }
  302. }
  303.  
  304. bool MafwRendererAdapter::assignPlaylist(MafwPlaylist* playlist)
  305. {
  306.     if(mafw_renderer)
  307.     {
  308.         return mafw_renderer_assign_playlist(mafw_renderer, playlist, NULL);
  309.     }
  310.     return false;
  311. }
  312.  
  313. void MafwRendererAdapter::setVolume(int volume)
  314. {
  315.     if(mafw_renderer)
  316.     {
  317.         g_value_set_uint (GVolume, volume);
  318.         mafw_extension_set_property(MAFW_EXTENSION(this->mafw_renderer), MAFW_PROPERTY_RENDERER_VOLUME, GVolume);
  319.     }
  320. }
  321.  
  322. void MafwRendererAdapter::getVolume()
  323. {
  324.     if(mafw_renderer)
  325.     {
  326. #ifdef DEBUG
  327.         qDebug("MafwRendererAdapter::getVolume");
  328. #endif
  329.         mafw_extension_get_property (MAFW_EXTENSION(this->mafw_renderer), MAFW_PROPERTY_RENDERER_VOLUME,
  330.                                      MafwRendererSignalHelper::get_property_cb, this);
  331.     }
  332. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement