#ifndef PLAYER_H #define PLAYER_H #include #include "mpv_loader.h" typedef struct Player Player; /* Callback types */ typedef void (*PlayerEventCallback)(Player *player, mpv_event *event, gpointer user_data); /* Lifecycle */ Player* player_new(void); void player_destroy(Player *player); void player_set_window(Player *player, unsigned long wid); void player_set_config_path(Player *player, const char *path); int player_init(Player *player); /* Playback commands */ void player_load_file(Player *player, const char *path, gboolean append); void player_play(Player *player); void player_pause(Player *player); void player_toggle_pause(Player *player); void player_stop(Player *player); void player_seek(Player *player, double seconds); void player_seek_absolute(Player *player, double position); void player_frame_step(Player *player); void player_frame_back_step(Player *player); /* Options */ void player_set_option_string(Player *player, const char *name, const char *value); void player_set_option_flag(Player *player, const char *name, int value); /* Property getters */ double player_get_duration(Player *player); double player_get_position(Player *player); double player_get_volume(Player *player); gboolean player_get_paused(Player *player); gboolean player_get_muted(Player *player); double player_get_speed(Player *player); char* player_get_media_title(Player *player); char* player_get_filename(Player *player); gboolean player_get_eof_reached(Player *player); gboolean player_is_idle(Player *player); char* player_get_metadata_tag(Player *player, const char *tag); gboolean player_get_shuffle(Player *player); gboolean player_get_loop(Player *player); /* Property setters */ void player_set_volume_boost(Player *player, gboolean enable); void player_set_volume(Player *player, double volume); void player_set_muted(Player *player, gboolean muted); void player_set_speed(Player *player, double speed); /* Track management */ int player_get_audio_track_count(Player *player); int player_get_subtitle_track_count(Player *player); int player_get_current_audio_track(Player *player); int player_get_current_subtitle_track(Player *player); void player_set_audio_track(Player *player, int track); void player_set_subtitle_track(Player *player, int track); void player_load_subtitle(Player *player, const char *path); void player_set_subtitle_delay(Player *player, double delay); void player_set_subtitle_pos(Player *player, int pos); void player_set_subtitle_scale(Player *player, double scale); void player_set_subtitle_font(Player *player, const char *font); void player_set_subtitle_font_size(Player *player, int size); void player_set_subtitle_color(Player *player, const char *hex_color, int opacity); void player_set_subtitle_border_color(Player *player, const char *hex_color, int opacity); void player_set_subtitle_border_size(Player *player, double size); void player_set_subtitle_shadow_color(Player *player, const char *hex_color, int opacity); void player_set_subtitle_shadow_offset(Player *player, double offset); void player_set_subtitle_bold(Player *player, gboolean bold); void player_set_subtitle_italic(Player *player, gboolean italic); void player_set_subtitle_border_enabled(Player *player, gboolean enabled); void player_set_subtitle_shadow_enabled(Player *player, gboolean enabled); /* Audio/Video info */ char** player_get_audio_track_list(Player *player, int *count); void player_get_video_resolution(Player *player, int *w, int *h); char** player_get_subtitle_track_list(Player *player, int *count); void player_free_track_list(char **list, int count); /* Chapters */ int player_get_chapter_count(Player *player); int player_get_current_chapter(Player *player); void player_set_chapter(Player *player, int index); char** player_get_chapter_list(Player *player, int *count); double* player_get_chapter_times(Player *player, int *count); void player_next_chapter(Player *player); void player_prev_chapter(Player *player); /* Playlist (internal mpv playlist) */ int player_get_playlist_count(Player *player); int player_get_playlist_pos(Player *player); void player_playlist_next(Player *player); void player_playlist_prev(Player *player); void player_playlist_play_index(Player *player, int index); void player_playlist_remove(Player *player, int index); void player_playlist_move(Player *player, int from, int to); void player_playlist_clear(Player *player); void player_playlist_shuffle(Player *player); void player_set_shuffle(Player *player, gboolean shuffle); void player_set_loop(Player *player, gboolean loop); /* A-B Loop */ void player_set_ab_loop_a(Player *player); void player_set_ab_loop_b(Player *player); void player_clear_ab_loop(Player *player); double player_get_ab_loop_a(Player *player); double player_get_ab_loop_b(Player *player); /* Screenshot */ void player_screenshot(Player *player); void player_screenshot_to_file(Player *player, const char *path); /* Aspect ratio */ void player_set_aspect_ratio(Player *player, const char *aspect); /* Event handling */ void player_set_event_callback(Player *player, PlayerEventCallback callback, gpointer user_data); gboolean player_process_events(gpointer player); mpv_handle* player_get_mpv_handle(Player *player); /* Property observation */ void player_observe_property(Player *player, const char *name, mpv_format format, guint64 reply_userdata); void player_unobserve_property(Player *player, guint64 reply_userdata); /* Script management */ void player_load_script(Player *player, const char *path); #endif /* PLAYER_H */