// SPDX-License-Identifier: LGPL-2.1-or-later
/*****************************************************************************
* outputs.c: audio/video outputs player test
*****************************************************************************
* Copyright (C) 2018-2025 VLC authors and VideoLAN
*****************************************************************************/
#include "common.h"
static void
test_no_outputs(struct ctx *ctx)
{
test_log("test_no_outputs\n");
vlc_player_t *player = ctx->player;
struct media_params params = DEFAULT_MEDIA_PARAMS(VLC_TICK_FROM_MS(10));
player_set_current_mock_media(ctx, "media1", ¶ms, false);
player_start(ctx);
wait_state(ctx, VLC_PLAYER_STATE_STOPPING);
{
vec_on_vout_changed *vec = &ctx->report.on_vout_changed;
assert(vec->size == 0);
}
audio_output_t *aout = vlc_player_aout_Hold(player);
assert(!aout);
test_end(ctx);
}
static void
test_outputs(struct ctx *ctx)
{
test_log("test_outputs\n");
vlc_player_t *player = ctx->player;
/* Test that the player has a valid aout and vout, even before first
* playback */
audio_output_t *aout = vlc_player_aout_Hold(player);
assert(aout);
vout_thread_t *vout = vlc_player_vout_Hold(player);
assert(vout);
size_t vout_count;
vout_thread_t **vout_list = vlc_player_vout_HoldAll(player, &vout_count);
assert(vout_count == 1 && vout_list[0] == vout);
vout_Release(vout_list[0]);
free(vout_list);
vout_Release(vout);
/* Test that the player keep the same aout and vout during playback */
struct media_params params = DEFAULT_MEDIA_PARAMS(VLC_TICK_FROM_MS(10));
player_set_current_mock_media(ctx, "media1", ¶ms, false);
player_start(ctx);
wait_state(ctx, VLC_PLAYER_STATE_STOPPING);
{
vec_on_vout_changed *vec = &ctx->report.on_vout_changed;
assert(vec->size >= 1);
assert(vec->data[0].action == VLC_PLAYER_VOUT_STARTED);
vout_thread_t *same_vout = vlc_player_vout_Hold(player);
assert(vec->data[0].vout == same_vout);
vout_Release(same_vout);
}
audio_output_t *same_aout = vlc_player_aout_Hold(player);
assert(same_aout == aout);
aout_Release(same_aout);
aout_Release(aout);
test_end(ctx);
}
int
main(void)
{
struct ctx ctx;
/* Test with --aout=none --vout=none */
ctx_init(&ctx, DISABLE_VIDEO_OUTPUT | DISABLE_AUDIO_OUTPUT);
test_no_outputs(&ctx);
ctx_destroy(&ctx);
/* Test with normal outputs */
ctx_init(&ctx, 0);
test_outputs(&ctx);
ctx_destroy(&ctx);
return 0;
}
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet am 2026-11-04)
¤
*© Formatika GbR, Deutschland