Browse Source

test: media_player: move event_ctx to media_player.h and rename to mp_event_ctx

pull/162/head
Thomas Guillem 3 years ago
committed by Jean-Baptiste Kempf
parent
commit
812aa244bd
  1. 3
      test/Makefile.am
  2. 77
      test/libvlc/media_player.c
  3. 73
      test/libvlc/media_player.h
  4. 15
      test/libvlc/media_player_record.c
  5. 46
      test/libvlc/test.h

3
test/Makefile.am

@ -95,7 +95,8 @@ EXTRA_DIST = \
samples/slaves \
$(check_SCRIPTS)
check_HEADERS = libvlc/test.h libvlc/libvlc_additions.h libvlc/media_utils.h
check_HEADERS = libvlc/test.h libvlc/libvlc_additions.h libvlc/media_utils.h \
libvlc/media_player.h
TESTS = $(check_PROGRAMS) check_POTFILES.sh

77
test/libvlc/media_player.c

@ -21,36 +21,37 @@
**********************************************************************/
#include "test.h"
#include "media_player.h"
#include <vlc_common.h>
static void play_and_wait(libvlc_media_player_t *mp)
{
libvlc_event_manager_t *em = libvlc_media_player_event_manager(mp);
struct event_ctx ctx;
event_ctx_init(&ctx);
struct mp_event_ctx ctx;
mp_event_ctx_init(&ctx);
int res;
res = libvlc_event_attach(em, libvlc_MediaPlayerPlaying, event_ctx_on_event, &ctx);
res = libvlc_event_attach(em, libvlc_MediaPlayerPlaying, mp_event_ctx_on_event, &ctx);
assert(!res);
libvlc_media_player_play(mp);
test_log("Waiting for playing\n");
event_ctx_wait(&ctx);
mp_event_ctx_wait(&ctx);
libvlc_event_detach(em, libvlc_MediaPlayerPlaying, event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerPlaying, mp_event_ctx_on_event, &ctx);
}
static void pause_and_wait(libvlc_media_player_t *mp)
{
libvlc_event_manager_t *em = libvlc_media_player_event_manager(mp);
struct event_ctx ctx;
event_ctx_init(&ctx);
struct mp_event_ctx ctx;
mp_event_ctx_init(&ctx);
int res;
res = libvlc_event_attach(em, libvlc_MediaPlayerPaused, event_ctx_on_event, &ctx);
res = libvlc_event_attach(em, libvlc_MediaPlayerPaused, mp_event_ctx_on_event, &ctx);
assert(!res);
assert(libvlc_media_player_get_state(mp) == libvlc_Playing);
@ -58,11 +59,11 @@ static void pause_and_wait(libvlc_media_player_t *mp)
libvlc_media_player_set_pause(mp, true);
test_log("Waiting for pause\n");
event_ctx_wait(&ctx);
mp_event_ctx_wait(&ctx);
assert(libvlc_media_player_get_state(mp) == libvlc_Paused);
libvlc_event_detach(em, libvlc_MediaPlayerPaused, event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerPaused, mp_event_ctx_on_event, &ctx);
}
/* Test a bunch of A/V properties. This most does nothing since the current
@ -312,15 +313,15 @@ static void test_media_player_tracks(const char** argv, int argc)
libvlc_media_track_t *libtrack;
libvlc_event_manager_t *em = libvlc_media_player_event_manager(mp);
struct event_ctx ctx;
event_ctx_init(&ctx);
struct mp_event_ctx ctx;
mp_event_ctx_init(&ctx);
int res;
res = libvlc_event_attach(em, libvlc_MediaPlayerESAdded, event_ctx_on_event, &ctx);
res = libvlc_event_attach(em, libvlc_MediaPlayerESAdded, mp_event_ctx_on_event, &ctx);
assert(!res);
res = libvlc_event_attach(em, libvlc_MediaPlayerESDeleted, event_ctx_on_event, &ctx);
res = libvlc_event_attach(em, libvlc_MediaPlayerESDeleted, mp_event_ctx_on_event, &ctx);
assert(!res);
res = libvlc_event_attach(em, libvlc_MediaPlayerESSelected, event_ctx_on_event, &ctx);
res = libvlc_event_attach(em, libvlc_MediaPlayerESSelected, mp_event_ctx_on_event, &ctx);
assert(!res);
libvlc_media_player_play (mp);
@ -329,7 +330,7 @@ static void test_media_player_tracks(const char** argv, int argc)
* libvlc_media_player_select_tracks_by_ids */
while (!tracks_check_all_events(alltracks, false))
{
const struct libvlc_event_t *ev = event_ctx_wait_event(&ctx);
const struct libvlc_event_t *ev = mp_event_ctx_wait_event(&ctx);
switch (ev->type)
{
case libvlc_MediaPlayerESAdded:
@ -364,7 +365,7 @@ static void test_media_player_tracks(const char** argv, int argc)
assert(!"Event not expected");
}
event_ctx_release(&ctx);
mp_event_ctx_release(&ctx);
}
/* Compare with the tracklists */
@ -441,7 +442,7 @@ static void test_media_player_tracks(const char** argv, int argc)
* changes. */
while (!tracks_check_all_events(alltracks, false))
{
const struct libvlc_event_t *ev = event_ctx_wait_event(&ctx);
const struct libvlc_event_t *ev = mp_event_ctx_wait_event(&ctx);
assert(ev->type == libvlc_MediaPlayerESSelected);
libvlc_track_type_t type = ev->u.media_player_es_selection_changed.i_type;
@ -468,7 +469,7 @@ static void test_media_player_tracks(const char** argv, int argc)
track->selected = true;
}
event_ctx_release(&ctx);
mp_event_ctx_release(&ctx);
}
libvlc_media_player_stop_async (mp);
@ -476,7 +477,7 @@ static void test_media_player_tracks(const char** argv, int argc)
/* Check that all tracks are removed */
while (!tracks_check_all_events(alltracks, true))
{
const struct libvlc_event_t *ev = event_ctx_wait_event(&ctx);
const struct libvlc_event_t *ev = mp_event_ctx_wait_event(&ctx);
if (ev->type == libvlc_MediaPlayerESDeleted)
{
@ -487,12 +488,12 @@ static void test_media_player_tracks(const char** argv, int argc)
assert(track);
track->removed = true;
}
event_ctx_release(&ctx);
mp_event_ctx_release(&ctx);
}
libvlc_event_detach(em, libvlc_MediaPlayerESAdded, event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerESDeleted, event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerESSelected, event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerESAdded, mp_event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerESDeleted, mp_event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerESSelected, mp_event_ctx_on_event, &ctx);
libvlc_media_player_release (mp);
libvlc_release (vlc);
@ -523,15 +524,15 @@ static void test_media_player_programs(const char** argv, int argc)
libvlc_media_release (md);
libvlc_event_manager_t *em = libvlc_media_player_event_manager(mp);
struct event_ctx ctx;
event_ctx_init(&ctx);
struct mp_event_ctx ctx;
mp_event_ctx_init(&ctx);
int res;
res = libvlc_event_attach(em, libvlc_MediaPlayerProgramAdded, event_ctx_on_event, &ctx);
res = libvlc_event_attach(em, libvlc_MediaPlayerProgramAdded, mp_event_ctx_on_event, &ctx);
assert(!res);
res = libvlc_event_attach(em, libvlc_MediaPlayerProgramDeleted, event_ctx_on_event, &ctx);
res = libvlc_event_attach(em, libvlc_MediaPlayerProgramDeleted, mp_event_ctx_on_event, &ctx);
assert(!res);
res = libvlc_event_attach(em, libvlc_MediaPlayerProgramSelected, event_ctx_on_event, &ctx);
res = libvlc_event_attach(em, libvlc_MediaPlayerProgramSelected, mp_event_ctx_on_event, &ctx);
assert(!res);
libvlc_media_player_select_program_id(mp, 2);
@ -542,7 +543,7 @@ static void test_media_player_programs(const char** argv, int argc)
for (int nb_added = 0, nb_selected = 0;
nb_added != PROGRAM_COUNT || nb_selected != 1;)
{
const struct libvlc_event_t *ev = event_ctx_wait_event(&ctx);
const struct libvlc_event_t *ev = mp_event_ctx_wait_event(&ctx);
switch (ev->type)
{
case libvlc_MediaPlayerProgramAdded:
@ -558,7 +559,7 @@ static void test_media_player_programs(const char** argv, int argc)
default:
assert(!"Event not expected");
}
event_ctx_release(&ctx);
mp_event_ctx_release(&ctx);
}
libvlc_player_program_t *program;
@ -573,11 +574,11 @@ static void test_media_player_programs(const char** argv, int argc)
/* Wait for the program selection event */
{
const struct libvlc_event_t *ev = event_ctx_wait_event(&ctx);
const struct libvlc_event_t *ev = mp_event_ctx_wait_event(&ctx);
assert(ev->type == libvlc_MediaPlayerProgramSelected);
assert(ev->u.media_player_program_selection_changed.i_unselected_id == 2);
assert(ev->u.media_player_program_selection_changed.i_selected_id == 8);
event_ctx_release(&ctx);
mp_event_ctx_release(&ctx);
}
/* Ensure that the new program was selected */
@ -609,7 +610,7 @@ static void test_media_player_programs(const char** argv, int argc)
/* Check that all programs are removed and unselected */
for (int nb_deleted = 0; nb_deleted != PROGRAM_COUNT;)
{
const struct libvlc_event_t *ev = event_ctx_wait_event(&ctx);
const struct libvlc_event_t *ev = mp_event_ctx_wait_event(&ctx);
switch (ev->type)
{
case libvlc_MediaPlayerProgramDeleted:
@ -619,12 +620,12 @@ static void test_media_player_programs(const char** argv, int argc)
default:
assert(!"Event not expected");
}
event_ctx_release(&ctx);
mp_event_ctx_release(&ctx);
}
libvlc_event_detach(em, libvlc_MediaPlayerProgramAdded, event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerProgramDeleted, event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerProgramSelected, event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerProgramAdded, mp_event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerProgramDeleted, mp_event_ctx_on_event, &ctx);
libvlc_event_detach(em, libvlc_MediaPlayerProgramSelected, mp_event_ctx_on_event, &ctx);
libvlc_media_player_release (mp);
libvlc_release (vlc);

73
test/libvlc/media_player.h

@ -0,0 +1,73 @@
/*
* media_player.h - media player test common definitions
*
*/
/**********************************************************************
* Copyright (C) 2023 VideoLAN and its authors *
* *
* This program is free software; you can redistribute and/or modify *
* it under the terms of the GNU General Public License as published *
* by the Free Software Foundation; version 2 of the license, or (at *
* your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, you can get it from: *
* http://www.gnu.org/copyleft/gpl.html *
**********************************************************************/
#ifndef TEST_MEDIA_PLAYER_H
#define TEST_MEDIA_PLAYER_H
struct mp_event_ctx
{
vlc_sem_t sem_ev;
vlc_sem_t sem_done;
const struct libvlc_event_t *ev;
};
static inline void mp_event_ctx_init(struct mp_event_ctx *ctx)
{
vlc_sem_init(&ctx->sem_ev, 0);
vlc_sem_init(&ctx->sem_done, 0);
ctx->ev = NULL;
}
static inline const struct libvlc_event_t *mp_event_ctx_wait_event(struct mp_event_ctx *ctx)
{
vlc_sem_wait(&ctx->sem_ev);
assert(ctx->ev != NULL);
return ctx->ev;
}
static inline void mp_event_ctx_release(struct mp_event_ctx *ctx)
{
assert(ctx->ev != NULL);
ctx->ev = NULL;
vlc_sem_post(&ctx->sem_done);
}
static inline void mp_event_ctx_wait(struct mp_event_ctx *ctx)
{
mp_event_ctx_wait_event(ctx);
mp_event_ctx_release(ctx);
}
static inline void mp_event_ctx_on_event(const struct libvlc_event_t *event, void *data)
{
struct mp_event_ctx *ctx = data;
assert(ctx->ev == NULL);
ctx->ev = event;
vlc_sem_post(&ctx->sem_ev);
vlc_sem_wait(&ctx->sem_done);
assert(ctx->ev == NULL);
}
#endif /* TEST_MEDIA_PLAYER_H */

