Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
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
videolan
vlc-gpu
Commits
aeb0b482
Commit
aeb0b482
authored
Dec 09, 2005
by
Olivier Aubert
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
corba: remove useless files
parent
3dfa9f43
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
0 additions
and
1130 deletions
+0
-1130
modules/control/corba/mediacontrol-core.c
modules/control/corba/mediacontrol-core.c
+0
-887
modules/control/corba/mediacontrol-core.h
modules/control/corba/mediacontrol-core.h
+0
-155
modules/control/corba/mediacontrol-init.c
modules/control/corba/mediacontrol-init.c
+0
-62
modules/control/corba/mediacontrol-plugin.c
modules/control/corba/mediacontrol-plugin.c
+0
-26
No files found.
modules/control/corba/mediacontrol-core.c
deleted
100644 → 0
View file @
3dfa9f43
#include "mediacontrol-core.h"
#include <vlc/intf.h>
#include <vlc/vout.h>
#include <vlc/aout.h>
#include <vlc_demux.h>
#include <vlc_osd.h>
#define HAS_SNAPSHOT 1
#ifdef HAS_SNAPSHOT
#include <snapshot.h>
#endif
#include <stdlib.h>
/* malloc(), free() */
#include <string.h>
#include <errno.h>
/* ENOMEM */
#include <stdio.h>
#include <ctype.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
#endif
#include <sys/types.h>
#define RAISE( c, m ) exception->code = c; \
exception->message = strdup(m);
long
long
mediacontrol_unit_convert
(
input_thread_t
*
p_input
,
mediacontrol_PositionKey
from
,
mediacontrol_PositionKey
to
,
long
long
value
)
{
if
(
to
==
from
)
return
value
;
/* For all conversions, we need data from p_input */
if
(
!
p_input
)
return
0
;
switch
(
from
)
{
case
mediacontrol_MediaTime
:
if
(
to
==
mediacontrol_ByteCount
)
{
/* FIXME */
/* vlc < 0.8 API */
/* return value * 50 * p_input->stream.i_mux_rate / 1000; */
return
0
;
}
if
(
to
==
mediacontrol_SampleCount
)
{
double
f_fps
;
if
(
demux2_Control
(
p_input
->
input
.
p_demux
,
DEMUX_GET_FPS
,
&
f_fps
)
||
f_fps
<
0
.
1
)
return
0
;
else
return
(
value
*
f_fps
/
1000
.
0
);
}
/* Cannot happen */
/* See http://catb.org/~esr/jargon/html/entry/can't-happen.html */
break
;
case
mediacontrol_SampleCount
:
{
double
f_fps
;
if
(
demux2_Control
(
p_input
->
input
.
p_demux
,
DEMUX_GET_FPS
,
&
f_fps
)
||
f_fps
<
0
.
1
)
return
0
;
if
(
to
==
mediacontrol_ByteCount
)
{
/* FIXME */
/* vlc < 0.8 API */
/* return ( long long )( value * 50 * p_input->stream.i_mux_rate / f_fps ); */
return
0
;
}
if
(
to
==
mediacontrol_MediaTime
)
return
(
long
long
)(
value
*
1000
.
0
/
(
double
)
f_fps
);
/* Cannot happen */
break
;
}
case
mediacontrol_ByteCount
:
/* FIXME */
return
0
;
/* vlc < 0.8 API: */
// if( p_input->stream.i_mux_rate == 0 )
// return 0;
//
// /* Convert an offset into milliseconds. Taken from input_ext-intf.c.
// The 50 hardcoded constant comes from the definition of i_mux_rate :
// i_mux_rate : the rate we read the stream (in units of 50 bytes/s) ;
// 0 if undef */
// if( to == mediacontrol_MediaTime )
// return ( long long )( 1000 * value / 50 / p_input->stream.i_mux_rate );
//
// if( to == mediacontrol_SampleCount )
// {
// double f_fps;
// if( demux2_Control( p_input->input.p_demux, DEMUX_GET_FPS, &f_fps ) || f_fps < 0.1 )
// return 0;
// else
// return ( long long )( value * f_fps / 50 / p_input->stream.i_mux_rate );
// }
/* Cannot happen */
break
;
}
/* Cannot happen */
return
0
;
}
/* Converts a mediacontrol_Position into a time in microseconds in
movie clock time */
long
long
mediacontrol_position2microsecond
(
input_thread_t
*
p_input
,
const
mediacontrol_Position
*
pos
)
{
switch
(
pos
->
origin
)
{
case
mediacontrol_AbsolutePosition
:
return
(
1000
*
mediacontrol_unit_convert
(
p_input
,
pos
->
key
,
/* from */
mediacontrol_MediaTime
,
/* to */
pos
->
value
)
);
break
;
case
mediacontrol_RelativePosition
:
{
long
long
l_pos
;
vlc_value_t
val
;
val
.
i_time
=
0
;
if
(
p_input
)
{
var_Get
(
p_input
,
"time"
,
&
val
);
}
l_pos
=
1000
*
mediacontrol_unit_convert
(
p_input
,
pos
->
key
,
mediacontrol_MediaTime
,
pos
->
value
);
return
val
.
i_time
+
l_pos
;
break
;
}
case
mediacontrol_ModuloPosition
:
{
long
long
l_pos
;
vlc_value_t
val
;
val
.
i_time
=
0
;
if
(
p_input
)
{
var_Get
(
p_input
,
"length"
,
&
val
);
}
if
(
val
.
i_time
>
0
)
{
l_pos
=
(
1000
*
mediacontrol_unit_convert
(
p_input
,
pos
->
key
,
mediacontrol_MediaTime
,
pos
->
value
)
);
}
else
l_pos
=
0
;
return
l_pos
%
val
.
i_time
;
break
;
}
}
return
0
;
}
mediacontrol_RGBPicture
*
mediacontrol_RGBPicture__alloc
(
int
datasize
)
{
mediacontrol_RGBPicture
*
pic
;
pic
=
(
mediacontrol_RGBPicture
*
)
malloc
(
sizeof
(
mediacontrol_RGBPicture
)
);
if
(
!
pic
)
return
NULL
;
pic
->
size
=
datasize
;
pic
->
data
=
(
char
*
)
malloc
(
datasize
);
return
pic
;
}
void
mediacontrol_RGBPicture__free
(
mediacontrol_RGBPicture
*
pic
)
{
if
(
pic
)
free
(
pic
->
data
);
free
(
pic
);
}
mediacontrol_PlaylistSeq
*
mediacontrol_PlaylistSeq__alloc
(
int
size
)
{
mediacontrol_PlaylistSeq
*
ps
;
ps
=
(
mediacontrol_PlaylistSeq
*
)
malloc
(
sizeof
(
mediacontrol_PlaylistSeq
)
);
if
(
!
ps
)
return
NULL
;
ps
->
size
=
size
;
ps
->
data
=
(
char
**
)
malloc
(
size
*
sizeof
(
char
*
)
);
return
ps
;
}
void
mediacontrol_PlaylistSeq__free
(
mediacontrol_PlaylistSeq
*
ps
)
{
if
(
ps
)
{
int
i
;
for
(
i
=
0
;
i
<
ps
->
size
;
i
++
)
free
(
ps
->
data
[
i
]
);
}
free
(
ps
->
data
);
free
(
ps
);
}
mediacontrol_Exception
*
mediacontrol_exception_init
(
mediacontrol_Exception
*
exception
)
{
if
(
exception
==
NULL
)
{
exception
=
(
mediacontrol_Exception
*
)
malloc
(
sizeof
(
mediacontrol_Exception
)
);
}
exception
->
code
=
0
;
exception
->
message
=
NULL
;
return
exception
;
}
void
mediacontrol_exception_free
(
mediacontrol_Exception
*
exception
)
{
if
(
!
exception
)
return
;
free
(
exception
->
message
);
free
(
exception
);
}
mediacontrol_Instance
*
mediacontrol_new_from_object
(
vlc_object_t
*
p_object
,
mediacontrol_Exception
*
exception
)
{
mediacontrol_Instance
*
retval
;
vlc_object_t
*
p_vlc
;
p_vlc
=
vlc_object_find
(
p_object
,
VLC_OBJECT_ROOT
,
FIND_PARENT
);
if
(
!
p_vlc
)
{
RAISE
(
mediacontrol_InternalException
,
"Unable to initialize VLC"
);
return
NULL
;
}
retval
=
(
mediacontrol_Instance
*
)
malloc
(
sizeof
(
mediacontrol_Instance
)
);
retval
->
p_vlc
=
p_vlc
;
retval
->
vlc_object_id
=
p_vlc
->
i_object_id
;
/* We can keep references on these, which should not change. Is it true ? */
retval
->
p_playlist
=
vlc_object_find
(
p_vlc
,
VLC_OBJECT_PLAYLIST
,
FIND_ANYWHERE
);
retval
->
p_intf
=
vlc_object_find
(
p_vlc
,
VLC_OBJECT_INTF
,
FIND_ANYWHERE
);
if
(
!
retval
->
p_playlist
||
!
retval
->
p_intf
)
{
RAISE
(
mediacontrol_InternalException
,
"No available interface"
);
return
NULL
;
}
return
retval
;
};
/* Returns the current position in the stream. The returned value can
be relative or absolute( according to PositionOrigin ) and the unit
is set by PositionKey */
mediacontrol_Position
*
mediacontrol_get_media_position
(
mediacontrol_Instance
*
self
,
const
mediacontrol_PositionOrigin
an_origin
,
const
mediacontrol_PositionKey
a_key
,
mediacontrol_Exception
*
exception
)
{
mediacontrol_Position
*
retval
;
vlc_value_t
val
;
input_thread_t
*
p_input
=
self
->
p_playlist
->
p_input
;
exception
=
mediacontrol_exception_init
(
exception
);
retval
=
(
mediacontrol_Position
*
)
malloc
(
sizeof
(
mediacontrol_Position
)
);
retval
->
origin
=
an_origin
;
retval
->
key
=
a_key
;
if
(
!
p_input
)
{
/*
RAISE( mediacontrol_InternalException, "No input thread." );
return( NULL );
*/
retval
->
value
=
0
;
return
retval
;
}
if
(
an_origin
==
mediacontrol_RelativePosition
||
an_origin
==
mediacontrol_ModuloPosition
)
{
/* Relative or ModuloPosition make no sense */
retval
->
value
=
0
;
return
retval
;
}
/* We are asked for an AbsolutePosition. */
val
.
i_time
=
0
;
var_Get
(
p_input
,
"time"
,
&
val
);
/* FIXME: check val.i_time > 0 */
retval
->
value
=
mediacontrol_unit_convert
(
p_input
,
mediacontrol_MediaTime
,
a_key
,
val
.
i_time
/
1000
);
return
retval
;
}
/* Sets the media position */
void
mediacontrol_set_media_position
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
)
{
vlc_value_t
val
;
input_thread_t
*
p_input
=
self
->
p_playlist
->
p_input
;
exception
=
mediacontrol_exception_init
(
exception
);
if
(
!
p_input
)
{
RAISE
(
mediacontrol_InternalException
,
"No input thread."
);
return
;
}
if
(
!
var_GetBool
(
p_input
,
"seekable"
)
)
{
RAISE
(
mediacontrol_InvalidPosition
,
"Stream not seekable"
);
return
;
}
val
.
i_time
=
mediacontrol_position2microsecond
(
p_input
,
a_position
);
var_Set
(
p_input
,
"time"
,
val
);
return
;
}
/* Starts playing a stream */
void
mediacontrol_start
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
)
{
playlist_t
*
p_playlist
=
self
->
p_playlist
;
exception
=
mediacontrol_exception_init
(
exception
);
if
(
!
p_playlist
)
{
RAISE
(
mediacontrol_PlaylistException
,
"No available playlist"
);
return
;
}
vlc_mutex_lock
(
&
p_playlist
->
object_lock
);
if
(
p_playlist
->
i_size
)
{
vlc_value_t
val
;
vlc_mutex_unlock
(
&
p_playlist
->
object_lock
);
/* Set start time */
val
.
i_int
=
mediacontrol_position2microsecond
(
p_playlist
->
p_input
,
a_position
)
/
1000000
;
var_Set
(
p_playlist
,
"start-time"
,
val
);
playlist_Play
(
p_playlist
);
}
else
{
RAISE
(
mediacontrol_PlaylistException
,
"Empty playlist."
);
vlc_mutex_unlock
(
&
p_playlist
->
object_lock
);
return
;
}
return
;
}
void
mediacontrol_pause
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
)
{
input_thread_t
*
p_input
=
self
->
p_playlist
->
p_input
;;
/* FIXME: use the a_position parameter */
exception
=
mediacontrol_exception_init
(
exception
);
if
(
p_input
!=
NULL
)
{
var_SetInteger
(
p_input
,
"state"
,
PAUSE_S
);
}
else
{
RAISE
(
mediacontrol_InternalException
,
"No input"
);
}
return
;
}
void
mediacontrol_resume
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
)
{
input_thread_t
*
p_input
=
self
->
p_playlist
->
p_input
;
/* FIXME: use the a_position parameter */
exception
=
mediacontrol_exception_init
(
exception
);
if
(
p_input
!=
NULL
)
{
var_SetInteger
(
p_input
,
"state"
,
PAUSE_S
);
}
else
{
RAISE
(
mediacontrol_InternalException
,
"No input"
);
}
}
void
mediacontrol_stop
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
)
{
/* FIXME: use the a_position parameter */
exception
=
mediacontrol_exception_init
(
exception
);
if
(
!
self
->
p_playlist
)
{
RAISE
(
mediacontrol_PlaylistException
,
"No playlist"
);
return
;
}
playlist_Stop
(
self
->
p_playlist
);
}
void
mediacontrol_playlist_add_item
(
mediacontrol_Instance
*
self
,
const
char
*
psz_file
,
mediacontrol_Exception
*
exception
)
{
exception
=
mediacontrol_exception_init
(
exception
);
if
(
!
self
->
p_playlist
)
{
RAISE
(
mediacontrol_InternalException
,
"No playlist"
);
return
;
}
playlist_Add
(
self
->
p_playlist
,
psz_file
,
psz_file
,
PLAYLIST_REPLACE
,
0
);
}
void
mediacontrol_playlist_clear
(
mediacontrol_Instance
*
self
,
mediacontrol_Exception
*
exception
)
{
exception
=
mediacontrol_exception_init
(
exception
);
if
(
!
self
->
p_playlist
)
{
RAISE
(
mediacontrol_PlaylistException
,
"No playlist"
);
return
;
}
playlist_Clear
(
self
->
p_playlist
);
return
;
}
mediacontrol_PlaylistSeq
*
mediacontrol_playlist_get_list
(
mediacontrol_Instance
*
self
,
mediacontrol_Exception
*
exception
)
{
mediacontrol_PlaylistSeq
*
retval
;
int
i_index
;
playlist_t
*
p_playlist
=
self
->
p_playlist
;;
int
i_playlist_size
;
exception
=
mediacontrol_exception_init
(
exception
);
if
(
!
p_playlist
)
{
RAISE
(
mediacontrol_PlaylistException
,
"No playlist"
);
return
NULL
;
}
vlc_mutex_lock
(
&
p_playlist
->
object_lock
);
i_playlist_size
=
p_playlist
->
i_size
;
retval
=
mediacontrol_PlaylistSeq__alloc
(
i_playlist_size
);
for
(
i_index
=
0
;
i_index
<
i_playlist_size
;
i_index
++
)
{
retval
->
data
[
i_index
]
=
strdup
(
p_playlist
->
pp_items
[
i_index
]
->
input
.
psz_uri
);
}
vlc_mutex_unlock
(
&
p_playlist
->
object_lock
);
return
retval
;
}
mediacontrol_RGBPicture
*
_mediacontrol_createRGBPicture
(
int
i_width
,
int
i_height
,
long
i_chroma
,
long
long
l_date
,
char
*
p_data
,
int
i_datasize
)
{
mediacontrol_RGBPicture
*
retval
;
retval
=
mediacontrol_RGBPicture__alloc
(
i_datasize
);
if
(
retval
)
{
retval
->
width
=
i_width
;
retval
->
height
=
i_height
;
retval
->
type
=
i_chroma
;
retval
->
date
=
l_date
;
retval
->
size
=
i_datasize
;
memcpy
(
retval
->
data
,
p_data
,
i_datasize
);
}
return
retval
;
}
mediacontrol_RGBPicture
*
mediacontrol_snapshot
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
)
{
mediacontrol_RGBPicture
*
retval
=
NULL
;
input_thread_t
*
p_input
=
self
->
p_playlist
->
p_input
;
vout_thread_t
*
p_vout
=
NULL
;
int
i_datasize
;
snapshot_t
**
pointer
;
vlc_value_t
val
;
int
i_index
;
snapshot_t
*
p_best_snapshot
;
long
searched_date
;
#ifdef HAS_SNAPSHOT
int
i_cachesize
;
#endif
exception
=
mediacontrol_exception_init
(
exception
);
/*
if( var_Get( self->p_vlc, "snapshot-id", &val ) == VLC_SUCCESS )
p_vout = vlc_object_get( self->p_vlc, val.i_int );
*/
/* FIXME: if in p_libvlc, we cannot have multiple video outputs */
/* Once corrected, search for snapshot-id to modify all instances */
if
(
var_Get
(
p_input
,
"snapshot-id"
,
&
val
)
!=
VLC_SUCCESS
)
{
RAISE
(
mediacontrol_InternalException
,
"No snapshot-id in p_input"
);
return
NULL
;
}
p_vout
=
vlc_object_get
(
self
->
p_vlc
,
val
.
i_int
);
if
(
!
p_vout
)
{
RAISE
(
mediacontrol_InternalException
,
"No snapshot module"
);
return
NULL
;
}
#ifdef HAS_SNAPSHOT
/* We test if the vout is a snapshot module. We cannot test
pvout_psz_object_name( which is NULL ). But we can check if
there are snapshot-specific variables */
if
(
var_Get
(
p_vout
,
"snapshot-datasize"
,
&
val
)
!=
VLC_SUCCESS
)
{
RAISE
(
mediacontrol_InternalException
,
"No snapshot module"
);
vlc_object_release
(
p_vout
);
return
NULL
;
}
i_datasize
=
val
.
i_int
;
/* Handle the a_position parameter */
if
(
!
(
a_position
->
origin
==
mediacontrol_RelativePosition
&&
a_position
->
value
==
0
)
)
{
/* The position is not the current one. Go to it. */
mediacontrol_set_media_position
(
self
,
(
mediacontrol_Position
*
)
a_position
,
exception
);
if
(
exception
->
code
)
{
vlc_object_release
(
p_vout
);
return
NULL
;
}
}
/* FIXME: We should not go further until we got past the position
( which means that we had the possibility to capture the right
picture ). */
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
searched_date
=
mediacontrol_position2microsecond
(
p_input
,
(
mediacontrol_Position
*
)
a_position
);
var_Get
(
p_vout
,
"snapshot-cache-size"
,
&
val
);
i_cachesize
=
val
.
i_int
;
var_Get
(
p_vout
,
"snapshot-list-pointer"
,
&
val
);
pointer
=
(
snapshot_t
**
)
val
.
p_address
;
if
(
!
pointer
)
{
RAISE
(
mediacontrol_InternalException
,
"No available snapshot"
);
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_object_release
(
p_vout
);
return
NULL
;
}
/* Find the more appropriate picture, based on date */
p_best_snapshot
=
pointer
[
0
];
for
(
i_index
=
1
;
i_index
<
i_cachesize
;
i_index
++
)
{
long
l_diff
=
pointer
[
i_index
]
->
date
-
searched_date
;
if
(
l_diff
>
0
&&
l_diff
<
abs
(
p_best_snapshot
->
date
-
searched_date
))
{
/* This one is closer, and _after_ the requested position */
p_best_snapshot
=
pointer
[
i_index
];
}
}
/* FIXME: add a test for the case that no picture matched the test
( we have p_best_snapshot == pointer[0] */
retval
=
_mediacontrol_createRGBPicture
(
p_best_snapshot
->
i_width
,
p_best_snapshot
->
i_height
,
p_vout
->
output
.
i_chroma
,
p_best_snapshot
->
date
,
p_best_snapshot
->
p_data
,
i_datasize
);
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_object_release
(
p_vout
);
#endif
return
retval
;
}
mediacontrol_RGBPicture
**
mediacontrol_all_snapshots
(
mediacontrol_Instance
*
self
,
mediacontrol_Exception
*
exception
)
{
mediacontrol_RGBPicture
**
retval
=
NULL
;
vout_thread_t
*
p_vout
=
NULL
;
int
i_datasize
;
int
i_cachesize
;
vlc_value_t
val
;
int
i_index
;
#ifdef HAS_SNAPSHOT
snapshot_t
**
pointer
;
#endif
exception
=
mediacontrol_exception_init
(
exception
);
if
(
var_Get
(
self
->
p_playlist
->
p_input
,
"snapshot-id"
,
&
val
)
==
VLC_SUCCESS
)
p_vout
=
vlc_object_get
(
self
->
p_vlc
,
val
.
i_int
);
if
(
!
p_vout
)
{
RAISE
(
mediacontrol_InternalException
,
"No snapshot module"
);
return
NULL
;
}
#ifdef HAS_SNAPSHOT
/* We test if the vout is a snapshot module. We cannot test
pvout_psz_object_name( which is NULL ). But we can check if
there are snapshot-specific variables */
if
(
var_Get
(
p_vout
,
"snapshot-datasize"
,
&
val
)
!=
VLC_SUCCESS
)
{
RAISE
(
mediacontrol_InternalException
,
"No snapshot module"
);
vlc_object_release
(
p_vout
);
return
NULL
;
}
i_datasize
=
val
.
i_int
;
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
var_Get
(
p_vout
,
"snapshot-cache-size"
,
&
val
);
i_cachesize
=
val
.
i_int
;
var_Get
(
p_vout
,
"snapshot-list-pointer"
,
&
val
);
pointer
=
(
snapshot_t
**
)
val
.
p_address
;
if
(
!
pointer
)
{
RAISE
(
mediacontrol_InternalException
,
"No available picture"
);
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_object_release
(
p_vout
);
return
NULL
;
}
retval
=
(
mediacontrol_RGBPicture
**
)
malloc
(
(
i_cachesize
+
1
)
*
sizeof
(
char
*
));
for
(
i_index
=
0
;
i_index
<
i_cachesize
;
i_index
++
)
{
snapshot_t
*
p_s
=
pointer
[
i_index
];
mediacontrol_RGBPicture
*
p_rgb
;
p_rgb
=
_mediacontrol_createRGBPicture
(
p_s
->
i_width
,
p_s
->
i_height
,
p_vout
->
output
.
i_chroma
,
p_s
->
date
,
p_s
->
p_data
,
i_datasize
);
retval
[
i_index
]
=
p_rgb
;
}
retval
[
i_cachesize
]
=
NULL
;
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_object_release
(
p_vout
);
#endif
return
retval
;
}
void
mediacontrol_display_text
(
mediacontrol_Instance
*
self
,
const
char
*
message
,
const
mediacontrol_Position
*
begin
,
const
mediacontrol_Position
*
end
,
mediacontrol_Exception
*
exception
)
{
input_thread_t
*
p_input
=
NULL
;
vout_thread_t
*
p_vout
=
NULL
;
p_vout
=
vlc_object_find
(
self
->
p_playlist
,
VLC_OBJECT_VOUT
,
FIND_CHILD
);
if
(
!
p_vout
)
{
RAISE
(
mediacontrol_InternalException
,
"No video output"
);
return
;
}
if
(
begin
->
origin
==
mediacontrol_RelativePosition
&&
begin
->
value
==
0
&&
end
->
origin
==
mediacontrol_RelativePosition
)
{
mtime_t
i_duration
=
0
;
i_duration
=
1000
*
mediacontrol_unit_convert
(
self
->
p_playlist
->
p_input
,
end
->
key
,
mediacontrol_MediaTime
,
end
->
value
);
vout_ShowTextRelative
(
p_vout
,
DEFAULT_CHAN
,
(
char
*
)
message
,
NULL
,
OSD_ALIGN_BOTTOM
|
OSD_ALIGN_LEFT
,
20
,
20
,
i_duration
);
}
else
{
mtime_t
i_debut
,
i_fin
,
i_now
;
p_input
=
self
->
p_playlist
->
p_input
;
if
(
!
p_input
)
{
RAISE
(
mediacontrol_InternalException
,
"No input"
);
vlc_object_release
(
p_vout
);
return
;
}
/* FIXME */
/* i_now = input_ClockGetTS( p_input, NULL, 0 ); */
i_now
=
0
;
i_debut
=
mediacontrol_position2microsecond
(
p_input
,
(
mediacontrol_Position
*
)
begin
);
i_debut
+=
i_now
;
i_fin
=
mediacontrol_position2microsecond
(
p_input
,
(
mediacontrol_Position
*
)
end
);
i_fin
+=
i_now
;
vout_ShowTextAbsolute
(
p_vout
,
DEFAULT_CHAN
,
(
char
*
)
message
,
NULL
,
OSD_ALIGN_BOTTOM
|
OSD_ALIGN_LEFT
,
20
,
20
,
i_debut
,
i_fin
);
}
vlc_object_release
(
p_vout
);
}
mediacontrol_StreamInformation
*
mediacontrol_get_stream_information
(
mediacontrol_Instance
*
self
,
mediacontrol_PositionKey
a_key
,
mediacontrol_Exception
*
exception
)
{
mediacontrol_StreamInformation
*
retval
;
input_thread_t
*
p_input
=
self
->
p_playlist
->
p_input
;
vlc_value_t
val
;
retval
=
(
mediacontrol_StreamInformation
*
)
malloc
(
sizeof
(
mediacontrol_StreamInformation
)
);
if
(
!
retval
)
{
RAISE
(
mediacontrol_InternalException
,
"Out of memory"
);
return
NULL
;
}
if
(
!
p_input
)
{
/* No p_input defined */
retval
->
streamstatus
=
mediacontrol_UndefinedStatus
;
retval
->
url
=
strdup
(
"None"
);
retval
->
position
=
0
;
retval
->
length
=
0
;
}
else
{
switch
(
var_GetInteger
(
p_input
,
"state"
)
)
{
case
PLAYING_S
:
retval
->
streamstatus
=
mediacontrol_PlayingStatus
;
break
;
case
PAUSE_S
:
retval
->
streamstatus
=
mediacontrol_PauseStatus
;
break
;
case
INIT_S
:
retval
->
streamstatus
=
mediacontrol_InitStatus
;
break
;
case
END_S
:
retval
->
streamstatus
=
mediacontrol_EndStatus
;
break
;
default
:
retval
->
streamstatus
=
mediacontrol_UndefinedStatus
;
break
;
}
retval
->
url
=
strdup
(
p_input
->
input
.
p_item
->
psz_uri
);
/* TIME and LENGTH are in microseconds. We want them in ms */
var_Get
(
p_input
,
"time"
,
&
val
);
retval
->
position
=
val
.
i_time
/
1000
;
var_Get
(
p_input
,
"length"
,
&
val
);
retval
->
length
=
val
.
i_time
/
1000
;
retval
->
position
=
mediacontrol_unit_convert
(
p_input
,
mediacontrol_MediaTime
,
a_key
,
retval
->
position
);
retval
->
length
=
mediacontrol_unit_convert
(
p_input
,
mediacontrol_MediaTime
,
a_key
,
retval
->
length
);
}
return
retval
;
}
unsigned
short
mediacontrol_sound_get_volume
(
mediacontrol_Instance
*
self
,
mediacontrol_Exception
*
exception
)
{
short
retval
;
audio_volume_t
i_volume
;
if
(
!
self
->
p_intf
)
{
RAISE
(
mediacontrol_InternalException
,
"No interface module"
);
return
0
;
}
aout_VolumeGet
(
self
->
p_intf
,
&
i_volume
);
retval
=
i_volume
;
return
retval
;
}
void
mediacontrol_sound_set_volume
(
mediacontrol_Instance
*
self
,
const
unsigned
short
volume
,
mediacontrol_Exception
*
exception
)
{
if
(
!
self
->
p_intf
)
{
RAISE
(
mediacontrol_InternalException
,
"No interface module"
);
return
;
}
aout_VolumeSet
(
self
->
p_intf
,(
audio_volume_t
)
volume
);
}
modules/control/corba/mediacontrol-core.h
deleted
100644 → 0
View file @
3dfa9f43
#ifndef __mediacontrol_core_h
#define __mediacontrol_core_h
#ifndef __VLC__
#define __VLC__
#endif
#include <vlc/vlc.h>
/************************************************************************
* Position Object Manipulation
*************************************************************************/
typedef
enum
{
mediacontrol_AbsolutePosition
,
mediacontrol_RelativePosition
,
mediacontrol_ModuloPosition
}
mediacontrol_PositionOrigin
;
typedef
enum
{
mediacontrol_ByteCount
,
mediacontrol_SampleCount
,
mediacontrol_MediaTime
}
mediacontrol_PositionKey
;
typedef
struct
{
mediacontrol_PositionOrigin
origin
;
mediacontrol_PositionKey
key
;
long
value
;
}
mediacontrol_Position
;
typedef
struct
{
int
width
;
int
height
;
long
type
;
long
long
date
;
int
size
;
char
*
data
;
}
mediacontrol_RGBPicture
;
typedef
struct
{
int
size
;
char
**
data
;
}
mediacontrol_PlaylistSeq
;
typedef
struct
{
int
code
;
char
*
message
;
}
mediacontrol_Exception
;
/* Exception codes */
#define mediacontrol_PositionKeyNotSupported 1
#define mediacontrol_PositionOriginNotSupported 2
#define mediacontrol_InvalidPosition 3
#define mediacontrol_PlaylistException 4
#define mediacontrol_InternalException 5
typedef
struct
{
vlc_object_t
*
p_vlc
;
playlist_t
*
p_playlist
;
intf_thread_t
*
p_intf
;
int
vlc_object_id
;
}
mediacontrol_Instance
;
/* Cf stream_control.h */
enum
mediacontrol_PlayerStatusList
{
mediacontrol_PlayingStatus
,
mediacontrol_PauseStatus
,
mediacontrol_ForwardStatus
,
mediacontrol_BackwardStatus
,
mediacontrol_InitStatus
,
mediacontrol_EndStatus
,
mediacontrol_UndefinedStatus
};
typedef
enum
mediacontrol_PlayerStatusList
mediacontrol_PlayerStatus
;
typedef
struct
{
mediacontrol_PlayerStatus
streamstatus
;
char
*
url
;
/* The URL of the current media stream */
long
long
position
;
/* actual location in the stream (in ms) */
long
long
length
;
/* total length of the stream (in ms) */
}
mediacontrol_StreamInformation
;
/* Helper functions */
long
long
mediacontrol_unit_convert
(
input_thread_t
*
p_input
,
mediacontrol_PositionKey
from
,
mediacontrol_PositionKey
to
,
long
long
value
);
long
long
mediacontrol_position2microsecond
(
input_thread_t
*
p_input
,
const
mediacontrol_Position
*
pos
);
mediacontrol_RGBPicture
*
mediacontrol_RGBPicture__alloc
(
int
datasize
);
void
mediacontrol_RGBPicture__free
(
mediacontrol_RGBPicture
*
pic
);
mediacontrol_PlaylistSeq
*
mediacontrol_PlaylistSeq__alloc
(
int
size
);
void
mediacontrol_PlaylistSeq__free
(
mediacontrol_PlaylistSeq
*
ps
);
mediacontrol_Exception
*
mediacontrol_exception_init
(
mediacontrol_Exception
*
exception
);
void
mediacontrol_exception_free
(
mediacontrol_Exception
*
exception
);
mediacontrol_Instance
*
mediacontrol_new
(
char
**
args
,
mediacontrol_Exception
*
exception
);
mediacontrol_Instance
*
mediacontrol_new_from_object
(
vlc_object_t
*
p_object
,
mediacontrol_Exception
*
exception
);
mediacontrol_Position
*
mediacontrol_get_media_position
(
mediacontrol_Instance
*
self
,
mediacontrol_PositionOrigin
an_origin
,
mediacontrol_PositionKey
a_key
,
mediacontrol_Exception
*
exception
);
void
mediacontrol_set_media_position
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
);
void
mediacontrol_start
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
);
void
mediacontrol_pause
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
);
void
mediacontrol_resume
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
);
void
mediacontrol_stop
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
);
void
mediacontrol_exit
(
mediacontrol_Instance
*
self
);
void
mediacontrol_playlist_add_item
(
mediacontrol_Instance
*
self
,
const
char
*
psz_file
,
mediacontrol_Exception
*
exception
);
void
mediacontrol_playlist_clear
(
mediacontrol_Instance
*
self
,
mediacontrol_Exception
*
exception
);
mediacontrol_PlaylistSeq
*
mediacontrol_playlist_get_list
(
mediacontrol_Instance
*
self
,
mediacontrol_Exception
*
exception
);
mediacontrol_RGBPicture
*
mediacontrol_snapshot
(
mediacontrol_Instance
*
self
,
const
mediacontrol_Position
*
a_position
,
mediacontrol_Exception
*
exception
);
/* Return a NULL terminated list */
mediacontrol_RGBPicture
**
mediacontrol_all_snapshots
(
mediacontrol_Instance
*
self
,
mediacontrol_Exception
*
exception
);
// Displays the message string, between "begin" and "end" positions
void
mediacontrol_display_text
(
mediacontrol_Instance
*
self
,
const
char
*
message
,
const
mediacontrol_Position
*
begin
,
const
mediacontrol_Position
*
end
,
mediacontrol_Exception
*
exception
);
mediacontrol_StreamInformation
*
mediacontrol_get_stream_information
(
mediacontrol_Instance
*
self
,
mediacontrol_PositionKey
a_key
,
mediacontrol_Exception
*
exception
);
unsigned
short
mediacontrol_sound_get_volume
(
mediacontrol_Instance
*
self
,
mediacontrol_Exception
*
exception
);
void
mediacontrol_sound_set_volume
(
mediacontrol_Instance
*
self
,
const
unsigned
short
volume
,
mediacontrol_Exception
*
exception
);
#endif
modules/control/corba/mediacontrol-init.c
deleted
100644 → 0
View file @
3dfa9f43
#include "mediacontrol-core.h"
mediacontrol_Instance
*
mediacontrol_new
(
char
**
args
,
mediacontrol_Exception
*
exception
)
{
mediacontrol_Instance
*
retval
;
vlc_object_t
*
p_vlc
;
int
p_vlc_id
;
char
**
ppsz_argv
;
int
i_count
=
0
;
int
i_index
;
char
**
p_tmp
;
if
(
args
)
{
for
(
p_tmp
=
args
;
*
p_tmp
!=
NULL
;
p_tmp
++
)
i_count
++
;
}
ppsz_argv
=
malloc
(
i_count
+
2
);
ppsz_argv
[
0
]
=
strdup
(
"vlc"
);
for
(
i_index
=
0
;
i_index
<
i_count
;
i_index
++
)
ppsz_argv
[
i_index
+
1
]
=
strdup
(
args
[
i_index
]
);
ppsz_argv
[
i_count
+
1
]
=
NULL
;
p_vlc_id
=
VLC_Create
();
p_vlc
=
(
vlc_object_t
*
)
vlc_current_object
(
p_vlc_id
);
if
(
!
p_vlc
)
{
exception
->
code
=
mediacontrol_InternalException
;
exception
->
message
=
strdup
(
"Unable to initialize VLC"
);
return
NULL
;
}
retval
=
(
mediacontrol_Instance
*
)
malloc
(
sizeof
(
mediacontrol_Instance
)
);
VLC_Init
(
p_vlc_id
,
i_count
+
1
,
ppsz_argv
);
retval
->
p_vlc
=
p_vlc
;
retval
->
vlc_object_id
=
p_vlc_id
;
/* We can keep references on these, which should not change. Is it true ? */
retval
->
p_playlist
=
vlc_object_find
(
p_vlc
,
VLC_OBJECT_PLAYLIST
,
FIND_ANYWHERE
);
retval
->
p_intf
=
vlc_object_find
(
p_vlc
,
VLC_OBJECT_INTF
,
FIND_ANYWHERE
);
if
(
!
retval
->
p_playlist
||
!
retval
->
p_intf
)
{
exception
->
code
=
mediacontrol_InternalException
;
exception
->
message
=
strdup
(
"No available interface"
);
return
NULL
;
}
return
retval
;
};
void
mediacontrol_exit
(
mediacontrol_Instance
*
self
)
{
vlc_object_release
(
(
vlc_object_t
*
)
self
->
p_playlist
);
vlc_object_release
(
(
vlc_object_t
*
)
self
->
p_intf
);
VLC_CleanUp
(
self
->
vlc_object_id
);
VLC_Destroy
(
self
->
vlc_object_id
);
}
modules/control/corba/mediacontrol-plugin.c
deleted
100644 → 0
View file @
3dfa9f43
#include "mediacontrol-core.h"
#include <vlc/intf.h>
mediacontrol_Instance
*
mediacontrol_new
(
char
**
args
,
mediacontrol_Exception
*
exception
)
{
exception
->
code
=
mediacontrol_InternalException
;
exception
->
message
=
strdup
(
"The mediacontrol extension was compiled for plugin use only."
);
return
NULL
;
};
void
mediacontrol_exit
(
mediacontrol_Instance
*
self
)
{
/*
vlc_object_release( self->p_playlist );
*/
vlc_mutex_lock
(
&
self
->
p_intf
->
change_lock
);
self
->
p_intf
->
b_die
=
1
;
vlc_mutex_unlock
(
&
self
->
p_intf
->
change_lock
);
/*
vlc_object_release( self->p_intf );
vlc_object_release( self->p_vlc );
*/
}
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