static void play_file(const char *filepath, bool_t unsupported_format, bool_t seeking_test, bool_t play_twice, int timeout) {
	bool_t succeed;
	Eof eof;
	MSMediaPlayer *file_player = NULL;
	MSSndCard *snd_card = ms_snd_card_manager_get_default_card(ms_snd_card_manager_get());
	const char *display_name = video_stream_get_default_video_renderer();

	eof_init(&eof);

	file_player = ms_media_player_new(snd_card, display_name, NULL);
	CU_ASSERT_PTR_NOT_NULL(file_player);
	if(file_player == NULL) return;

	CU_ASSERT_EQUAL(ms_media_player_get_state(file_player), MSPlayerClosed);
	ms_media_player_set_eof_callback(file_player, eof_callback, &eof);

	succeed = ms_media_player_open(file_player, filepath);
	if(unsupported_format) {
		CU_ASSERT_FALSE(succeed);
		CU_ASSERT_EQUAL(ms_media_player_get_state(file_player), MSPlayerClosed);
	} else {
		CU_ASSERT_TRUE(succeed);
		CU_ASSERT_EQUAL(ms_media_player_get_state(file_player), MSPlayerPaused);
	}
	if(!succeed) {
		ms_media_player_free(file_player);
		return;
	}


	succeed = ms_media_player_start(file_player);
	CU_ASSERT_TRUE(succeed);
	CU_ASSERT_EQUAL(ms_media_player_get_state(file_player), MSPlayerPlaying);

	if(seeking_test) {
		CU_ASSERT_TRUE(ms_media_player_seek(file_player, 5000));
	}

	if(succeed) {
		wait_for_eof(&eof, 100, timeout);
		CU_ASSERT_TRUE(eof.eof);
	}
	ms_media_player_close(file_player);
	CU_ASSERT_EQUAL(ms_media_player_get_state(file_player), MSPlayerClosed);

	if(play_twice) {
		eof_init(&eof);
		CU_ASSERT_TRUE(ms_media_player_open(file_player, filepath));
		CU_ASSERT_TRUE(ms_media_player_start(file_player));
		wait_for_eof(&eof, 100, timeout);
		ms_media_player_close(file_player);
		CU_ASSERT_TRUE(eof.eof);
	}
	ms_media_player_free(file_player);
}
예제 #2
0
static void play_file(const char *filename, bool_t unsupported_format, const char *audio_mime, const char *video_mime) {
	LinphoneCoreManager *lc_manager;
	LinphonePlayer *player;
	int res, time = 0;
	bool_t eof = FALSE;

	lc_manager = linphone_core_manager_new("marie_rc");
	CU_ASSERT_PTR_NOT_NULL(lc_manager);
	if(lc_manager == NULL) return;

	player = linphone_core_create_local_player(lc_manager->lc, ms_snd_card_manager_get_default_card(ms_snd_card_manager_get()), video_stream_get_default_video_renderer(), 0);
	CU_ASSERT_PTR_NOT_NULL(player);
	if(player == NULL) goto fail;

	res = linphone_player_open(player, filename, eof_callback, &eof);
	if(unsupported_format
			|| (audio_mime == NULL && video_mime == NULL)
			|| (video_mime == NULL && audio_mime && !ms_filter_codec_supported(audio_mime))
			|| (audio_mime == NULL && video_mime && !ms_filter_codec_supported(video_mime))) {
		CU_ASSERT_EQUAL(res, -1);
	} else {
		CU_ASSERT_EQUAL(res, 0);
	}
	if(res == -1) goto fail;

	CU_ASSERT_EQUAL((res = linphone_player_start(player)), 0);
	if(res == -1) goto fail;

	CU_ASSERT_TRUE(wait_for_eof(&eof, &time, 100, 13000));

	linphone_player_close(player);

	fail:
	if(player) linphone_player_destroy(player);
	if(lc_manager) linphone_core_manager_destroy(lc_manager);
}