Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
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
Commits
1171979d
Commit
1171979d
authored
Mar 11, 2003
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* ALL: experimental code for stream (dvd) navigation through object variables.
parent
cfcd2ca2
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
356 additions
and
70 deletions
+356
-70
include/input_ext-plugins.h
include/input_ext-plugins.h
+2
-2
include/variables.h
include/variables.h
+8
-4
modules/access/dvd/access.c
modules/access/dvd/access.c
+24
-6
modules/access/dvdplay/access.c
modules/access/dvdplay/access.c
+33
-15
modules/access/dvdread/input.c
modules/access/dvdread/input.c
+23
-6
modules/access/satellite/access.c
modules/access/satellite/access.c
+5
-0
modules/access/vcd/vcd.c
modules/access/vcd/vcd.c
+20
-6
modules/gui/wxwindows/popup.cpp
modules/gui/wxwindows/popup.cpp
+23
-20
src/input/input.c
src/input/input.c
+2
-2
src/input/input_ext-intf.c
src/input/input_ext-intf.c
+6
-1
src/input/input_programs.c
src/input/input_programs.c
+182
-6
src/misc/variables.c
src/misc/variables.c
+28
-2
No files found.
include/input_ext-plugins.h
View file @
1171979d
...
...
@@ -3,7 +3,7 @@
* but exported to plug-ins
*****************************************************************************
* Copyright (C) 1999-2002 VideoLAN
* $Id: input_ext-plugins.h,v 1.4
0 2003/03/04 13:21:19 massiot
Exp $
* $Id: input_ext-plugins.h,v 1.4
1 2003/03/11 23:56:53 gbazin
Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
...
...
@@ -44,7 +44,7 @@ VLC_EXPORT( pgrm_descriptor_t *, input_FindProgram,( input_thread_t *, uint16_t
VLC_EXPORT
(
pgrm_descriptor_t
*
,
input_AddProgram
,
(
input_thread_t
*
,
uint16_t
,
size_t
)
);
VLC_EXPORT
(
void
,
input_DelProgram
,(
input_thread_t
*
,
pgrm_descriptor_t
*
)
);
VLC_EXPORT
(
int
,
input_SetProgram
,(
input_thread_t
*
,
pgrm_descriptor_t
*
)
);
VLC_EXPORT
(
input_area_t
*
,
input_AddArea
,(
input_thread_t
*
)
);
VLC_EXPORT
(
input_area_t
*
,
input_AddArea
,(
input_thread_t
*
,
uint16_t
,
uint16_t
)
);
VLC_EXPORT
(
void
,
input_DelArea
,
(
input_thread_t
*
,
input_area_t
*
)
);
VLC_EXPORT
(
es_descriptor_t
*
,
input_FindES
,(
input_thread_t
*
,
uint16_t
)
);
VLC_EXPORT
(
es_descriptor_t
*
,
input_AddES
,
(
input_thread_t
*
,
pgrm_descriptor_t
*
,
uint16_t
,
size_t
)
);
...
...
include/variables.h
View file @
1171979d
...
...
@@ -2,7 +2,7 @@
* variables.h: variables handling
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: variables.h,v 1.1
1 2002/12/14 19:34:07
gbazin Exp $
* $Id: variables.h,v 1.1
2 2003/03/11 23:56:53
gbazin Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
...
...
@@ -75,6 +75,7 @@ struct variable_t
#define VLC_VAR_MODULE 0x0041
#define VLC_VAR_FILE 0x0042
#define VLC_VAR_DIRECTORY 0x0043
#define VLC_VAR_VARIABLE 0x0044
#define VLC_VAR_FLOAT 0x0050
#define VLC_VAR_TIME 0x0060
#define VLC_VAR_ADDRESS 0x0070
...
...
@@ -97,11 +98,14 @@ struct variable_t
#define VLC_VAR_SETMAX 0x0011
#define VLC_VAR_SETSTEP 0x0012
#define VLC_VAR_SETVALUE 0x0013
#define VLC_VAR_ADDCHOICE 0x0020
#define VLC_VAR_DELCHOICE 0x0021
#define VLC_VAR_SETDEFAULT 0x0022
#define VLC_VAR_GETLIST 0x0023
#define VLC_VAR_FREELIST 0x0024
#define VLC_VAR_CLEARCHOICES 0x0022
#define VLC_VAR_SETDEFAULT 0x0023
#define VLC_VAR_GETLIST 0x0024
#define VLC_VAR_FREELIST 0x0025
/*****************************************************************************
* Prototypes
...
...
modules/access/dvd/access.c
View file @
1171979d
...
...
@@ -8,7 +8,7 @@
* -udf.* to find files
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
* $Id: access.c,v 1.1
0 2003/02/08 22:20:28 massiot
Exp $
* $Id: access.c,v 1.1
1 2003/03/11 23:56:53 gbazin
Exp $
*
* Author: Stphane Borel <stef@via.ecp.fr>
*
...
...
@@ -206,10 +206,8 @@ int E_(DVDOpen) ( vlc_object_t *p_this )
* is reserved for video_ts.vob */
for
(
i
=
1
;
i
<=
title_inf
.
i_title_nb
;
i
++
)
{
input_AddArea
(
p_input
);
/* Titles are Program Chains */
area
[
i
]
->
i_id
=
i
;
input_AddArea
(
p_input
,
i
,
title_inf
.
p_attr
[
i
-
1
].
i_chapter_nb
)
;
/* Absolute start offset and size
* We can only set that with vts ifo, so we do it during the
...
...
@@ -217,8 +215,7 @@ int E_(DVDOpen) ( vlc_object_t *p_this )
area
[
i
]
->
i_start
=
0
;
area
[
i
]
->
i_size
=
0
;
/* Number of chapters */
area
[
i
]
->
i_part_nb
=
title_inf
.
p_attr
[
i
-
1
].
i_chapter_nb
;
/* Default Chapter */
area
[
i
]
->
i_part
=
1
;
/* Offset to vts_i_0.ifo */
...
...
@@ -291,6 +288,7 @@ static int DVDSetProgram( input_thread_t * p_input,
{
thread_dvd_data_t
*
p_dvd
;
int
i_angle
;
vlc_value_t
val
;
p_dvd
=
(
thread_dvd_data_t
*
)(
p_input
->
p_access_data
);
i_angle
=
p_program
->
i_number
;
...
...
@@ -325,6 +323,10 @@ static int DVDSetProgram( input_thread_t * p_input,
}
#undef title
msg_Dbg
(
p_input
,
"angle %d selected"
,
p_dvd
->
i_angle
);
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_program
->
i_number
;
var_Change
(
p_input
,
"program"
,
VLC_VAR_SETVALUE
,
&
val
);
}
return
0
;
...
...
@@ -390,6 +392,7 @@ static int DVDReadAngle( input_thread_t * p_input )
static
int
DVDSetArea
(
input_thread_t
*
p_input
,
input_area_t
*
p_area
)
{
thread_dvd_data_t
*
p_dvd
;
vlc_value_t
val
;
p_dvd
=
(
thread_dvd_data_t
*
)(
p_input
->
p_access_data
);
...
...
@@ -401,6 +404,7 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
int
i_vts_title
;
u32
i_first
;
u32
i_last
;
unsigned
int
i
;
/* Reset the Chapter position of the old title */
p_input
->
stream
.
p_selected_area
->
i_part
=
1
;
...
...
@@ -495,6 +499,16 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
DVDLaunchDecoders
(
p_input
);
}
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_area
->
i_id
;
var_Change
(
p_input
,
"title"
,
VLC_VAR_SETVALUE
,
&
val
);
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_CLEARCHOICES
,
NULL
);
for
(
i
=
1
;
i
<=
p_area
->
i_part_nb
;
i
++
)
{
val
.
i_int
=
i
;
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_ADDCHOICE
,
&
val
);
}
}
/* i_title >= 0 */
else
{
...
...
@@ -510,6 +524,10 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
p_input
->
stream
.
b_seekable
=
1
;
p_input
->
stream
.
b_changed
=
1
;
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_area
->
i_part
;
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_SETVALUE
,
&
val
);
return
0
;
}
#undef vts
...
...
modules/access/dvdplay/access.c
View file @
1171979d
...
...
@@ -2,7 +2,7 @@
* access.c: access capabilities for dvdplay plugin.
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: access.c,v 1.1
2 2003/03/09 19:25:09
gbazin Exp $
* $Id: access.c,v 1.1
3 2003/03/11 23:56:53
gbazin Exp $
*
* Author: Stphane Borel <stef@via.ecp.fr>
*
...
...
@@ -45,10 +45,6 @@
# include <strings.h>
#endif
#if defined( WIN32 )
# include <io.h>
/* read() */
#endif
#include "dvd.h"
#include "es.h"
#include "tools.h"
...
...
@@ -147,17 +143,12 @@ int E_(OpenDVD) ( vlc_object_t *p_this )
/* Area 0 for menu */
area
[
0
]
->
i_plugin_data
=
0
;
input_DelArea
(
p_input
,
p_input
->
stream
.
pp_areas
[
0
]
);
input_AddArea
(
p_input
,
0
,
1
);
for
(
i
=
1
;
i
<=
i_title_nr
;
i
++
)
{
input_AddArea
(
p_input
);
/* Titles id */
area
[
i
]
->
i_id
=
i
;
/* Number of chapters */
area
[
i
]
->
i_part_nb
=
dvdplay_chapter_nr
(
p_dvd
->
vmg
,
i
);
input_AddArea
(
p_input
,
i
,
dvdplay_chapter_nr
(
p_dvd
->
vmg
,
i
)
);
area
[
i
]
->
i_plugin_data
=
0
;
}
#undef area
...
...
@@ -244,6 +235,7 @@ static int dvdplay_SetProgram( input_thread_t * p_input,
{
dvd_data_t
*
p_dvd
;
int
i_angle
;
vlc_value_t
val
;
p_dvd
=
(
dvd_data_t
*
)(
p_input
->
p_access_data
);
i_angle
=
p_program
->
i_number
;
...
...
@@ -257,6 +249,10 @@ static int dvdplay_SetProgram( input_thread_t * p_input,
msg_Dbg
(
p_input
,
"angle %d selected"
,
i_angle
);
}
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_program
->
i_number
;
var_Change
(
p_input
,
"program"
,
VLC_VAR_SETVALUE
,
&
val
);
}
return
0
;
...
...
@@ -272,6 +268,7 @@ static int dvdplay_SetProgram( input_thread_t * p_input,
static
int
dvdplay_SetArea
(
input_thread_t
*
p_input
,
input_area_t
*
p_area
)
{
dvd_data_t
*
p_dvd
;
vlc_value_t
val
;
p_dvd
=
(
dvd_data_t
*
)
p_input
->
p_access_data
;
...
...
@@ -322,6 +319,10 @@ static int dvdplay_SetArea( input_thread_t * p_input, input_area_t * p_area )
LB2OFF
(
dvdplay_position
(
p_dvd
->
vmg
)
)
-
p_area
->
i_start
;
p_input
->
stream
.
b_changed
=
1
;
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_area
->
i_part
;
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_SETVALUE
,
&
val
);
return
0
;
}
...
...
@@ -395,7 +396,6 @@ static void pf_vmg_callback( void* p_args, dvdplay_event_t event )
case
NEW_VTS
:
break
;
case
NEW_FILE
:
break
;
case
NEW_PGC
:
/* prevent intf to try to seek by default */
...
...
@@ -428,6 +428,10 @@ static void pf_vmg_callback( void* p_args, dvdplay_event_t event )
/* warn interface that something has changed */
p_input
->
stream
.
b_changed
=
1
;
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_input
->
stream
.
p_selected_area
->
i_part
;
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_SETVALUE
,
&
val
);
break
;
case
NEW_CELL
:
p_dvd
->
b_end_of_cell
=
0
;
...
...
@@ -497,6 +501,7 @@ static int dvdNewArea( input_thread_t * p_input, input_area_t * p_area )
{
dvd_data_t
*
p_dvd
;
int
i_angle_nb
,
i_angle
;
vlc_value_t
val
;
int
i
;
p_dvd
=
(
dvd_data_t
*
)
p_input
->
p_access_data
;
...
...
@@ -526,6 +531,20 @@ static int dvdNewArea( input_thread_t * p_input, input_area_t * p_area )
/* No PSM to read in DVD mode, we already have all information */
p_input
->
stream
.
p_selected_program
->
b_is_ok
=
1
;
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_area
->
i_id
;
var_Change
(
p_input
,
"title"
,
VLC_VAR_SETVALUE
,
&
val
);
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_CLEARCHOICES
,
NULL
);
for
(
i
=
1
;
(
unsigned
int
)
i
<=
p_area
->
i_part_nb
;
i
++
)
{
val
.
i_int
=
i
;
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_ADDCHOICE
,
&
val
);
}
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_area
->
i_part
;
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_SETVALUE
,
&
val
);
return
0
;
}
...
...
@@ -568,4 +587,3 @@ static int dvdNewPGC( input_thread_t * p_input )
return
0
;
}
modules/access/dvdread/input.c
View file @
1171979d
...
...
@@ -6,7 +6,7 @@
* It depends on: libdvdread for ifo files and block reading.
*****************************************************************************
* Copyright (C) 2001, 2003 VideoLAN
* $Id: input.c,v 1.1
6 2003/02/02 00:49:40 massiot
Exp $
* $Id: input.c,v 1.1
7 2003/03/11 23:56:53 gbazin
Exp $
*
* Author: Stphane Borel <stef@via.ecp.fr>
*
...
...
@@ -383,10 +383,8 @@ int E_(OpenDVD) ( vlc_object_t *p_this )
* is reserved for video_ts.vob */
for
(
i
=
1
;
i
<=
tt_srpt
->
nr_of_srpts
;
i
++
)
{
input_AddArea
(
p_input
);
/* Titles are Program Chains */
area
[
i
]
->
i_id
=
i
;
input_AddArea
(
p_input
,
i
,
tt_srpt
->
title
[
i
-
1
].
nr_of_ptts
)
;
/* Absolute start offset and size
* We can only set that with vts ifo, so we do it during the
...
...
@@ -394,8 +392,7 @@ int E_(OpenDVD) ( vlc_object_t *p_this )
area
[
i
]
->
i_start
=
0
;
area
[
i
]
->
i_size
=
0
;
/* Number of chapters */
area
[
i
]
->
i_part_nb
=
tt_srpt
->
title
[
i
-
1
].
nr_of_ptts
;
/* Default Chapter */
area
[
i
]
->
i_part
=
1
;
area
[
i
]
->
i_plugin_data
=
tt_srpt
->
title
[
i
-
1
].
title_set_nr
;
...
...
@@ -465,6 +462,7 @@ static int DvdReadSetProgram( input_thread_t * p_input,
if
(
p_input
->
stream
.
p_selected_program
!=
p_program
)
{
thread_dvd_data_t
*
p_dvd
;
vlc_value_t
val
;
p_dvd
=
(
thread_dvd_data_t
*
)(
p_input
->
p_access_data
);
p_dvd
->
i_angle
=
p_program
->
i_number
;
...
...
@@ -475,6 +473,10 @@ static int DvdReadSetProgram( input_thread_t * p_input,
p_input
->
stream
.
p_selected_program
=
p_program
;
msg_Dbg
(
p_input
,
"angle %d selected"
,
p_dvd
->
i_angle
);
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_program
->
i_number
;
var_Change
(
p_input
,
"program"
,
VLC_VAR_SETVALUE
,
&
val
);
}
return
VLC_SUCCESS
;
...
...
@@ -494,6 +496,7 @@ static int DvdReadSetArea( input_thread_t * p_input, input_area_t * p_area )
thread_dvd_data_t
*
p_dvd
;
int
pgc_id
=
0
;
int
pgn
=
0
;
vlc_value_t
val
;
p_dvd
=
(
thread_dvd_data_t
*
)
p_input
->
p_access_data
;
...
...
@@ -794,6 +797,16 @@ static int DvdReadSetArea( input_thread_t * p_input, input_area_t * p_area )
DvdReadLauchDecoders
(
p_input
);
}
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_area
->
i_id
;
var_Change
(
p_input
,
"title"
,
VLC_VAR_SETVALUE
,
&
val
);
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_CLEARCHOICES
,
NULL
);
for
(
i
=
1
;
i
<=
p_area
->
i_part_nb
;
i
++
)
{
val
.
i_int
=
i
;
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_ADDCHOICE
,
&
val
);
}
}
/* i_title >= 0 */
else
{
...
...
@@ -838,6 +851,10 @@ static int DvdReadSetArea( input_thread_t * p_input, input_area_t * p_area )
p_input
->
stream
.
b_seekable
=
VLC_TRUE
;
p_input
->
stream
.
b_changed
=
VLC_TRUE
;
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_area
->
i_part
;
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_SETVALUE
,
&
val
);
return
VLC_SUCCESS
;
}
...
...
modules/access/satellite/access.c
View file @
1171979d
...
...
@@ -382,6 +382,7 @@ int SatelliteSetProgram( input_thread_t * p_input,
pgrm_descriptor_t
*
p_new_prg
)
{
unsigned
int
i_es_index
;
vlc_value_t
val
;
if
(
p_input
->
stream
.
p_selected_program
)
{
...
...
@@ -434,6 +435,10 @@ int SatelliteSetProgram( input_thread_t * p_input,
p_input
->
stream
.
p_selected_program
=
p_new_prg
;
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_new_prg
->
i_number
;
var_Change
(
p_input
,
"program"
,
VLC_VAR_SETVALUE
,
&
val
);
return
0
;
}
...
...
modules/access/vcd/vcd.c
View file @
1171979d
...
...
@@ -2,7 +2,7 @@
* vcd.c : VCD input module for vlc
*****************************************************************************
* Copyright (C) 2000 VideoLAN
* $Id: vcd.c,v 1.1
5 2003/02/12 17:13:33 jobi
Exp $
* $Id: vcd.c,v 1.1
6 2003/03/11 23:56:54 gbazin
Exp $
*
* Author: Johan Bilien <jobi@via.ecp.fr>
*
...
...
@@ -224,18 +224,15 @@ static int VCDOpen( vlc_object_t *p_this )
#define area p_input->stream.pp_areas
for
(
i
=
1
;
i
<=
p_vcd
->
i_nb_tracks
-
1
;
i
++
)
{
input_AddArea
(
p_input
);
/* Titles are Program Chains */
area
[
i
]
->
i_id
=
i
;
input_AddArea
(
p_input
,
i
,
1
)
;
/* Absolute start offset and size */
area
[
i
]
->
i_start
=
(
off_t
)
p_vcd
->
p_sectors
[
i
]
*
(
off_t
)
VCD_DATA_SIZE
;
area
[
i
]
->
i_size
=
(
off_t
)(
p_vcd
->
p_sectors
[
i
+
1
]
-
p_vcd
->
p_sectors
[
i
])
*
(
off_t
)
VCD_DATA_SIZE
;
/* Number of chapters */
area
[
i
]
->
i_part_nb
=
1
;
/* will be the entry points */
/* Default Chapter */
area
[
i
]
->
i_part
=
1
;
/* i_plugin_data is used to store which entry point is the first
...
...
@@ -388,6 +385,7 @@ static int VCDSetProgram( input_thread_t * p_input,
static
int
VCDSetArea
(
input_thread_t
*
p_input
,
input_area_t
*
p_area
)
{
thread_vcd_data_t
*
p_vcd
;
vlc_value_t
val
;
p_vcd
=
(
thread_vcd_data_t
*
)
p_input
->
p_access_data
;
...
...
@@ -396,6 +394,8 @@ static int VCDSetArea( input_thread_t * p_input, input_area_t * p_area )
if
(
p_area
!=
p_input
->
stream
.
p_selected_area
)
{
unsigned
int
i
;
/* Reset the Chapter position of the current title */
p_input
->
stream
.
p_selected_area
->
i_part
=
1
;
p_input
->
stream
.
p_selected_area
->
i_tell
=
0
;
...
...
@@ -407,6 +407,16 @@ static int VCDSetArea( input_thread_t * p_input, input_area_t * p_area )
/* The first track is not a valid one */
p_vcd
->
i_track
=
p_area
->
i_id
;
p_vcd
->
i_sector
=
p_vcd
->
p_sectors
[
p_vcd
->
i_track
];
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_area
->
i_id
;
var_Change
(
p_input
,
"title"
,
VLC_VAR_SETVALUE
,
&
val
);
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_CLEARCHOICES
,
NULL
);
for
(
i
=
1
;
i
<=
p_area
->
i_part_nb
;
i
++
)
{
val
.
i_int
=
i
;
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_ADDCHOICE
,
&
val
);
}
}
if
(
p_vcd
->
b_valid_ep
)
...
...
@@ -427,6 +437,10 @@ static int VCDSetArea( input_thread_t * p_input, input_area_t * p_area )
p_input
->
stream
.
b_seekable
=
1
;
p_input
->
stream
.
b_changed
=
1
;
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_area
->
i_part
;
var_Change
(
p_input
,
"chapter"
,
VLC_VAR_SETVALUE
,
&
val
);
return
0
;
}
...
...
modules/gui/wxwindows/popup.cpp
View file @
1171979d
...
...
@@ -2,7 +2,7 @@
* popup.cpp : wxWindows plugin for vlc
*****************************************************************************
* Copyright (C) 2000-2001 VideoLAN
* $Id: popup.cpp,v 1.
3 2003/01/26 10:36:10
gbazin Exp $
* $Id: popup.cpp,v 1.
4 2003/03/11 23:56:54
gbazin Exp $
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
*
...
...
@@ -118,6 +118,7 @@ PopupMenu::PopupMenu( intf_thread_t *_p_intf, Interface *_p_main_interface ):
CreateMenuEntry
(
"title"
,
p_object
);
CreateMenuEntry
(
"chapter"
,
p_object
);
CreateMenuEntry
(
"navigation"
,
p_object
);
vlc_object_release
(
p_object
);
...
...
@@ -207,43 +208,40 @@ wxMenu *PopupMenu::CreateSubMenu( char *psz_var, vlc_object_t *p_object )
{
wxMenu
*
menu
=
new
wxMenu
;
vlc_value_t
val
;
char
*
psz_value
;
vlc_value_t
val_list
;
int
i_type
,
i
;
/* Check the type of the object variable */
i_type
=
var_Type
(
p_object
,
psz_var
);
switch
(
i_type
)
{
case
VLC_VAR_VOID
:
case
VLC_VAR_STRING
:
break
;
default:
break
;
}
if
(
var_Get
(
p_object
,
psz_var
,
&
val
)
<
0
)
{
return
NULL
;
}
psz_value
=
val
.
psz_string
;
if
(
var_Change
(
p_object
,
psz_var
,
VLC_VAR_GETLIST
,
&
val
)
<
0
)
if
(
var_Change
(
p_object
,
psz_var
,
VLC_VAR_GETLIST
,
&
val
_list
)
<
0
)
{
return
NULL
;
}
for
(
i
=
0
;
i
<
val
.
p_list
->
i_count
;
i
++
)
for
(
i
=
0
;
i
<
val
_list
.
p_list
->
i_count
;
i
++
)
{
vlc_value_t
another_val
;
wxMenuItemExt
*
menuitem
;
switch
(
i_type
&
VLC_VAR_TYPE
)
{
case
VLC_VAR_VARIABLE
:
menu
->
Append
(
MenuDummy_Event
,
val_list
.
p_list
->
p_values
[
i
].
psz_string
,
CreateSubMenu
(
val_list
.
p_list
->
p_values
[
i
].
psz_string
,
p_object
),
"YEAAAARRRGGGHHH HEEELLPPPPPP"
);
break
;
case
VLC_VAR_STRING
:
another_val
.
psz_string
=
strdup
(
val
.
p_list
->
p_values
[
i
].
psz_string
);
strdup
(
val
_list
.
p_list
->
p_values
[
i
].
psz_string
);
menuitem
=
new
wxMenuItemExt
(
this
,
i_item_id
++
,
another_val
.
psz_string
,
""
,
wxITEM_RADIO
,
strdup
(
psz_var
),
...
...
@@ -252,7 +250,8 @@ wxMenu *PopupMenu::CreateSubMenu( char *psz_var, vlc_object_t *p_object )
menu
->
Append
(
menuitem
);
if
(
!
strcmp
(
psz_value
,
val
.
p_list
->
p_values
[
i
].
psz_string
)
)
if
(
!
strcmp
(
val
.
psz_string
,
val_list
.
p_list
->
p_values
[
i
].
psz_string
)
)
menu
->
Check
(
i_item_id
-
1
,
TRUE
);
break
;
...
...
@@ -260,12 +259,16 @@ wxMenu *PopupMenu::CreateSubMenu( char *psz_var, vlc_object_t *p_object )
menuitem
=
new
wxMenuItemExt
(
this
,
i_item_id
++
,
wxString
::
Format
(
_
(
"%d"
),
val
.
p_list
->
p_values
[
i
].
i_int
),
val
_list
.
p_list
->
p_values
[
i
].
i_int
),
""
,
wxITEM_RADIO
,
strdup
(
psz_var
),
p_object
->
i_object_id
,
val
.
p_list
->
p_values
[
i
]
);
val
_list
.
p_list
->
p_values
[
i
]
);
menu
->
Append
(
menuitem
);
if
(
!
((
i_type
&
VLC_VAR_FLAGS
)
&
VLC_VAR_ISCOMMAND
)
&&
val_list
.
p_list
->
p_values
[
i
].
i_int
==
val
.
i_int
)
menu
->
Check
(
i_item_id
-
1
,
TRUE
);
break
;
default:
...
...
@@ -273,7 +276,7 @@ wxMenu *PopupMenu::CreateSubMenu( char *psz_var, vlc_object_t *p_object )
}
}
var_Change
(
p_object
,
psz_var
,
VLC_VAR_FREELIST
,
&
val
);
var_Change
(
p_object
,
psz_var
,
VLC_VAR_FREELIST
,
&
val
_list
);
return
menu
;
}
...
...
src/input/input.c
View file @
1171979d
...
...
@@ -4,7 +4,7 @@
* decoders.
*****************************************************************************
* Copyright (C) 1998-2002 VideoLAN
* $Id: input.c,v 1.22
3 2003/02/08 22:43:02 massiot
Exp $
* $Id: input.c,v 1.22
4 2003/03/11 23:56:54 gbazin
Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
...
...
@@ -126,7 +126,7 @@ input_thread_t *__input_CreateThread( vlc_object_t *p_parent,
p_input
->
stream
.
p_newly_selected_es
=
NULL
;
/* By default there is one area in a stream */
input_AddArea
(
p_input
);
input_AddArea
(
p_input
,
0
,
1
);
p_input
->
stream
.
p_selected_area
=
p_input
->
stream
.
pp_areas
[
0
];
/* Initialize stream control properties. */
...
...
src/input/input_ext-intf.c
View file @
1171979d
...
...
@@ -2,7 +2,7 @@
* input_ext-intf.c: services to the interface
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
* $Id: input_ext-intf.c,v 1.4
7 2003/01/21 14:15:05 hartma
n Exp $
* $Id: input_ext-intf.c,v 1.4
8 2003/03/11 23:56:54 gbazi
n Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
...
...
@@ -366,6 +366,7 @@ int input_ChangeArea( input_thread_t * p_input, input_area_t * p_area )
int
input_ChangeProgram
(
input_thread_t
*
p_input
,
uint16_t
i_program_number
)
{
pgrm_descriptor_t
*
p_program
;
vlc_value_t
val
;
vlc_mutex_lock
(
&
p_input
->
stream
.
stream_lock
);
...
...
@@ -381,6 +382,10 @@ int input_ChangeProgram( input_thread_t * p_input, uint16_t i_program_number )
vlc_mutex_unlock
(
&
p_input
->
stream
.
stream_lock
);
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
i_program_number
;
var_Change
(
p_input
,
"program"
,
VLC_VAR_SETVALUE
,
&
val
);
return
0
;
}
...
...
src/input/input_programs.c
View file @
1171979d
...
...
@@ -2,7 +2,7 @@
* input_programs.c: es_descriptor_t, pgrm_descriptor_t management
*****************************************************************************
* Copyright (C) 1999-2002 VideoLAN
* $Id: input_programs.c,v 1.10
1 2003/01/31 11:23:37 massiot
Exp $
* $Id: input_programs.c,v 1.10
2 2003/03/11 23:56:54 gbazin
Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
...
...
@@ -39,6 +39,16 @@
* p_input->stream.lock
*/
/* Navigation callbacks */
static
int
ProgramCallback
(
vlc_object_t
*
,
char
const
*
,
vlc_value_t
,
vlc_value_t
,
void
*
);
static
int
TitleCallback
(
vlc_object_t
*
,
char
const
*
,
vlc_value_t
,
vlc_value_t
,
void
*
);
static
int
ChapterCallback
(
vlc_object_t
*
,
char
const
*
,
vlc_value_t
,
vlc_value_t
,
void
*
);
static
int
NavigationCallback
(
vlc_object_t
*
,
char
const
*
,
vlc_value_t
,
vlc_value_t
,
void
*
);
/*****************************************************************************
* input_InitStream: init the stream descriptor of the given input
*****************************************************************************/
...
...
@@ -72,6 +82,15 @@ int input_InitStream( input_thread_t * p_input, size_t i_data_len )
p_input
->
stream
.
p_demux_data
=
NULL
;
}
/* Create a few object variables used for navigation in the interfaces */
var_Create
(
p_input
,
"program"
,
VLC_VAR_INTEGER
|
VLC_VAR_HASCHOICE
);
var_Create
(
p_input
,
"title"
,
VLC_VAR_INTEGER
|
VLC_VAR_HASCHOICE
);
var_Create
(
p_input
,
"chapter"
,
VLC_VAR_INTEGER
|
VLC_VAR_HASCHOICE
);
var_Create
(
p_input
,
"navigation"
,
VLC_VAR_VARIABLE
|
VLC_VAR_HASCHOICE
);
var_AddCallback
(
p_input
,
"program"
,
ProgramCallback
,
NULL
);
var_AddCallback
(
p_input
,
"title"
,
TitleCallback
,
NULL
);
var_AddCallback
(
p_input
,
"chapter"
,
ChapterCallback
,
NULL
);
return
0
;
}
...
...
@@ -80,6 +99,11 @@ int input_InitStream( input_thread_t * p_input, size_t i_data_len )
*****************************************************************************/
void
input_EndStream
(
input_thread_t
*
p_input
)
{
/* Free navigation variables */
var_Destroy
(
p_input
,
"program"
);
var_Destroy
(
p_input
,
"title"
);
var_Destroy
(
p_input
,
"chapter"
);
/* Free all programs and associated ES, and associated decoders. */
while
(
p_input
->
stream
.
i_pgrm_number
)
{
...
...
@@ -139,6 +163,7 @@ pgrm_descriptor_t * input_AddProgram( input_thread_t * p_input,
{
/* Where to add the pgrm */
pgrm_descriptor_t
*
p_pgrm
=
malloc
(
sizeof
(
pgrm_descriptor_t
)
);
vlc_value_t
val
;
if
(
p_pgrm
==
NULL
)
{
...
...
@@ -179,6 +204,9 @@ pgrm_descriptor_t * input_AddProgram( input_thread_t * p_input,
p_input
->
stream
.
i_pgrm_number
,
p_pgrm
);
val
.
i_int
=
i_pgrm_id
;
var_Change
(
p_input
,
"program"
,
VLC_VAR_ADDCHOICE
,
&
val
);
return
p_pgrm
;
}
...
...
@@ -190,6 +218,7 @@ pgrm_descriptor_t * input_AddProgram( input_thread_t * p_input,
void
input_DelProgram
(
input_thread_t
*
p_input
,
pgrm_descriptor_t
*
p_pgrm
)
{
unsigned
int
i_pgrm_index
;
vlc_value_t
val
;
/* Find the program in the programs table */
for
(
i_pgrm_index
=
0
;
i_pgrm_index
<
p_input
->
stream
.
i_pgrm_number
;
...
...
@@ -206,6 +235,9 @@ void input_DelProgram( input_thread_t * p_input, pgrm_descriptor_t * p_pgrm )
return
;
}
val
.
i_int
=
i_pgrm_index
;
var_Change
(
p_input
,
"program"
,
VLC_VAR_DELCHOICE
,
&
val
);
/* Free the structures that describe the es that belongs to that program */
while
(
p_pgrm
->
i_es_number
)
{
...
...
@@ -232,10 +264,13 @@ void input_DelProgram( input_thread_t * p_input, pgrm_descriptor_t * p_pgrm )
*****************************************************************************
* This area descriptor will be referenced in the given stream descriptor
*****************************************************************************/
input_area_t
*
input_AddArea
(
input_thread_t
*
p_input
)
input_area_t
*
input_AddArea
(
input_thread_t
*
p_input
,
uint16_t
i_area_id
,
uint16_t
i_part_nb
)
{
/* Where to add the pgrm */
input_area_t
*
p_area
=
malloc
(
sizeof
(
input_area_t
)
);
vlc_value_t
val
;
int
i
;
if
(
p_area
==
NULL
)
{
...
...
@@ -244,13 +279,13 @@ input_area_t * input_AddArea( input_thread_t * p_input )
}
/* Init this entry */
p_area
->
i_id
=
0
;
p_area
->
i_id
=
i_area_id
;
p_area
->
i_part_nb
=
i_part_nb
;
p_area
->
i_part
=
0
;
p_area
->
i_start
=
0
;
p_area
->
i_size
=
0
;
p_area
->
i_tell
=
0
;
p_area
->
i_seek
=
NO_SEEK
;
p_area
->
i_part_nb
=
1
;
p_area
->
i_part
=
0
;
/* Add an entry to the list of program associated with the stream */
INSERT_ELEM
(
p_input
->
stream
.
pp_areas
,
...
...
@@ -258,6 +293,35 @@ input_area_t * input_AddArea( input_thread_t * p_input )
p_input
->
stream
.
i_area_nb
,
p_area
);
/* Don't add empty areas */
if
(
i_part_nb
==
0
)
return
NULL
;
/* Take care of the navigation variables */
val
.
i_int
=
i_area_id
;
var_Change
(
p_input
,
"title"
,
VLC_VAR_ADDCHOICE
,
&
val
);
val
.
psz_string
=
malloc
(
sizeof
(
"title "
)
+
5
);
if
(
val
.
psz_string
)
{
vlc_value_t
val2
;
sprintf
(
val
.
psz_string
,
"title %2i"
,
i_area_id
);
var_Destroy
(
p_input
,
val
.
psz_string
);
var_Create
(
p_input
,
val
.
psz_string
,
VLC_VAR_INTEGER
|
VLC_VAR_HASCHOICE
|
VLC_VAR_ISCOMMAND
);
var_AddCallback
(
p_input
,
val
.
psz_string
,
NavigationCallback
,
(
void
*
)(
int
)
i_area_id
);
var_Change
(
p_input
,
"navigation"
,
VLC_VAR_ADDCHOICE
,
&
val
);
for
(
i
=
1
;
i
<=
i_part_nb
;
i
++
)
{
val2
.
i_int
=
i
;
var_Change
(
p_input
,
val
.
psz_string
,
VLC_VAR_ADDCHOICE
,
&
val2
);
}
}
return
p_area
;
}
...
...
@@ -271,6 +335,7 @@ int input_SetProgram( input_thread_t * p_input, pgrm_descriptor_t * p_new_prg )
int
i_required_spu_es
;
int
i_audio_es
=
0
;
int
i_spu_es
=
0
;
vlc_value_t
val
;
if
(
p_input
->
stream
.
p_selected_program
)
{
...
...
@@ -356,10 +421,13 @@ int input_SetProgram( input_thread_t * p_input, pgrm_descriptor_t * p_new_prg )
p_input
->
stream
.
p_selected_program
=
p_new_prg
;
/* Update the navigation variables without triggering a callback */
val
.
i_int
=
p_new_prg
->
i_number
;
var_Change
(
p_input
,
"program"
,
VLC_VAR_SETVALUE
,
&
val
);
return
(
0
);
}
/*****************************************************************************
* input_DelArea: destroy a area descriptor
*****************************************************************************
...
...
@@ -368,6 +436,7 @@ int input_SetProgram( input_thread_t * p_input, pgrm_descriptor_t * p_new_prg )
void
input_DelArea
(
input_thread_t
*
p_input
,
input_area_t
*
p_area
)
{
unsigned
int
i_area_index
;
vlc_value_t
val
;
/* Find the area in the areas table */
for
(
i_area_index
=
0
;
i_area_index
<
p_input
->
stream
.
i_area_nb
;
...
...
@@ -384,6 +453,15 @@ void input_DelArea( input_thread_t * p_input, input_area_t * p_area )
return
;
}
/* Take care of the navigation variables */
val
.
psz_string
=
malloc
(
sizeof
(
"title "
)
+
5
);
if
(
val
.
psz_string
)
{
sprintf
(
val
.
psz_string
,
"title %i"
,
p_area
->
i_id
);
var_Change
(
p_input
,
"navigation"
,
VLC_VAR_DELCHOICE
,
&
val
);
var_Destroy
(
p_input
,
val
.
psz_string
);
}
/* Remove this area from the stream's list of areas */
REMOVE_ELEM
(
p_input
->
stream
.
pp_areas
,
p_input
->
stream
.
i_area_nb
,
...
...
@@ -658,3 +736,101 @@ int input_UnselectES( input_thread_t * p_input, es_descriptor_t * p_es )
return
0
;
}
/*****************************************************************************
* Navigation callback: a bunch of navigation variables are used as an
* alternative to the navigation API.
*****************************************************************************/
static
int
ProgramCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
input_thread_t
*
p_input
=
(
input_thread_t
*
)
p_this
;
if
(
oldval
.
i_int
==
newval
.
i_int
)
return
VLC_SUCCESS
;
vlc_mutex_lock
(
&
p_input
->
stream
.
stream_lock
);
if
(
(
newval
.
i_int
>
0
)
)
{
vlc_mutex_unlock
(
&
p_input
->
stream
.
stream_lock
);
input_ChangeProgram
(
p_input
,
newval
.
i_int
);
input_SetStatus
(
p_input
,
INPUT_STATUS_PLAY
);
vlc_mutex_lock
(
&
p_input
->
stream
.
stream_lock
);
}
vlc_mutex_unlock
(
&
p_input
->
stream
.
stream_lock
);
return
VLC_SUCCESS
;
}
static
int
TitleCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
input_thread_t
*
p_input
=
(
input_thread_t
*
)
p_this
;
input_area_t
*
p_area
;
if
(
oldval
.
i_int
==
newval
.
i_int
)
return
VLC_SUCCESS
;
/* Sanity check should have already be done by var_Set(). */
vlc_mutex_lock
(
&
p_input
->
stream
.
stream_lock
);
p_area
=
p_input
->
stream
.
pp_areas
[
newval
.
i_int
];
p_area
->
i_part
=
1
;
vlc_mutex_unlock
(
&
p_input
->
stream
.
stream_lock
);
input_ChangeArea
(
p_input
,
p_area
);
input_SetStatus
(
p_input
,
INPUT_STATUS_PLAY
);
return
VLC_SUCCESS
;
}
static
int
ChapterCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
input_thread_t
*
p_input
=
(
input_thread_t
*
)
p_this
;
input_area_t
*
p_area
;
if
(
oldval
.
i_int
==
newval
.
i_int
)
return
VLC_SUCCESS
;
/* Sanity check will have already be done by var_Set(). */
vlc_mutex_lock
(
&
p_input
->
stream
.
stream_lock
);
p_area
=
p_input
->
stream
.
p_selected_area
;
p_input
->
stream
.
p_selected_area
->
i_part
=
newval
.
i_int
;
vlc_mutex_unlock
(
&
p_input
->
stream
.
stream_lock
);
input_ChangeArea
(
p_input
,
p_area
);
input_SetStatus
(
p_input
,
INPUT_STATUS_PLAY
);
return
VLC_SUCCESS
;
}
static
int
NavigationCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
input_thread_t
*
p_input
=
(
input_thread_t
*
)
p_this
;
uint16_t
i_area_id
=
(
int
)
p_data
;
vlc_mutex_lock
(
&
p_input
->
stream
.
stream_lock
);
if
(
p_input
->
stream
.
p_selected_area
->
i_id
==
i_area_id
&&
oldval
.
i_int
==
newval
.
i_int
)
{
/* Nothing to do */
vlc_mutex_unlock
(
&
p_input
->
stream
.
stream_lock
);
return
VLC_SUCCESS
;
}
if
(
(
i_area_id
<
p_input
->
stream
.
i_area_nb
)
&&
(
newval
.
i_int
>
0
)
&&
(
(
uint16_t
)
newval
.
i_int
<=
p_input
->
stream
.
pp_areas
[
i_area_id
]
->
i_part_nb
)
)
{
input_area_t
*
p_area
=
p_input
->
stream
.
pp_areas
[
i_area_id
];
p_input
->
stream
.
p_selected_area
->
i_part
=
newval
.
i_int
;
vlc_mutex_unlock
(
&
p_input
->
stream
.
stream_lock
);
input_ChangeArea
(
p_input
,
p_area
);
input_SetStatus
(
p_input
,
INPUT_STATUS_PLAY
);
vlc_mutex_lock
(
&
p_input
->
stream
.
stream_lock
);
}
vlc_mutex_unlock
(
&
p_input
->
stream
.
stream_lock
);
return
VLC_SUCCESS
;
}
src/misc/variables.c
View file @
1171979d
...
...
@@ -2,7 +2,7 @@
* variables.c: routines for object variables handling
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: variables.c,v 1.2
0 2003/03/09 19:25:08
gbazin Exp $
* $Id: variables.c,v 1.2
1 2003/03/11 23:56:54
gbazin Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
...
...
@@ -155,6 +155,8 @@ int __var_Create( vlc_object_t *p_this, const char *psz_name, int i_type )
case
VLC_VAR_STRING
:
case
VLC_VAR_MODULE
:
case
VLC_VAR_FILE
:
case
VLC_VAR_DIRECTORY
:
case
VLC_VAR_VARIABLE
:
p_var
->
pf_cmp
=
CmpString
;
p_var
->
pf_dup
=
DupString
;
p_var
->
pf_free
=
FreeString
;
...
...
@@ -264,6 +266,7 @@ int __var_Change( vlc_object_t *p_this, const char *psz_name,
{
int
i_var
,
i
;
variable_t
*
p_var
;
vlc_value_t
oldval
;
vlc_mutex_lock
(
&
p_this
->
var_lock
);
...
...
@@ -364,6 +367,18 @@ int __var_Change( vlc_object_t *p_this, const char *psz_name,
CheckValue
(
p_var
,
&
p_var
->
val
);
break
;
case
VLC_VAR_CLEARCHOICES
:
for
(
i
=
0
;
i
<
p_var
->
choices
.
i_count
;
i
++
)
{
p_var
->
pf_free
(
&
p_var
->
choices
.
p_values
[
i
]
);
}
if
(
p_var
->
choices
.
i_count
)
free
(
p_var
->
choices
.
p_values
);
p_var
->
choices
.
i_count
=
0
;
p_var
->
choices
.
p_values
=
NULL
;
p_var
->
i_default
=
-
1
;
break
;
case
VLC_VAR_SETDEFAULT
:
/* FIXME: the list is sorted, dude. Use something cleverer. */
for
(
i
=
0
;
i
<
p_var
->
choices
.
i_count
;
i
++
)
...
...
@@ -383,7 +398,18 @@ int __var_Change( vlc_object_t *p_this, const char *psz_name,
p_var
->
i_default
=
i
;
CheckValue
(
p_var
,
&
p_var
->
val
);
break
;
case
VLC_VAR_SETVALUE
:
/* Duplicate data if needed */
p_var
->
pf_dup
(
p_val
);
/* Backup needed stuff */
oldval
=
p_var
->
val
;
/* Check boundaries and list */
CheckValue
(
p_var
,
p_val
);
/* Set the variable */
p_var
->
val
=
*
p_val
;
/* Free data if needed */
p_var
->
pf_free
(
&
oldval
);
break
;
case
VLC_VAR_GETLIST
:
p_val
->
p_list
=
malloc
(
sizeof
(
vlc_list_t
)
);
if
(
p_var
->
choices
.
i_count
)
...
...
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