Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
c2aac10e
Commit
c2aac10e
authored
Mar 09, 2002
by
Stéphane Borel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*Fixed EOF segfault at end of DVD *Buffer manager is renintialised at area change.
parent
d865ef30
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
55 additions
and
43 deletions
+55
-43
plugins/dvd/dvd.h
plugins/dvd/dvd.h
+1
-3
plugins/dvd/dvd_access.c
plugins/dvd/dvd_access.c
+8
-8
plugins/dvd/dvd_demux.c
plugins/dvd/dvd_demux.c
+7
-3
plugins/dvd/dvd_seek.c
plugins/dvd/dvd_seek.c
+27
-19
plugins/dvd/dvd_seek.h
plugins/dvd/dvd_seek.h
+9
-9
src/input/input.c
src/input/input.c
+3
-1
No files found.
plugins/dvd/dvd.h
View file @
c2aac10e
...
...
@@ -2,7 +2,7 @@
* dvd.h: thread structure of the DVD plugin
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
* $Id: dvd.h,v 1.
2 2002/03/08 22:58:12
stef Exp $
* $Id: dvd.h,v 1.
3 2002/03/09 16:48:33
stef Exp $
*
* Author: Stéphane Borel <stef@via.ecp.fr>
*
...
...
@@ -58,8 +58,6 @@ typedef struct thread_dvd_data_s
int
i_vts_lb
;
/* sector in vts */
int
i_end_lb
;
/* last sector of current cell */
int
i_size
;
/* Structure that contains all information of the DVD */
struct
ifo_s
*
p_ifo
;
...
...
plugins/dvd/dvd_access.c
View file @
c2aac10e
...
...
@@ -8,7 +8,7 @@
* -dvd_udf to find files
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
* $Id: dvd_access.c,v 1.
4 2002/03/09 13:42:46 sam
Exp $
* $Id: dvd_access.c,v 1.
5 2002/03/09 16:48:33 stef
Exp $
*
* Author: Stphane Borel <stef@via.ecp.fr>
*
...
...
@@ -416,7 +416,6 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
vts
.
i_pos
+
vts
.
manager_inf
.
i_title_vob_start_sector
;
/* last cell */
intf_WarnMsg
(
4
,
"prg_cell nb %d"
,
vts
.
title_unit
.
p_title
[
p_dvd
->
i_title_id
-
1
].
title
.
i_cell_nb
);
p_dvd
->
i_prg_cell
=
-
1
+
vts
.
title_unit
.
p_title
[
p_dvd
->
i_title_id
-
1
].
title
.
i_cell_nb
;
p_dvd
->
i_map_cell
=
0
;
...
...
@@ -424,11 +423,12 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
i_size
=
CellEndSector
(
p_dvd
);
/* first cell */
p_dvd
->
i_prg_cell
=
0
;
p_dvd
->
i_map_cell
=
0
;
p_dvd
->
i_map_cell
=
CellPrg2Map
(
p_dvd
);
p_dvd
->
i_vts_lb
=
CellStartSector
(
p_dvd
);
p_dvd
->
i_end_lb
=
CellEndSector
(
p_dvd
);
p_dvd
->
i_prg_cell
=
0
;
p_dvd
->
i_map_cell
=
0
;
p_dvd
->
i_angle_cell
=
0
;
p_dvd
->
i_map_cell
=
CellPrg2Map
(
p_dvd
);
p_dvd
->
i_vts_lb
=
CellStartSector
(
p_dvd
);
p_dvd
->
i_end_lb
=
CellEndSector
(
p_dvd
);
/* Force libdvdcss to check its title key.
* It is only useful for title cracking method. Methods using the
...
...
@@ -551,7 +551,7 @@ static int DVDRead( input_thread_t * p_input,
if
(
(
p_input
->
stream
.
p_selected_area
->
i_tell
>=
p_input
->
stream
.
p_selected_area
->
i_size
)
||
(
i_block_once
<
0
)
)
||
(
i_block_once
<
=
0
)
)
{
if
(
(
p_dvd
->
i_title
+
1
)
>=
p_input
->
stream
.
i_area_nb
)
{
...
...
plugins/dvd/dvd_demux.c
View file @
c2aac10e
/* dvd_demux.c: DVD demux functions.
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
* $Id: dvd_demux.c,v 1.
2 2002/03/06 12:26:35
stef Exp $
* $Id: dvd_demux.c,v 1.
3 2002/03/09 16:48:33
stef Exp $
*
* Author: Stphane Borel <stef@via.ecp.fr>
*
...
...
@@ -109,13 +109,17 @@ static void DVDEnd( input_thread_t * p_input )
*****************************************************************************/
static
int
DVDDemux
(
input_thread_t
*
p_input
)
{
int
i
;
data_packet_t
*
p_data
;
ssize_t
i_result
;
int
i
;
/* Read headers to compute payload length */
for
(
i
=
0
;
i
<
DVD_READ_ONCE
;
i
++
)
{
input_ReadPS
(
p_input
,
&
p_data
);
if
(
(
i_result
=
input_ReadPS
(
p_input
,
&
p_data
)
)
<=
0
)
{
return
i_result
;
}
input_DemuxPS
(
p_input
,
p_data
);
}
...
...
plugins/dvd/dvd_seek.c
View file @
c2aac10e
/* dvd_seek.c: functions to navigate through DVD.
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
* $Id: dvd_seek.c,v 1.
2 2002/03/08 22:58:12
stef Exp $
* $Id: dvd_seek.c,v 1.
3 2002/03/09 16:48:33
stef Exp $
*
* Author: Stphane Borel <stef@via.ecp.fr>
*
...
...
@@ -69,9 +69,9 @@ int CellIsInterleaved( thread_dvd_data_t * p_dvd )
return
title
.
p_cell_play
[
p_dvd
->
i_prg_cell
].
i_category
&
0xf000
;
}
u32
CellPrg2Map
(
thread_dvd_data_t
*
p_dvd
)
int
CellPrg2Map
(
thread_dvd_data_t
*
p_dvd
)
{
u32
i_cell
;
int
i_cell
;
i_cell
=
p_dvd
->
i_map_cell
;
...
...
@@ -97,9 +97,14 @@ u32 CellPrg2Map( thread_dvd_data_t * p_dvd )
return
i_cell
;
}
u32
CellAngleOffset
(
thread_dvd_data_t
*
p_dvd
,
u32
i_prg_cell
)
int
CellAngleOffset
(
thread_dvd_data_t
*
p_dvd
,
int
i_prg_cell
)
{
u32
i_cell_off
;
int
i_cell_off
;
if
(
i_prg_cell
>=
title
.
i_cell_nb
)
{
return
0
;
}
/* basic handling of angles */
switch
(
(
(
title
.
p_cell_play
[
i_prg_cell
].
i_category
&
0xf000
)
...
...
@@ -122,21 +127,21 @@ u32 CellAngleOffset( thread_dvd_data_t * p_dvd, u32 i_prg_cell )
return
i_cell_off
;
}
u32
CellStartSector
(
thread_dvd_data_t
*
p_dvd
)
int
CellStartSector
(
thread_dvd_data_t
*
p_dvd
)
{
return
__MAX
(
cell
.
p_cell_map
[
p_dvd
->
i_map_cell
].
i_start_sector
,
title
.
p_cell_play
[
p_dvd
->
i_prg_cell
].
i_start_sector
);
}
u32
CellEndSector
(
thread_dvd_data_t
*
p_dvd
)
int
CellEndSector
(
thread_dvd_data_t
*
p_dvd
)
{
return
__MIN
(
cell
.
p_cell_map
[
p_dvd
->
i_map_cell
].
i_end_sector
,
title
.
p_cell_play
[
p_dvd
->
i_prg_cell
].
i_end_sector
);
}
u32
NextCellPrg
(
thread_dvd_data_t
*
p_dvd
)
int
NextCellPrg
(
thread_dvd_data_t
*
p_dvd
)
{
u32
i_cell
=
p_dvd
->
i_prg_cell
;
int
i_cell
=
p_dvd
->
i_prg_cell
;
if
(
p_dvd
->
i_vts_lb
>
title
.
p_cell_play
[
i_cell
].
i_end_sector
)
{
...
...
@@ -152,9 +157,9 @@ u32 NextCellPrg( thread_dvd_data_t * p_dvd )
return
i_cell
;
}
u32
Lb2CellPrg
(
thread_dvd_data_t
*
p_dvd
)
int
Lb2CellPrg
(
thread_dvd_data_t
*
p_dvd
)
{
u32
i_cell
=
0
;
int
i_cell
=
0
;
while
(
p_dvd
->
i_vts_lb
>
title
.
p_cell_play
[
i_cell
].
i_end_sector
)
{
...
...
@@ -170,9 +175,9 @@ u32 Lb2CellPrg( thread_dvd_data_t * p_dvd )
return
i_cell
;
}
u32
Lb2CellMap
(
thread_dvd_data_t
*
p_dvd
)
int
Lb2CellMap
(
thread_dvd_data_t
*
p_dvd
)
{
u32
i_cell
=
0
;
int
i_cell
=
0
;
while
(
p_dvd
->
i_vts_lb
>
cell
.
p_cell_map
[
i_cell
].
i_end_sector
)
{
...
...
@@ -187,9 +192,9 @@ u32 Lb2CellMap( thread_dvd_data_t * p_dvd )
return
i_cell
;
}
u32
LbMaxOnce
(
thread_dvd_data_t
*
p_dvd
)
int
LbMaxOnce
(
thread_dvd_data_t
*
p_dvd
)
{
u32
i_block_once
=
p_dvd
->
i_end_lb
-
p_dvd
->
i_vts_lb
+
1
;
int
i_block_once
=
p_dvd
->
i_end_lb
-
p_dvd
->
i_vts_lb
+
1
;
/* Get the position of the next cell if we're at cell end */
if
(
i_block_once
<=
0
)
...
...
@@ -210,6 +215,11 @@ u32 LbMaxOnce( thread_dvd_data_t * p_dvd )
p_dvd
->
i_vts_lb
=
CellStartSector
(
p_dvd
);
p_dvd
->
i_end_lb
=
CellEndSector
(
p_dvd
);
if
(
(
p_dvd
->
i_chapter
=
NextChapter
(
p_dvd
)
)
<
0
)
{
return
0
;
}
/* Position the fd pointer on the right address */
if
(
(
dvdcss_seek
(
p_dvd
->
dvdhandle
,
...
...
@@ -221,8 +231,6 @@ u32 LbMaxOnce( thread_dvd_data_t * p_dvd )
return
0
;
}
p_dvd
->
i_chapter
=
NextChapter
(
p_dvd
);
i_block_once
=
p_dvd
->
i_end_lb
-
p_dvd
->
i_vts_lb
+
1
;
}
...
...
@@ -264,9 +272,9 @@ int NextChapter( thread_dvd_data_t * p_dvd )
if
(
title
.
chapter_map
.
pi_start_cell
[
p_dvd
->
i_chapter
]
<=
i_cell
+
1
)
{
p_dvd
->
i_chapter
++
;
if
(
p_dvd
->
i_chapter
>
=
p_dvd
->
i_chapter_nb
)
if
(
p_dvd
->
i_chapter
>
p_dvd
->
i_chapter_nb
)
{
return
0
;
return
-
1
;
}
p_dvd
->
b_new_chapter
=
1
;
return
p_dvd
->
i_chapter
;
...
...
plugins/dvd/dvd_seek.h
View file @
c2aac10e
/* dvd_seek.h: DVD access plugin.
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
* $Id: dvd_seek.h,v 1.
2 2002/03/08 22:58:12
stef Exp $
* $Id: dvd_seek.h,v 1.
3 2002/03/09 16:48:33
stef Exp $
*
* Author: Stphane Borel <stef@via.ecp.fr>
*
...
...
@@ -21,15 +21,15 @@
*****************************************************************************/
int
CellIsInterleaved
(
thread_dvd_data_t
*
);
u32
CellAngleOffset
(
thread_dvd_data_t
*
,
u32
);
u32
CellPrg2Map
(
thread_dvd_data_t
*
);
u32
CellStartSector
(
thread_dvd_data_t
*
);
u32
CellEndSector
(
thread_dvd_data_t
*
);
int
CellAngleOffset
(
thread_dvd_data_t
*
,
int
);
int
CellPrg2Map
(
thread_dvd_data_t
*
);
int
CellStartSector
(
thread_dvd_data_t
*
);
int
CellEndSector
(
thread_dvd_data_t
*
);
u32
NextCellPrg
(
thread_dvd_data_t
*
);
u32
Lb2CellPrg
(
thread_dvd_data_t
*
);
u32
Lb2CellMap
(
thread_dvd_data_t
*
);
u32
LbMaxOnce
(
thread_dvd_data_t
*
);
int
NextCellPrg
(
thread_dvd_data_t
*
);
int
Lb2CellPrg
(
thread_dvd_data_t
*
);
int
Lb2CellMap
(
thread_dvd_data_t
*
);
int
LbMaxOnce
(
thread_dvd_data_t
*
);
int
CellPrg2Chapter
(
thread_dvd_data_t
*
);
int
NextChapter
(
thread_dvd_data_t
*
);
...
...
src/input/input.c
View file @
c2aac10e
...
...
@@ -4,7 +4,7 @@
* decoders.
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
* $Id: input.c,v 1.18
7 2002/03/06 01:20:56
stef Exp $
* $Id: input.c,v 1.18
8 2002/03/09 16:48:33
stef Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Alexis Guillard <alexis.guillard@bt.com>
...
...
@@ -339,6 +339,8 @@ static int RunThread( input_thread_t *p_input )
/* Reinitialize synchro. */
p_pgrm
->
i_synchro_state
=
SYNCHRO_REINIT
;
}
input_AccessReinit
(
p_input
);
}
p_input
->
stream
.
p_new_area
=
NULL
;
}
...
...
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