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
c7897a28
Commit
c7897a28
authored
Nov 09, 2003
by
Rocky Bernstein
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Handle keyboard input: numeric entry, next, prev, return and default.
parent
204044c9
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
504 additions
and
52 deletions
+504
-52
modules/access/vcdx/demux.c
modules/access/vcdx/demux.c
+3
-2
modules/access/vcdx/intf.c
modules/access/vcdx/intf.c
+152
-34
modules/access/vcdx/vcd.c
modules/access/vcdx/vcd.c
+20
-1
modules/access/vcdx/vcdplayer.c
modules/access/vcdx/vcdplayer.c
+267
-2
modules/access/vcdx/vcdplayer.h
modules/access/vcdx/vcdplayer.h
+62
-13
No files found.
modules/access/vcdx/demux.c
View file @
c7897a28
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* demux.c: demux functions for dvdplay.
* demux.c: demux functions for dvdplay.
*****************************************************************************
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
* Copyright (C) 1998-2001 VideoLAN
* $Id: demux.c,v 1.
1 2003/10/04 18:55:13 gbazin
Exp $
* $Id: demux.c,v 1.
2 2003/11/09 00:52:32 rocky
Exp $
*
*
* Author: Stphane Borel <stef@via.ecp.fr>
* Author: Stphane Borel <stef@via.ecp.fr>
*
*
...
@@ -90,7 +90,7 @@ int E_(InitVCD) ( vlc_object_t *p_this )
...
@@ -90,7 +90,7 @@ int E_(InitVCD) ( vlc_object_t *p_this )
p_demux
=
p_input
->
p_demux_data
=
malloc
(
sizeof
(
demux_sys_t
)
);
p_demux
=
p_input
->
p_demux_data
=
malloc
(
sizeof
(
demux_sys_t
)
);
if
(
p_demux
==
NULL
)
if
(
p_demux
==
NULL
)
{
{
return
VLC_ENOM
EM
;
return
VLC_ENOM
OD
;
}
}
p_input
->
p_private
=
(
void
*
)
&
p_demux
->
mpeg
;
p_input
->
p_private
=
(
void
*
)
&
p_demux
->
mpeg
;
...
@@ -104,6 +104,7 @@ int E_(InitVCD) ( vlc_object_t *p_this )
...
@@ -104,6 +104,7 @@ int E_(InitVCD) ( vlc_object_t *p_this )
p_input
->
p_demux_data
->
p_vcd
=
p_vcd
;
p_input
->
p_demux_data
->
p_vcd
=
p_vcd
;
p_input
->
pf_demux
=
Demux
;
p_input
->
pf_demux
=
Demux
;
p_input
->
pf_demux_control
=
demux_vaControlDefault
;
p_input
->
pf_rewind
=
NULL
;
p_input
->
pf_rewind
=
NULL
;
p_vcd
->
p_intf
=
NULL
;
p_vcd
->
p_intf
=
NULL
;
...
...
modules/access/vcdx/intf.c
View file @
c7897a28
...
@@ -2,10 +2,10 @@
...
@@ -2,10 +2,10 @@
* intf.c: Video CD interface to handle user interaction and still time
* intf.c: Video CD interface to handle user interaction and still time
*****************************************************************************
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* Copyright (C) 2002 VideoLAN
* $Id: intf.c,v 1.
1 2003/10/04 18:55:13 gbazin
Exp $
* $Id: intf.c,v 1.
2 2003/11/09 00:52:32 rocky
Exp $
*
*
* Authors:
Stphane Borel <stef@via.ecp.fr
>
* Authors:
Rocky Bernstein <rocky@panix.com
>
*
Current modification and breakage for VCD by rocky.
*
from DVD code by Stphane Borel <stef@via.ecp.fr>
*
*
* This program is free software; you can redistribute it and/or modify
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* it under the terms of the GNU General Public License as published by
...
@@ -35,16 +35,18 @@
...
@@ -35,16 +35,18 @@
#include "stream_control.h"
#include "stream_control.h"
#include "input_ext-intf.h"
#include "input_ext-intf.h"
#include "input_ext-dec.h"
#include "input_ext-dec.h"
#include "vlc_keys.h"
#include "vcd.h"
#include "vcd.h"
#include "vcdplayer.h"
/*****************************************************************************
/*****************************************************************************
* intf_sys_t: description and status of interface
* intf_sys_t: description and status of interface
*****************************************************************************/
*****************************************************************************/
struct
intf_sys_t
struct
intf_sys_t
{
{
input_thread_t
*
p_input
;
input_thread_t
*
p_input
;
vcd_data_t
*
p_vcd
;
thread_vcd_data_t
*
p_vcd
;
vlc_bool_t
b_still
;
vlc_bool_t
b_still
;
vlc_bool_t
b_inf_still
;
vlc_bool_t
b_inf_still
;
...
@@ -77,7 +79,8 @@ int E_(VCDOpenIntf) ( vlc_object_t *p_this )
...
@@ -77,7 +79,8 @@ int E_(VCDOpenIntf) ( vlc_object_t *p_this )
{
{
intf_thread_t
*
p_intf
=
(
intf_thread_t
*
)
p_this
;
intf_thread_t
*
p_intf
=
(
intf_thread_t
*
)
p_this
;
printf
(
"+++++Called VCDOpenIntf
\n
"
);
msg_Dbg
(
p_intf
,
"VCDOpenIntf"
);
/* Allocate instance and initialize some members */
/* Allocate instance and initialize some members */
p_intf
->
p_sys
=
malloc
(
sizeof
(
intf_sys_t
)
);
p_intf
->
p_sys
=
malloc
(
sizeof
(
intf_sys_t
)
);
if
(
p_intf
->
p_sys
==
NULL
)
if
(
p_intf
->
p_sys
==
NULL
)
...
@@ -87,6 +90,7 @@ int E_(VCDOpenIntf) ( vlc_object_t *p_this )
...
@@ -87,6 +90,7 @@ int E_(VCDOpenIntf) ( vlc_object_t *p_this )
p_intf
->
pf_run
=
RunIntf
;
p_intf
->
pf_run
=
RunIntf
;
var_AddCallback
(
p_intf
->
p_vlc
,
"key-pressed"
,
KeyEvent
,
p_intf
);
p_intf
->
p_sys
->
m_still_time
=
0
;
p_intf
->
p_sys
->
m_still_time
=
0
;
p_intf
->
p_sys
->
b_inf_still
=
0
;
p_intf
->
p_sys
->
b_inf_still
=
0
;
p_intf
->
p_sys
->
b_still
=
0
;
p_intf
->
p_sys
->
b_still
=
0
;
...
@@ -111,48 +115,167 @@ void E_(VCDCloseIntf) ( vlc_object_t *p_this )
...
@@ -111,48 +115,167 @@ void E_(VCDCloseIntf) ( vlc_object_t *p_this )
*****************************************************************************/
*****************************************************************************/
static
void
RunIntf
(
intf_thread_t
*
p_intf
)
static
void
RunIntf
(
intf_thread_t
*
p_intf
)
{
{
vlc_object_t
*
p_vout
=
NULL
;
vlc_object_t
*
p_vout
=
NULL
;
printf
(
"+++++Called RunIntf
\n
"
);
thread_vcd_data_t
*
p_vcd
;
input_thread_t
*
p_input
;
/* What you add to the last input number entry. It accumulates all of
the 10_ADD keypresses */
int
number_addend
=
0
;
if
(
InitThread
(
p_intf
)
<
0
)
if
(
InitThread
(
p_intf
)
<
0
)
{
{
msg_Err
(
p_intf
,
"can't initialize intf"
);
msg_Err
(
p_intf
,
"can't initialize intf"
);
return
;
return
;
}
}
msg_Dbg
(
p_intf
,
"intf initialized"
);
p_input
=
p_intf
->
p_sys
->
p_input
;
p_vcd
=
p_intf
->
p_sys
->
p_vcd
=
(
thread_vcd_data_t
*
)
p_input
->
p_access_data
;
dbg_print
(
INPUT_DBG_CALL
,
"intf initialized"
);
/* Main loop */
/* Main loop */
while
(
!
p_intf
->
b_die
)
while
(
!
p_intf
->
b_die
)
{
{
vlc_mutex_lock
(
&
p_intf
->
change_lock
);
vlc_mutex_lock
(
&
p_intf
->
change_lock
);
/*
/*
* keyboard event
* keyboard event
*/
*/
if
(
p_vout
&&
p_intf
->
p_sys
->
b_key_pressed
)
if
(
p_vout
&&
p_intf
->
p_sys
->
b_key_pressed
)
{
{
p_intf
->
p_sys
->
b_key_pressed
=
VLC_FALSE
;
vlc_value_t
val
;
int
i
,
i_action
=
-
1
;
printf
(
"++++key pressed...
\n
"
);
struct
hotkey
*
p_hotkeys
=
p_intf
->
p_vlc
->
p_hotkeys
;
p_intf
->
p_sys
->
b_key_pressed
=
VLC_FALSE
;
/* Find action triggered by hotkey (if any) */
var_Get
(
p_intf
->
p_vlc
,
"key-pressed"
,
&
val
);
dbg_print
(
INPUT_DBG_EVENT
,
"Key pressed %d"
,
val
.
i_int
);
for
(
i
=
0
;
p_hotkeys
[
i
].
psz_action
!=
NULL
;
i
++
)
{
if
(
p_hotkeys
[
i
].
i_key
==
val
.
i_int
)
{
i_action
=
p_hotkeys
[
i
].
i_action
;
}
}
if
(
i_action
!=
-
1
)
{
switch
(
i_action
)
{
case
ACTIONID_NAV_LEFT
:
dbg_print
(
INPUT_DBG_EVENT
,
"ACTIONID_NAV_LEFT - prev (%d)"
,
number_addend
);
do
{
vcdplayer_play_prev
(
p_input
);
}
while
(
number_addend
--
>
0
);
break
;
case
ACTIONID_NAV_RIGHT
:
dbg_print
(
INPUT_DBG_EVENT
,
"ACTIONID_NAV_RIGHT - next (%d)"
,
number_addend
);
do
{
vcdplayer_play_next
(
p_input
);
}
while
(
number_addend
--
>
0
);
break
;
case
ACTIONID_NAV_UP
:
dbg_print
(
INPUT_DBG_EVENT
,
"ACTIONID_NAV_UP - return"
);
vcdplayer_play_return
(
p_input
);
break
;
case
ACTIONID_NAV_DOWN
:
dbg_print
(
INPUT_DBG_EVENT
,
"ACTIONID_NAV_DOWN - default"
);
vcdplayer_play_default
(
p_input
);
break
;
case
ACTIONID_NAV_ACTIVATE
:
{
vcdinfo_itemid_t
itemid
;
itemid
.
type
=
p_vcd
->
play_item
.
type
;
dbg_print
(
INPUT_DBG_EVENT
,
"ACTIONID_NAV_ACTIVATE"
);
if
(
vcdplayer_pbc_is_on
(
p_vcd
)
&&
number_addend
!=
0
)
{
lid_t
next_num
=
vcdplayer_selection2lid
(
p_input
,
number_addend
);
if
(
VCDINFO_INVALID_LID
!=
next_num
)
{
itemid
.
num
=
next_num
;
itemid
.
type
=
VCDINFO_ITEM_TYPE_LID
;
VCDPlay
(
p_input
,
itemid
);
}
}
else
{
itemid
.
num
=
number_addend
;
VCDPlay
(
p_input
,
itemid
);
}
break
;
}
}
number_addend
=
0
;
}
else
{
unsigned
int
digit_entered
=
0
;
switch
(
val
.
i_int
)
{
case
'9'
:
digit_entered
++
;
case
'8'
:
digit_entered
++
;
case
'7'
:
digit_entered
++
;
case
'6'
:
digit_entered
++
;
case
'5'
:
digit_entered
++
;
case
'4'
:
digit_entered
++
;
case
'3'
:
digit_entered
++
;
case
'2'
:
digit_entered
++
;
case
'1'
:
digit_entered
++
;
case
'0'
:
{
number_addend
*=
10
;
number_addend
+=
digit_entered
;
dbg_print
(
INPUT_DBG_EVENT
,
"Added %d. Number is now: %d
\n
"
,
digit_entered
,
number_addend
);
break
;
}
}
}
}
}
vlc_mutex_unlock
(
&
p_intf
->
change_lock
);
if
(
p_vout
==
NULL
)
vlc_mutex_unlock
(
&
p_intf
->
change_lock
);
if
(
p_vout
==
NULL
)
{
{
p_vout
=
vlc_object_find
(
p_intf
->
p_sys
->
p_input
,
p_vout
=
vlc_object_find
(
p_intf
->
p_sys
->
p_input
,
VLC_OBJECT_VOUT
,
FIND_CHILD
);
VLC_OBJECT_VOUT
,
FIND_CHILD
);
if
(
p_vout
)
if
(
p_vout
)
{
{
var_AddCallback
(
p_vout
,
"mouse-moved"
,
MouseEvent
,
p_intf
);
var_AddCallback
(
p_vout
,
"mouse-moved"
,
MouseEvent
,
p_intf
);
var_AddCallback
(
p_vout
,
"mouse-clicked"
,
MouseEvent
,
p_intf
);
var_AddCallback
(
p_vout
,
"mouse-clicked"
,
MouseEvent
,
p_intf
);
var_AddCallback
(
p_vout
,
"key-pressed"
,
KeyEvent
,
p_intf
);
var_AddCallback
(
p_vout
,
"key-pressed"
,
KeyEvent
,
p_intf
);
}
}
}
}
/* Wait a bit */
msleep
(
INTF_IDLE_SLEEP
);
}
if
(
p_vout
)
/* Wait a bit */
{
msleep
(
INTF_IDLE_SLEEP
);
var_DelCallback
(
p_vout
,
"mouse-moved"
,
MouseEvent
,
p_intf
);
var_DelCallback
(
p_vout
,
"mouse-clicked"
,
MouseEvent
,
p_intf
);
vlc_object_release
(
p_vout
);
}
}
vlc_object_release
(
p_intf
->
p_sys
->
p_input
);
vlc_object_release
(
p_intf
->
p_sys
->
p_input
);
...
@@ -167,7 +290,6 @@ static int InitThread( intf_thread_t * p_intf )
...
@@ -167,7 +290,6 @@ static int InitThread( intf_thread_t * p_intf )
if
(
!
p_intf
->
b_die
)
if
(
!
p_intf
->
b_die
)
{
{
input_thread_t
*
p_input
;
input_thread_t
*
p_input
;
vcd_data_t
*
p_vcd
;
p_input
=
vlc_object_find
(
p_intf
,
VLC_OBJECT_INPUT
,
FIND_PARENT
);
p_input
=
vlc_object_find
(
p_intf
,
VLC_OBJECT_INPUT
,
FIND_PARENT
);
...
@@ -177,13 +299,9 @@ static int InitThread( intf_thread_t * p_intf )
...
@@ -177,13 +299,9 @@ static int InitThread( intf_thread_t * p_intf )
return
VLC_EGENERIC
;
return
VLC_EGENERIC
;
}
}
p_vcd
=
(
vcd_data_t
*
)
p_input
->
p_access_data
;
p_vcd
->
p_intf
=
p_intf
;
vlc_mutex_lock
(
&
p_intf
->
change_lock
);
vlc_mutex_lock
(
&
p_intf
->
change_lock
);
p_intf
->
p_sys
->
p_input
=
p_input
;
p_intf
->
p_sys
->
p_input
=
p_input
;
p_intf
->
p_sys
->
p_vcd
=
p_vcd
;
p_intf
->
p_sys
->
b_move
=
VLC_FALSE
;
p_intf
->
p_sys
->
b_move
=
VLC_FALSE
;
p_intf
->
p_sys
->
b_click
=
VLC_FALSE
;
p_intf
->
p_sys
->
b_click
=
VLC_FALSE
;
...
...
modules/access/vcdx/vcd.c
View file @
c7897a28
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
* to go here.
* to go here.
*****************************************************************************
*****************************************************************************
* Copyright (C) 2000 VideoLAN
* Copyright (C) 2000 VideoLAN
* $Id: vcd.c,v 1.
2 2003/11/07 10:33:41
rocky Exp $
* $Id: vcd.c,v 1.
3 2003/11/09 00:52:32
rocky Exp $
*
*
* Authors: Johan Bilien <jobi@via.ecp.fr>
* Authors: Johan Bilien <jobi@via.ecp.fr>
* Rocky Bernstein <rocky@panix.com>
* Rocky Bernstein <rocky@panix.com>
...
@@ -30,6 +30,7 @@
...
@@ -30,6 +30,7 @@
#include <vlc/vlc.h>
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <vlc/input.h>
#include <vlc_interface.h>
#include "../../demux/mpeg/system.h"
#include "../../demux/mpeg/system.h"
#include "vcd.h"
#include "vcd.h"
...
@@ -345,6 +346,10 @@ VCDOpen( vlc_object_t *p_this )
...
@@ -345,6 +346,10 @@ VCDOpen( vlc_object_t *p_this )
#endif
#endif
}
}
p_vcd
->
p_intf
=
intf_Create
(
p_input
,
"vcdx"
);
p_vcd
->
p_intf
->
b_block
=
VLC_FALSE
;
intf_RunThread
(
p_vcd
->
p_intf
);
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
}
}
...
@@ -362,8 +367,22 @@ VCDClose( vlc_object_t *p_this )
...
@@ -362,8 +367,22 @@ VCDClose( vlc_object_t *p_this )
free
(
p_vcd
->
p_entries
);
free
(
p_vcd
->
p_entries
);
free
(
p_vcd
->
p_segments
);
free
(
p_vcd
->
p_segments
);
/* The following if block get moved elsewhere... */
if
(
p_vcd
->
p_intf
!=
NULL
)
{
intf_StopThread
(
p_vcd
->
p_intf
);
vlc_object_detach
(
p_vcd
->
p_intf
);
vlc_object_release
(
p_vcd
->
p_intf
);
intf_Destroy
(
p_vcd
->
p_intf
);
p_vcd
->
p_intf
=
NULL
;
}
free
(
p_vcd
);
free
(
p_vcd
);
p_vcd_input
=
NULL
;
p_vcd_input
=
NULL
;
}
}
/*****************************************************************************
/*****************************************************************************
...
...
modules/access/vcdx/vcdplayer.c
View file @
c7897a28
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
* using libcdio, libvcd and libvcdinfo
* using libcdio, libvcd and libvcdinfo
*****************************************************************************
*****************************************************************************
* Copyright (C) 2003 Rocky Bernstein <rocky@panix.com>
* Copyright (C) 2003 Rocky Bernstein <rocky@panix.com>
* $Id: vcdplayer.c,v 1.
1 2003/10/04 18:55:13 gbazin
Exp $
* $Id: vcdplayer.c,v 1.
2 2003/11/09 00:52:32 rocky
Exp $
*
*
* This program is free software; you can redistribute it and/or modify
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* it under the terms of the GNU General Public License as published by
...
@@ -327,7 +327,7 @@ vcdplayer_pbc_nav ( input_thread_t * p_input )
...
@@ -327,7 +327,7 @@ vcdplayer_pbc_nav ( input_thread_t * p_input )
return
READ_ERROR
;
return
READ_ERROR
;
}
}
/*
/*
!
Get the next play-item in the list given in the LIDs. Note play-item
Get the next play-item in the list given in the LIDs. Note play-item
here refers to list of play-items for a single LID It shouldn't be
here refers to list of play-items for a single LID It shouldn't be
confused with a user's list of favorite things to play or the
confused with a user's list of favorite things to play or the
...
@@ -367,3 +367,268 @@ vcdplayer_inc_play_item( input_thread_t *p_input )
...
@@ -367,3 +367,268 @@ vcdplayer_inc_play_item( input_thread_t *p_input )
return
VLC_SUCCESS
==
VCDPlay
(
p_input
,
trans_itemid
);
return
VLC_SUCCESS
==
VCDPlay
(
p_input
,
trans_itemid
);
}
}
}
}
/*!
Play item assocated with the "default" selection.
Return false if there was some problem.
*/
bool
vcdplayer_play_default
(
input_thread_t
*
p_input
)
{
thread_vcd_data_t
*
p_vcd
=
(
thread_vcd_data_t
*
)
p_input
->
p_access_data
;
vcdinfo_obj_t
*
obj
=
p_vcd
->
vcd
;
vcdinfo_itemid_t
itemid
;
dbg_print
(
(
INPUT_DBG_CALL
|
INPUT_DBG_PBC
),
"current: %d"
,
p_vcd
->
play_item
.
num
);
itemid
.
type
=
p_vcd
->
play_item
.
type
;
if
(
vcdplayer_pbc_is_on
(
p_vcd
))
{
vcdinfo_lid_get_pxd
(
obj
,
&
(
p_vcd
->
pxd
),
p_vcd
->
cur_lid
);
switch
(
p_vcd
->
pxd
.
descriptor_type
)
{
case
PSD_TYPE_SELECTION_LIST
:
case
PSD_TYPE_EXT_SELECTION_LIST
:
if
(
p_vcd
->
pxd
.
psd
==
NULL
)
return
false
;
vcdplayer_update_entry
(
p_input
,
vcdinfo_get_default_offset
(
p_vcd
->
vcd
,
p_vcd
->
cur_lid
),
&
itemid
.
num
,
"default"
);
break
;
case
PSD_TYPE_PLAY_LIST
:
case
PSD_TYPE_END_LIST
:
case
PSD_TYPE_COMMAND_LIST
:
LOG_WARN
(
"There is no PBC 'default' selection here"
);
return
false
;
}
}
else
{
/* PBC is not on. "default" selection beginning of current
selection . */
p_vcd
->
play_item
.
num
=
p_vcd
->
play_item
.
num
;
}
/** ??? p_vcd->update_title(); ***/
return
VLC_SUCCESS
==
VCDPlay
(
p_input
,
itemid
);
}
/*!
Play item assocated with the "next" selection.
Return false if there was some problem.
*/
bool
vcdplayer_play_next
(
input_thread_t
*
p_input
)
{
thread_vcd_data_t
*
p_vcd
=
(
thread_vcd_data_t
*
)
p_input
->
p_access_data
;
vcdinfo_obj_t
*
obj
=
p_vcd
->
vcd
;
vcdinfo_itemid_t
itemid
;
dbg_print
(
(
INPUT_DBG_CALL
|
INPUT_DBG_PBC
),
"current: %d"
,
p_vcd
->
play_item
.
num
);
itemid
.
type
=
p_vcd
->
play_item
.
type
;
if
(
vcdplayer_pbc_is_on
(
p_vcd
))
{
vcdinfo_lid_get_pxd
(
obj
,
&
(
p_vcd
->
pxd
),
p_vcd
->
cur_lid
);
switch
(
p_vcd
->
pxd
.
descriptor_type
)
{
case
PSD_TYPE_SELECTION_LIST
:
case
PSD_TYPE_EXT_SELECTION_LIST
:
if
(
p_vcd
->
pxd
.
psd
==
NULL
)
return
false
;
vcdplayer_update_entry
(
p_input
,
vcdinf_psd_get_next_offset
(
p_vcd
->
pxd
.
psd
),
&
itemid
.
num
,
"next"
);
break
;
case
PSD_TYPE_PLAY_LIST
:
if
(
p_vcd
->
pxd
.
pld
==
NULL
)
return
false
;
vcdplayer_update_entry
(
p_input
,
vcdinf_pld_get_next_offset
(
p_vcd
->
pxd
.
pld
),
&
itemid
.
num
,
"next"
);
break
;
case
PSD_TYPE_END_LIST
:
case
PSD_TYPE_COMMAND_LIST
:
LOG_WARN
(
"There is no PBC 'next' selection here"
);
return
false
;
}
}
else
{
/* PBC is not on. "Next" selection is play_item.num+1 if possible. */
int
max_entry
=
0
;
switch
(
p_vcd
->
play_item
.
type
)
{
case
VCDINFO_ITEM_TYPE_ENTRY
:
case
VCDINFO_ITEM_TYPE_SEGMENT
:
case
VCDINFO_ITEM_TYPE_TRACK
:
switch
(
p_vcd
->
play_item
.
type
)
{
case
VCDINFO_ITEM_TYPE_ENTRY
:
max_entry
=
p_vcd
->
num_entries
;
break
;
case
VCDINFO_ITEM_TYPE_SEGMENT
:
max_entry
=
p_vcd
->
num_segments
;
break
;
case
VCDINFO_ITEM_TYPE_TRACK
:
max_entry
=
p_vcd
->
num_tracks
;
break
;
default:
;
/* Handle exceptional cases below */
}
if
(
p_vcd
->
play_item
.
num
+
1
<
max_entry
)
{
itemid
.
num
=
p_vcd
->
play_item
.
num
+
1
;
}
else
{
LOG_WARN
(
"At the end - non-PBC 'next' not possible here"
);
return
false
;
}
break
;
case
VCDINFO_ITEM_TYPE_LID
:
{
/* Should have handled above. */
LOG_WARN
(
"Internal inconsistency - should not have gotten here."
);
return
false
;
}
default:
return
false
;
}
}
/** ??? p_vcd->update_title(); ***/
return
VLC_SUCCESS
==
VCDPlay
(
p_input
,
itemid
);
}
/*!
Play item assocated with the "prev" selection.
Return false if there was some problem.
*/
bool
vcdplayer_play_prev
(
input_thread_t
*
p_input
)
{
thread_vcd_data_t
*
p_vcd
=
(
thread_vcd_data_t
*
)
p_input
->
p_access_data
;
vcdinfo_obj_t
*
obj
=
p_vcd
->
vcd
;
vcdinfo_itemid_t
itemid
;
dbg_print
(
(
INPUT_DBG_CALL
|
INPUT_DBG_PBC
),
"current: %d"
,
p_vcd
->
play_item
.
num
);
itemid
.
type
=
p_vcd
->
play_item
.
type
;
if
(
vcdplayer_pbc_is_on
(
p_vcd
))
{
vcdinfo_lid_get_pxd
(
obj
,
&
(
p_vcd
->
pxd
),
p_vcd
->
cur_lid
);
switch
(
p_vcd
->
pxd
.
descriptor_type
)
{
case
PSD_TYPE_SELECTION_LIST
:
case
PSD_TYPE_EXT_SELECTION_LIST
:
if
(
p_vcd
->
pxd
.
psd
==
NULL
)
return
false
;
vcdplayer_update_entry
(
p_input
,
vcdinf_psd_get_prev_offset
(
p_vcd
->
pxd
.
psd
),
&
itemid
.
num
,
"prev"
);
break
;
case
PSD_TYPE_PLAY_LIST
:
if
(
p_vcd
->
pxd
.
pld
==
NULL
)
return
false
;
vcdplayer_update_entry
(
p_input
,
vcdinf_pld_get_prev_offset
(
p_vcd
->
pxd
.
pld
),
&
itemid
.
num
,
"prev"
);
break
;
case
PSD_TYPE_END_LIST
:
case
PSD_TYPE_COMMAND_LIST
:
LOG_WARN
(
"There is no PBC 'prev' selection here"
);
return
false
;
}
}
else
{
/* PBC is not on. "Prev" selection is play_item.num-1 if possible. */
int
min_entry
=
(
VCDINFO_ITEM_TYPE_ENTRY
==
p_vcd
->
play_item
.
type
)
?
0
:
1
;
if
(
p_vcd
->
play_item
.
num
>
min_entry
)
{
itemid
.
num
=
p_vcd
->
play_item
.
num
-
1
;
}
else
{
LOG_WARN
(
"At the beginning - non-PBC 'prev' not possible here"
);
return
false
;
}
}
/** ??? p_vcd->update_title(); ***/
return
VLC_SUCCESS
==
VCDPlay
(
p_input
,
itemid
);
}
/*!
Play item assocated with the "return" selection.
Return false if there was some problem.
*/
bool
vcdplayer_play_return
(
input_thread_t
*
p_input
)
{
thread_vcd_data_t
*
p_vcd
=
(
thread_vcd_data_t
*
)
p_input
->
p_access_data
;
vcdinfo_obj_t
*
obj
=
p_vcd
->
vcd
;
vcdinfo_itemid_t
itemid
;
dbg_print
(
(
INPUT_DBG_CALL
|
INPUT_DBG_PBC
),
"current: %d"
,
p_vcd
->
play_item
.
num
);
itemid
.
type
=
p_vcd
->
play_item
.
type
;
if
(
vcdplayer_pbc_is_on
(
p_vcd
))
{
vcdinfo_lid_get_pxd
(
obj
,
&
(
p_vcd
->
pxd
),
p_vcd
->
cur_lid
);
switch
(
p_vcd
->
pxd
.
descriptor_type
)
{
case
PSD_TYPE_SELECTION_LIST
:
case
PSD_TYPE_EXT_SELECTION_LIST
:
if
(
p_vcd
->
pxd
.
psd
==
NULL
)
return
false
;
vcdplayer_update_entry
(
p_input
,
vcdinf_psd_get_return_offset
(
p_vcd
->
pxd
.
psd
),
&
itemid
.
num
,
"return"
);
break
;
case
PSD_TYPE_PLAY_LIST
:
if
(
p_vcd
->
pxd
.
pld
==
NULL
)
return
false
;
vcdplayer_update_entry
(
p_input
,
vcdinf_pld_get_return_offset
(
p_vcd
->
pxd
.
pld
),
&
itemid
.
num
,
"return"
);
break
;
case
PSD_TYPE_END_LIST
:
case
PSD_TYPE_COMMAND_LIST
:
LOG_WARN
(
"There is no PBC 'return' selection here"
);
return
false
;
}
}
else
{
/* PBC is not on. "Return" selection is min_entry if possible. */
p_vcd
->
play_item
.
num
=
(
VCDINFO_ITEM_TYPE_ENTRY
==
p_vcd
->
play_item
.
type
)
?
0
:
1
;
}
/** ??? p_vcd->update_title(); ***/
return
VLC_SUCCESS
==
VCDPlay
(
p_input
,
itemid
);
}
modules/access/vcdx/vcdplayer.h
View file @
c7897a28
/*****************************************************************************
/*****************************************************************************
* Copyright (C) 2003 Rocky Bernstein (for VideoLAN)
* Copyright (C) 2003 Rocky Bernstein (for VideoLAN)
* $Id: vcdplayer.h,v 1.
1 2003/10/04 18:55:13 gbazin
Exp $
* $Id: vcdplayer.h,v 1.
2 2003/11/09 00:52:32 rocky
Exp $
*
*
* Authors: Rocky Bernstein <rocky@panix.com>
* Authors: Rocky Bernstein <rocky@panix.com>
*
*
...
@@ -26,15 +26,18 @@
...
@@ -26,15 +26,18 @@
#include <libvcd/info.h>
#include <libvcd/info.h>
#define INPUT_DBG_MRL 1
#define INPUT_DBG_META 1
/* Meta information */
#define INPUT_DBG_EXT 2
/* Calls from external routines */
#define INPUT_DBG_EVENT 2
/* input (keyboard/mouse) events */
#define INPUT_DBG_CALL 4
/* all calls */
#define INPUT_DBG_MRL 4
/* MRL parsing */
#define INPUT_DBG_LSN 8
/* LSN changes */
#define INPUT_DBG_EXT 8
/* Calls from external routines */
#define INPUT_DBG_PBC 16
/* Playback control */
#define INPUT_DBG_CALL 16
/* all calls */
#define INPUT_DBG_CDIO 32
/* Debugging from CDIO */
#define INPUT_DBG_LSN 32
/* LSN changes */
#define INPUT_DBG_SEEK 64
/* Seeks to set location */
#define INPUT_DBG_PBC 64
/* Playback control */
#define INPUT_DBG_STILL 128
/* Still-frame */
#define INPUT_DBG_CDIO 128
/* Debugging from CDIO */
#define INPUT_DBG_VCDINFO 256
/* Debugging from VCDINFO */
#define INPUT_DBG_SEEK 256
/* Seeks to set location */
#define INPUT_DBG_SEEK_CUR 512
/* Seeks to find current location */
#define INPUT_DBG_STILL 1024
/* Still-frame */
#define INPUT_DBG_VCDINFO 2048
/* Debugging from VCDINFO */
#define INPUT_DEBUG 1
#define INPUT_DEBUG 1
#if INPUT_DEBUG
#if INPUT_DEBUG
...
@@ -45,7 +48,8 @@
...
@@ -45,7 +48,8 @@
#define dbg_print(mask, s, args...)
#define dbg_print(mask, s, args...)
#endif
#endif
#define LOG_ERR(args...) msg_Err( p_input, args )
#define LOG_ERR(args...) msg_Err( p_input, args )
#define LOG_WARN(args...) msg_Warn( p_input, args )
/* vcdplayer_read return status */
/* vcdplayer_read return status */
typedef
enum
{
typedef
enum
{
...
@@ -97,11 +101,56 @@ typedef struct thread_vcd_data_s
...
@@ -97,11 +101,56 @@ typedef struct thread_vcd_data_s
bool
b_valid_ep
;
/* Valid entry points flag */
bool
b_valid_ep
;
/* Valid entry points flag */
vlc_bool_t
b_end_of_track
;
/* If the end of track was reached */
vlc_bool_t
b_end_of_track
;
/* If the end of track was reached */
int
i_debug
;
/* Debugging mask */
int
i_debug
;
/* Debugging mask */
/* Probably gets moved into another structure...*/
intf_thread_t
*
p_intf
;
int
i_audio_nb
;
int
i_still_time
;
vlc_bool_t
b_end_of_cell
;
}
thread_vcd_data_t
;
}
thread_vcd_data_t
;
bool
vcdplayer_inc_play_item
(
input_thread_t
*
p_input
);
/*!
bool
vcdplayer_pbc_is_on
(
const
thread_vcd_data_t
*
p_this
);
Get the next play-item in the list given in the LIDs. Note play-item
here refers to list of play-items for a single LID It shouldn't be
confused with a user's list of favorite things to play or the
"next" field of a LID which moves us to a different LID.
*/
bool
vcdplayer_inc_play_item
(
input_thread_t
*
p_input
);
/*!
Return true if playback control (PBC) is on
*/
bool
vcdplayer_pbc_is_on
(
const
thread_vcd_data_t
*
p_this
);
/*!
Play item assocated with the "default" selection.
Return false if there was some problem.
*/
bool
vcdplayer_play_default
(
input_thread_t
*
p_input
);
/*!
Play item assocated with the "next" selection.
Return false if there was some problem.
*/
bool
vcdplayer_play_next
(
input_thread_t
*
p_input
);
/*!
Play item assocated with the "prev" selection.
Return false if there was some problem.
*/
bool
vcdplayer_play_prev
(
input_thread_t
*
p_input
);
/*!
Play item assocated with the "return" selection.
Return false if there was some problem.
*/
bool
vcdplayer_play_return
(
input_thread_t
*
p_input
);
vcdplayer_read_status_t
vcdplayer_pbc_nav
(
input_thread_t
*
p_input
);
vcdplayer_read_status_t
vcdplayer_pbc_nav
(
input_thread_t
*
p_input
);
vcdplayer_read_status_t
vcdplayer_non_pbc_nav
(
input_thread_t
*
p_input
);
vcdplayer_read_status_t
vcdplayer_non_pbc_nav
(
input_thread_t
*
p_input
);
...
...
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