15
test/libvlc/media_player_record.c

@ -21,6 +21,7 @@
*****************************************************************************/
#include "test.h"
#include "media_player.h"
#include <vlc_common.h>
static void test_media_player_record(const char** argv, int argc)
@ -46,11 +47,11 @@ static void test_media_player_record(const char** argv, int argc)
libvlc_media_release (md);
libvlc_event_manager_t *em = libvlc_media_player_event_manager(mp);
struct event_ctx ctx;
event_ctx_init(&ctx);
struct mp_event_ctx ctx;
mp_event_ctx_init(&ctx);
int res;
res = libvlc_event_attach(em, libvlc_MediaPlayerRecordChanged, event_ctx_on_event, &ctx);
res = libvlc_event_attach(em, libvlc_MediaPlayerRecordChanged, mp_event_ctx_on_event, &ctx);
assert(!res);
libvlc_media_player_play (mp);
@ -62,20 +63,20 @@ static void test_media_player_record(const char** argv, int argc)
/* Enabling */
{
const struct libvlc_event_t *ev = event_ctx_wait_event(&ctx);
const struct libvlc_event_t *ev = mp_event_ctx_wait_event(&ctx);
assert(ev->u.media_player_record_changed.recording);
event_ctx_release(&ctx);
mp_event_ctx_release(&ctx);
}
/* Disabling */
{
libvlc_media_player_record(mp, false, path);
const struct libvlc_event_t *ev = event_ctx_wait_event(&ctx);
const struct libvlc_event_t *ev = mp_event_ctx_wait_event(&ctx);
assert(!ev->u.media_player_record_changed.recording);
assert(ev->u.media_player_record_changed.recorded_file_path != NULL);
filepath = strdup(ev->u.media_player_record_changed.recorded_file_path);
assert(filepath != NULL);
event_ctx_release(&ctx);
mp_event_ctx_release(&ctx);
}
libvlc_media_player_stop_async (mp);

