/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of mediastreamer2.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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, see .
*/
#ifndef MS_MEDIA_PLAYER_H
#define MS_MEDIA_PLAYER_H
#include
#include
#include
/**
* Media file player
*/
typedef struct _MSMediaPlayer MSMediaPlayer;
/**
* Callbacks definitions */
typedef void (*MSMediaPlayerEofCallback)(void *user_data);
typedef enum {
MS_FILE_FORMAT_UNKNOWN,
MS_FILE_FORMAT_WAVE,
MS_FILE_FORMAT_MATROSKA
} MSFileFormat;
#ifdef __cplusplus
extern "C"{
#endif
/**
* Instanciate a media player
* @param factory a MSFactory
* @param snd_card Playback sound card
* @param video_display_name Video out
* @param window_id Pointer on the drawing window
* @return A pointer on the created MSMediaPlayer
*/
MS2_PUBLIC MSMediaPlayer *ms_media_player_new(MSFactory *factory, MSSndCard *snd_card, const char *video_display_name, void *window_id);
/**
* Free a media player
* @param obj Pointer on the MSMediaPlayer to free
*/
MS2_PUBLIC void ms_media_player_free(MSMediaPlayer *obj);
/**
* Get the window ID
* @param obj The player
* @return The window ID
*/
MS2_PUBLIC void * ms_media_player_get_window_id(const MSMediaPlayer *obj);
/**
* Set the "End of File" callback
* @param obj The player
* @param cb Function to call
* @param user_data Data which will be passed to the function
*/
MS2_PUBLIC void ms_media_player_set_eof_callback(MSMediaPlayer *obj, MSMediaPlayerEofCallback cb, void *user_data);
/**
* Require the player for playing the file again when the end is reached. Then,
* the player loops indefinitely until ms_media_player_stop() is called. That function
* can be called while the player is running.
* @param obj The MSMediaPlayer instance
* @param loop_interval_ms Time interval beetween two plays. If a negative value is
* set, the player does not loop.
*/
MS2_PUBLIC void ms_media_player_set_loop(MSMediaPlayer *obj, int loop_interval_ms);
/**
* Open a media file
* @param obj The player
* @param filepath Path of the file to open
* @return TRUE if the file could be opened
*/
MS2_PUBLIC bool_t ms_media_player_open(MSMediaPlayer *obj, const char *filepath);
/**
* Close a media file
* That function can be safly call even if no file has been opend
* @param obj The player
*/
MS2_PUBLIC void ms_media_player_close(MSMediaPlayer *obj);
/**
* Start playback
* @param obj The player
* @return TRUE if playback has been successfuly started
*/
MS2_PUBLIC bool_t ms_media_player_start(MSMediaPlayer *obj);
/**
* Stop a playback
* When a playback is stoped, the player automatically seek at
* the begining of the file.
* @param obj The player
*/
MS2_PUBLIC void ms_media_player_stop(MSMediaPlayer *obj);
/**
* Turn playback to paused.
* @param obj The player
*/
MS2_PUBLIC void ms_media_player_pause(MSMediaPlayer *obj);
/**
* Seek into the opened file
* Can be safly call when playback is runing
* @param obj The player
* @param seek_pos_ms Position where to seek on (in milliseconds)
* @return
*/
MS2_PUBLIC bool_t ms_media_player_seek(MSMediaPlayer *obj, int seek_pos_ms);
/**
* Get the state of the player
* @param obj The player
* @return An MSPLayerSate enum
*/
MS2_PUBLIC MSPlayerState ms_media_player_get_state(MSMediaPlayer *obj);
/**
* Get the duration of the opened media
* @param obj The player
* @return The duration in milliseconds. -1 if failure
*/
MS2_PUBLIC int ms_media_player_get_duration(MSMediaPlayer *obj);
/**
* Get the position of the playback
* @param obj The player
* @return The position in milliseconds. -1 if failure
*/
MS2_PUBLIC int ms_media_player_get_current_position(MSMediaPlayer *obj);
/**
* Check whether Matroska format is supported by the player
* @return TRUE if supported
*/
MS2_PUBLIC bool_t ms_media_player_matroska_supported(void);
/**
* Return format of the current opened file
* @param obj Player
* @return Format of the file. UNKNOWN_FORMAT when no file is opened
*/
MS2_PUBLIC MSFileFormat ms_media_player_get_file_format(const MSMediaPlayer *obj);
#ifdef __cplusplus
}
#endif
#endif