events.c
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:5k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*
  2.  * events.c - libvlc smoke test
  3.  *
  4.  * $Id: 68b10e0ab01ed29a6d9595d5069515252ae42bf1 $
  5.  */
  6. /**********************************************************************
  7.  *  Copyright (C) 2007 Rémi Denis-Courmont.                           *
  8.  *  Copyright (C) 2008 Pierre d'Herbemont.                            *
  9.  *  This program is free software; you can redistribute and/or modify *
  10.  *  it under the terms of the GNU General Public License as published *
  11.  *  by the Free Software Foundation; version 2 of the license, or (at *
  12.  *  your option) any later version.                                   *
  13.  *                                                                    *
  14.  *  This program is distributed in the hope that it will be useful,   *
  15.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of    *
  16.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.              *
  17.  *  See the GNU General Public License for more details.              *
  18.  *                                                                    *
  19.  *  You should have received a copy of the GNU General Public License *
  20.  *  along with this program; if not, you can get it from:             *
  21.  *  http://www.gnu.org/copyleft/gpl.html                              *
  22.  **********************************************************************/
  23. #include "test.h"
  24. /* This one is an internal API. We use it here to run tests that
  25.  * don't depends on playback, and only test the event framework */
  26. extern void libvlc_event_send( libvlc_event_manager_t *, libvlc_event_t *);
  27. static void test_events_dummy_callback( const libvlc_event_t * event, void * user_data)
  28. {
  29.     (void)event;
  30.     bool * callback_was_called = user_data;
  31.     *callback_was_called = true;
  32. }
  33. static void test_events_callback_and_detach( const libvlc_event_t * event, void * user_data)
  34. {
  35.     bool * callback_was_called = user_data;
  36.     libvlc_event_manager_t *em;
  37.     em = libvlc_media_player_event_manager (event->p_obj, &ex);
  38.     catch();
  39.     libvlc_event_detach (em, event->type, test_events_callback_and_detach, user_data, &ex);
  40.     *callback_was_called = true;
  41. }
  42. static void test_event_type_reception( libvlc_event_manager_t * em, libvlc_event_type_t event_type, bool * callback_was_called )
  43. {
  44.     libvlc_event_t event;
  45.     event.type = event_type;
  46.     *callback_was_called = false;
  47.     libvlc_event_send (em, &event);
  48.     assert (*callback_was_called);
  49. }
  50. static void test_events (const char ** argv, int argc)
  51. {
  52.     libvlc_instance_t *vlc;
  53.     libvlc_media_player_t *mi;
  54.     libvlc_event_manager_t *em;
  55.     bool callback_was_called;
  56.     libvlc_exception_t ex;
  57.     libvlc_event_type_t mi_events[] = {
  58.         libvlc_MediaPlayerPlaying,
  59.         libvlc_MediaPlayerPaused,
  60.         libvlc_MediaPlayerEndReached,
  61.         libvlc_MediaPlayerEncounteredError,
  62.         libvlc_MediaPlayerTimeChanged,
  63.         libvlc_MediaPlayerPositionChanged,
  64.     };
  65.     int i, mi_events_len = sizeof(mi_events)/sizeof(*mi_events);
  66.     log ("Testing eventsn");
  67.     libvlc_exception_init (&ex);
  68.     vlc = libvlc_new (argc, argv, &ex);
  69.     catch ();
  70.     mi = libvlc_media_player_new (vlc, &ex);
  71.     catch ();
  72.     em = libvlc_media_player_event_manager (mi, &ex);
  73.     log ("+ Testing attaching to Media Instancen");
  74.     for (i = 0; i < mi_events_len; i++) {
  75.         libvlc_event_attach (em, mi_events[i], test_events_dummy_callback, &callback_was_called, &ex);
  76.         catch ();
  77.     }
  78.     log ("+ Testing event receptionn");
  79.     for (i = 0; i < mi_events_len; i++)
  80.         test_event_type_reception (em, mi_events[i], &callback_was_called);
  81.     log ("+ Testing event detaching while in the event callbackn");
  82.     libvlc_event_t event;
  83.     event.type = mi_events[mi_events_len-1];
  84.     callback_was_called = false;
  85.     libvlc_event_detach (em, mi_events[mi_events_len-1], test_events_dummy_callback, &callback_was_called, &ex);
  86.     catch ();
  87.     libvlc_event_attach (em, mi_events[mi_events_len-1], test_events_callback_and_detach, &callback_was_called, &ex);
  88.     catch ();
  89.     libvlc_event_send (em, &event);
  90.     assert( callback_was_called );
  91.     callback_was_called = false;
  92.     libvlc_event_send (em, &event);
  93.     assert( !callback_was_called );
  94.     libvlc_event_detach (em, mi_events[mi_events_len-1], test_events_callback_and_detach, &callback_was_called, &ex);
  95.     catch ();
  96.     log ("+ Testing regular detach()n");
  97.     for (i = 0; i < mi_events_len - 1; i++) {
  98.         libvlc_event_detach (em, mi_events[i], test_events_dummy_callback, &callback_was_called, &ex);
  99.         catch ();
  100.     }
  101.     libvlc_media_player_release (mi);
  102.     catch ();
  103.     libvlc_release (vlc);
  104.     catch ();
  105. }
  106. int main (void)
  107. {
  108.     test_init();
  109.     test_events (test_defaults_args, test_defaults_nargs);
  110.     return 0;
  111. }