forked from RSATom/ya-libvlc-wrapper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvlc_player.h
151 lines (121 loc) · 4.93 KB
/
vlc_player.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*******************************************************************************
* Copyright (c) 2013-2014, Sergey Radionov <rsatom_gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
#pragma once
//include stdint.h before boost to avoid conflicts
#include <stdint.h>
#include <deque>
#include "vlc_thread.h"
#include "vlc_basic_player.h"
#include "vlc_audio.h"
#include "vlc_video.h"
#include "vlc_subtitles.h"
namespace vlc
{
enum playback_mode_e
{
mode_normal = 0,
mode_loop,
mode_single,
mode_last = mode_single,
};
class player
{
public:
player();
~player();
bool open( libvlc_instance_t* inst );
void close();
bool is_open() const { return _player.is_open(); }
libvlc_state_t get_state() { return _player.get_state(); }
bool is_playing() { return libvlc_Playing == get_state(); }
int add_media( const char * mrl_or_path,
unsigned optc, const char **optv,
bool is_path = false )
{ return add_media( mrl_or_path, optc, optv, 0, 0, is_path ); }
int add_media( const char * mrl_or_path, bool is_path = false )
{ return add_media( mrl_or_path, 0, 0, is_path ); }
int add_media( const char * mrl_or_path,
unsigned optc, const char **optv,
unsigned trusted_optc, const char **trusted_optv,
bool is_path = false );
bool delete_item( unsigned idx );
void clear_items();
int item_count();
vlc::media get_media( unsigned idx );
vlc::media current_media()
{ return _player.current_media(); }
int current_item();
void set_current( unsigned idx );
void play();
bool play( unsigned idx );
void pause();
void togglePause();
void stop( bool async = false );
void next();
void prev();
float get_rate();
void set_rate( float );
float get_position();
void set_position( float );
libvlc_time_t get_time();
void set_time( libvlc_time_t );
libvlc_time_t get_length();
float get_fps();
playback_mode_e get_playback_mode();
void set_playback_mode( playback_mode_e m );
vlc::basic_player& basic_player() { return _player; }
vlc::video& video() { return _video; }
vlc::audio& audio() { return _audio; }
vlc::subtitles& subtitles() { return _subtitles; }
libvlc_media_player_t* get_mp() const
{ return _player.get_mp(); }
private:
static void libvlc_event_proxy( const struct libvlc_event_t* event, void* user_data);
void libvlc_event( const struct libvlc_event_t* event );
private:
struct playlist_item
{
vlc::media media;
};
typedef std::deque<playlist_item> playlist_t;
typedef playlist_t::iterator playlist_it;
typedef playlist_t::const_iterator playlist_cit;
private:
static void get_media_sub_items( const vlc::media& media, playlist_t* out );
bool try_expand_current();
void internalPlay( int idx );
private:
libvlc_instance_t* _libvlc_instance;
vlc::basic_player _player;
vlc::video _video;
vlc::audio _audio;
vlc::subtitles _subtitles;
typedef recursive_mutex mutex_t;
mutex_t _playlist_guard;
playback_mode_e _mode;
playlist_t _playlist;
int _current_idx;
};
}
typedef vlc::player vlc_player;