46
test/libvlc/test.h

@ -99,50 +99,4 @@ static inline void test_init (void)
setenv( "VLC_PLUGIN_PATH", "../modules", 1 );
}
struct event_ctx
{
vlc_sem_t sem_ev;
vlc_sem_t sem_done;
const struct libvlc_event_t *ev;
};
static inline void event_ctx_init(struct event_ctx *ctx)
{
vlc_sem_init(&ctx->sem_ev, 0);
vlc_sem_init(&ctx->sem_done, 0);
ctx->ev = NULL;
}
static inline const struct libvlc_event_t *event_ctx_wait_event(struct event_ctx *ctx)
{
vlc_sem_wait(&ctx->sem_ev);
assert(ctx->ev != NULL);
return ctx->ev;
}
static inline void event_ctx_release(struct event_ctx *ctx)
{
assert(ctx->ev != NULL);
ctx->ev = NULL;
vlc_sem_post(&ctx->sem_done);
}
static inline void event_ctx_wait(struct event_ctx *ctx)
{
event_ctx_wait_event(ctx);
event_ctx_release(ctx);
}
static inline void event_ctx_on_event(const struct libvlc_event_t *event, void *data)
{
struct event_ctx *ctx = data;
assert(ctx->ev == NULL);
ctx->ev = event;
vlc_sem_post(&ctx->sem_ev);
vlc_sem_wait(&ctx->sem_done);
assert(ctx->ev == NULL);
}
#endif /* TEST_H */

Loading…
Cancel
Save