You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.3 KiB
73 lines
2.3 KiB
/*
|
|
* 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 */
|
|
|