Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
VLC
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
12
Merge Requests
12
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Steve Lhomme
VLC
Commits
f75541f7
Commit
f75541f7
authored
Jun 15, 2016
by
Steve Lhomme
Committed by
Jean-Baptiste Kempf
Jun 15, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chromecast: pause immediatly the device when pausing the player
Signed-off-by:
Jean-Baptiste Kempf
<
jb@videolan.org
>
parent
e657ddcb
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
73 additions
and
0 deletions
+73
-0
modules/stream_out/chromecast/chromecast.h
modules/stream_out/chromecast/chromecast.h
+6
-0
modules/stream_out/chromecast/chromecast_common.h
modules/stream_out/chromecast/chromecast_common.h
+4
-0
modules/stream_out/chromecast/chromecast_ctrl.cpp
modules/stream_out/chromecast/chromecast_ctrl.cpp
+33
-0
modules/stream_out/chromecast/chromecast_demux.cpp
modules/stream_out/chromecast/chromecast_demux.cpp
+30
-0
No files found.
modules/stream_out/chromecast/chromecast.h
View file @
f75541f7
...
...
@@ -159,6 +159,8 @@ private:
std
::
atomic_bool
requested_stop
;
std
::
atomic_bool
requested_seek
;
void
setInputState
(
input_state_e
state
);
int
sendMessage
(
const
castchannel
::
CastMessage
&
msg
);
void
buildMessage
(
const
std
::
string
&
namespace_
,
...
...
@@ -183,6 +185,8 @@ private:
unsigned
i_requestId
;
bool
has_input
;
input_state_e
input_state
;
static
void
*
ChromecastThread
(
void
*
p_data
);
vlc_interrupt_t
*
p_ctl_thread_interrupt
;
...
...
@@ -241,6 +245,8 @@ private:
static
void
request_seek
(
void
*
,
mtime_t
pos
);
static
void
wait_seek_done
(
void
*
);
static
void
set_input_state
(
void
*
,
input_state_e
state
);
};
#endif
/* VLC_CHROMECAST_H */
modules/stream_out/chromecast/chromecast_common.h
View file @
f75541f7
...
...
@@ -25,6 +25,8 @@
#ifndef VLC_CHROMECAST_COMMON_H
#define VLC_CHROMECAST_COMMON_H
#include <vlc_input.h>
# ifdef __cplusplus
extern
"C"
{
# endif
...
...
@@ -43,6 +45,8 @@ typedef struct
void
(
*
pf_request_seek
)(
void
*
,
mtime_t
pos
);
void
(
*
pf_wait_seek_done
)(
void
*
);
void
(
*
pf_set_input_state
)(
void
*
,
input_state_e
state
);
}
chromecast_common
;
# ifdef __cplusplus
...
...
modules/stream_out/chromecast/chromecast_ctrl.cpp
View file @
f75541f7
...
...
@@ -109,6 +109,7 @@ intf_sys_t::intf_sys_t(vlc_object_t * const p_this, int port, std::string device
,
i_receiver_requestId
(
0
)
,
i_requestId
(
0
)
,
has_input
(
false
)
,
input_state
(
INIT_S
)
,
p_ctl_thread_interrupt
(
p_interrupt
)
,
m_time_playback_started
(
VLC_TS_INVALID
)
,
i_ts_local_start
(
VLC_TS_INVALID
)
...
...
@@ -127,6 +128,7 @@ intf_sys_t::intf_sys_t(vlc_object_t * const p_this, int port, std::string device
common
.
pf_wait_app_started
=
wait_app_started
;
common
.
pf_request_seek
=
request_seek
;
common
.
pf_wait_seek_done
=
wait_seek_done
;
common
.
pf_set_input_state
=
set_input_state
;
assert
(
var_Type
(
p_module
->
p_parent
->
p_parent
,
CC_SHARED_VAR_NAME
)
==
0
);
if
(
var_Create
(
p_module
->
p_parent
->
p_parent
,
CC_SHARED_VAR_NAME
,
VLC_VAR_ADDRESS
)
==
VLC_SUCCESS
)
...
...
@@ -1018,6 +1020,31 @@ void intf_sys_t::requestPlayerSeek(mtime_t pos)
notifySendRequest
();
}
void
intf_sys_t
::
setInputState
(
input_state_e
state
)
{
input_state
=
state
;
msg_Dbg
(
p_module
,
"new %d state"
,
state
);
switch
(
input_state
)
{
case
PLAYING_S
:
if
(
!
mediaSessionId
.
empty
()
&&
receiverState
!=
RECEIVER_IDLE
)
{
msgPlayerPlay
();
setPlayerStatus
(
CMD_PLAYBACK_SENT
);
}
break
;
case
PAUSE_S
:
if
(
!
mediaSessionId
.
empty
()
&&
receiverState
!=
RECEIVER_IDLE
)
{
msgPlayerPause
();
setPlayerStatus
(
CMD_PLAYBACK_SENT
);
}
break
;
default:
break
;
}
}
void
intf_sys_t
::
waitAppStarted
()
{
vlc_mutex_locker
locker
(
&
lock
);
...
...
@@ -1087,3 +1114,9 @@ void intf_sys_t::wait_seek_done(void *pt)
intf_sys_t
*
p_this
=
reinterpret_cast
<
intf_sys_t
*>
(
pt
);
p_this
->
waitSeekDone
();
}
void
intf_sys_t
::
set_input_state
(
void
*
pt
,
input_state_e
state
)
{
intf_sys_t
*
p_this
=
reinterpret_cast
<
intf_sys_t
*>
(
pt
);
p_this
->
setInputState
(
state
);
}
modules/stream_out/chromecast/chromecast_demux.cpp
View file @
f75541f7
...
...
@@ -46,10 +46,22 @@ struct demux_sys_t
,
canSeek
(
false
)
,
m_seektime
(
VLC_TS_INVALID
)
{
demux_t
*
p_last_demux
=
demux
->
p_next
;
while
(
p_last_demux
->
p_next
)
p_last_demux
=
p_last_demux
->
p_next
;
input_thread_t
*
p_input
=
p_last_demux
->
p_input
;
p_renderer
->
pf_set_input_state
(
p_renderer
->
p_opaque
,
(
input_state_e
)
var_GetInteger
(
p_input
,
"state"
)
);
var_AddCallback
(
p_input
,
"intf-event"
,
InputEvent
,
this
);
}
~
demux_sys_t
()
{
demux_t
*
p_last_demux
=
p_demux
->
p_next
;
while
(
p_last_demux
->
p_next
)
p_last_demux
=
p_last_demux
->
p_next
;
input_thread_t
*
p_input
=
p_last_demux
->
p_input
;
var_DelCallback
(
p_input
,
"intf-event"
,
InputEvent
,
this
);
}
/**
...
...
@@ -125,6 +137,9 @@ protected:
bool
canSeek
;
/* seek time kept while waiting for the chromecast to "seek" */
mtime_t
m_seektime
;
static
int
InputEvent
(
vlc_object_t
*
p_this
,
char
const
*
psz_var
,
vlc_value_t
oldval
,
vlc_value_t
val
,
void
*
);
};
static
int
Demux
(
demux_t
*
p_demux_filter
)
...
...
@@ -222,6 +237,21 @@ static int Control( demux_t *p_demux_filter, int i_query, va_list args)
return
demux_vaControl
(
p_demux_filter
->
p_next
,
i_query
,
args
);
}
int
demux_sys_t
::
InputEvent
(
vlc_object_t
*
p_this
,
char
const
*
psz_var
,
vlc_value_t
oldval
,
vlc_value_t
val
,
void
*
p_data
)
{
VLC_UNUSED
(
psz_var
);
VLC_UNUSED
(
oldval
);
input_thread_t
*
p_input
=
reinterpret_cast
<
input_thread_t
*>
(
p_this
);
demux_sys_t
*
p_sys
=
reinterpret_cast
<
demux_sys_t
*>
(
p_data
);
if
(
val
.
i_int
==
INPUT_EVENT_STATE
)
p_sys
->
p_renderer
->
pf_set_input_state
(
p_sys
->
p_renderer
->
p_opaque
,
(
input_state_e
)
var_GetInteger
(
p_input
,
"state"
)
);
return
VLC_SUCCESS
;
}
int
Open
(
vlc_object_t
*
p_this
)
{
demux_t
*
p_demux
=
reinterpret_cast
<
demux_t
*>
(
p_this
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment