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
9139d783
Commit
9139d783
authored
Feb 23, 2005
by
Steve Lhomme
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mkv.cpp: fix dirent issue with the recent "fixes"
parent
e2d3cfa4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
60 additions
and
54 deletions
+60
-54
modules/demux/mkv.cpp
modules/demux/mkv.cpp
+60
-54
No files found.
modules/demux/mkv.cpp
View file @
9139d783
...
@@ -47,6 +47,12 @@
...
@@ -47,6 +47,12 @@
#ifdef HAVE_DIRENT_H
#ifdef HAVE_DIRENT_H
# include <dirent.h>
# include <dirent.h>
#else if defined(MSCVER)
extern
"C"
{
void
*
vlc_opendir
(
const
char
*
)
;
void
*
vlc_readdir
(
void
*
);
int
vlc_closedir
(
void
*
)
;
}
#endif
#endif
/* libebml and matroska */
/* libebml and matroska */
...
@@ -316,24 +322,24 @@ typedef struct
...
@@ -316,24 +322,24 @@ typedef struct
class
chapter_item_t
class
chapter_item_t
{
{
public:
public:
int64_t
i_start_time
,
i_end_time
;
int64_t
i_start_time
,
i_end_time
;
int64_t
i_absolute_start_time
;
/* the time in the stream when an edition is ordered */
int64_t
i_absolute_start_time
;
/* the time in the stream when an edition is ordered */
std
::
vector
<
chapter_item_t
>
sub_chapters
;
std
::
vector
<
chapter_item_t
>
sub_chapters
;
int
i_current_sub_chapter
;
int
i_current_sub_chapter
;
int
i_seekpoint_num
;
int
i_seekpoint_num
;
};
};
class
chapter_edition_t
class
chapter_edition_t
{
{
public:
public:
chapter_edition_t
()
chapter_edition_t
()
:
i_uid
(
-
1
)
:
i_uid
(
-
1
)
,
b_ordered
(
false
)
,
b_ordered
(
false
)
{}
{}
std
::
vector
<
chapter_item_t
>
chapters
;
std
::
vector
<
chapter_item_t
>
chapters
;
int64_t
i_uid
;
int64_t
i_uid
;
bool
b_ordered
;
bool
b_ordered
;
};
};
class
demux_sys_t
class
demux_sys_t
...
@@ -365,7 +371,7 @@ public:
...
@@ -365,7 +371,7 @@ public:
,
psz_date_utc
(
NULL
)
,
psz_date_utc
(
NULL
)
,
meta
(
NULL
)
,
meta
(
NULL
)
,
title
(
NULL
)
,
title
(
NULL
)
,
i_current_edition
(
0
)
,
i_current_edition
(
0
)
{}
{}
vlc_stream_io_callback
*
in
;
vlc_stream_io_callback
*
in
;
...
@@ -413,9 +419,9 @@ public:
...
@@ -413,9 +419,9 @@ public:
std
::
vector
<
KaxSegmentFamily
>
families
;
std
::
vector
<
KaxSegmentFamily
>
families
;
std
::
vector
<
KaxSegment
*>
family_members
;
std
::
vector
<
KaxSegment
*>
family_members
;
std
::
vector
<
chapter_edition_t
>
editions
;
std
::
vector
<
chapter_edition_t
>
editions
;
int
i_current_edition
;
int
i_current_edition
;
};
};
#define MKVD_TIMECODESCALE 1000000
#define MKVD_TIMECODESCALE 1000000
...
@@ -598,7 +604,7 @@ static int Open( vlc_object_t * p_this )
...
@@ -598,7 +604,7 @@ static int Open( vlc_object_t * p_this )
if
(
p_src_dir
!=
NULL
)
if
(
p_src_dir
!=
NULL
)
{
{
while
((
p_file_item
=
readdir
(
p_src_dir
)))
while
((
p_file_item
=
(
dirent
*
)
readdir
(
p_src_dir
)))
{
{
if
(
strlen
(
p_file_item
->
d_name
)
>
4
)
if
(
strlen
(
p_file_item
->
d_name
)
>
4
)
{
{
...
@@ -1167,7 +1173,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
...
@@ -1167,7 +1173,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
Seek
(
p_demux
,
(
int64_t
)
p_sys
->
title
->
seekpoint
[
i_skp
]
->
i_time_offset
,
-
1
);
Seek
(
p_demux
,
(
int64_t
)
p_sys
->
title
->
seekpoint
[
i_skp
]
->
i_time_offset
,
-
1
);
p_demux
->
info
.
i_seekpoint
|=
INPUT_UPDATE_SEEKPOINT
;
p_demux
->
info
.
i_seekpoint
|=
INPUT_UPDATE_SEEKPOINT
;
p_demux
->
info
.
i_seekpoint
=
i_skp
;
p_demux
->
info
.
i_seekpoint
=
i_skp
;
/*
p_sys->i_current_chapter = i_skp;*/
/*
p_sys->i_current_chapter = i_skp;*/
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
}
}
return
VLC_EGENERIC
;
return
VLC_EGENERIC
;
...
@@ -1417,14 +1423,14 @@ static void BlockDecode( demux_t *p_demux, KaxBlock *block, mtime_t i_pts,
...
@@ -1417,14 +1423,14 @@ static void BlockDecode( demux_t *p_demux, KaxBlock *block, mtime_t i_pts,
static
void
UpdateCurrentChapter
()
static
void
UpdateCurrentChapter
()
{
{
/* update current chapter/seekpoint */
/* update current chapter/seekpoint */
#ifdef TODO
#ifdef TODO
i_chapter
i_chapter
if
(
p_sys
->
title
->
seekpoint
[
i_skp
]
->
i_time_offset
)
if
(
p_sys
->
title
->
seekpoint
[
i_skp
]
->
i_time_offset
)
{
{
p_demux
->
info
.
i_update
|=
INPUT_UPDATE_SEEKPOINT
;
p_demux
->
info
.
i_update
|=
INPUT_UPDATE_SEEKPOINT
;
p_demux
->
info
.
i_seekpoint
=
i_chapter
;
p_demux
->
info
.
i_seekpoint
=
i_chapter
;
}
}
#endif
#endif
}
}
...
@@ -1601,7 +1607,7 @@ static int Demux( demux_t *p_demux)
...
@@ -1601,7 +1607,7 @@ static int Demux( demux_t *p_demux)
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
mtime_t
i_start_pts
;
mtime_t
i_start_pts
;
int
i_block_count
=
0
;
int
i_block_count
=
0
;
int
i_chapter
;
int
i_chapter
;
KaxBlock
*
block
;
KaxBlock
*
block
;
int64_t
i_block_duration
;
int64_t
i_block_duration
;
...
@@ -1612,15 +1618,15 @@ static int Demux( demux_t *p_demux)
...
@@ -1612,15 +1618,15 @@ static int Demux( demux_t *p_demux)
for
(
;;
)
for
(
;;
)
{
{
if
(
p_sys
->
editions
[
p_sys
->
i_current_edition
].
b_ordered
)
if
(
p_sys
->
editions
[
p_sys
->
i_current_edition
].
b_ordered
)
{
{
/* 1st, we need to know in which chapter we are */
/* 1st, we need to know in which chapter we are */
/* check if we need to silently seek to a new location in the stream */
/* check if we need to silently seek to a new location in the stream */
/* count the last duration time found for each track in a table (-1 not found, -2 silent) */
/* count the last duration time found for each track in a table (-1 not found, -2 silent) */
/* only seek after each duration >= end timecode of the current chapter */
/* only seek after each duration >= end timecode of the current chapter */
}
}
if
(
BlockGet
(
p_demux
,
&
block
,
&
i_block_ref1
,
&
i_block_ref2
,
&
i_block_duration
)
)
if
(
BlockGet
(
p_demux
,
&
block
,
&
i_block_ref1
,
&
i_block_ref2
,
&
i_block_duration
)
)
{
{
msg_Warn
(
p_demux
,
"cannot get block EOF?"
);
msg_Warn
(
p_demux
,
"cannot get block EOF?"
);
...
@@ -1637,8 +1643,8 @@ static int Demux( demux_t *p_demux)
...
@@ -1637,8 +1643,8 @@ static int Demux( demux_t *p_demux)
BlockDecode
(
p_demux
,
block
,
p_sys
->
i_pts
,
i_block_duration
);
BlockDecode
(
p_demux
,
block
,
p_sys
->
i_pts
,
i_block_duration
);
UpdateCurrentChapter
();
UpdateCurrentChapter
();
delete
block
;
delete
block
;
i_block_count
++
;
i_block_count
++
;
...
@@ -2789,9 +2795,9 @@ static void ParseChapterAtom( demux_t *p_demux, int i_level, EbmlMaster *ca, cha
...
@@ -2789,9 +2795,9 @@ static void ParseChapterAtom( demux_t *p_demux, int i_level, EbmlMaster *ca, cha
}
}
else
if
(
MKV_IS_ID
(
l
,
KaxChapterAtom
)
)
else
if
(
MKV_IS_ID
(
l
,
KaxChapterAtom
)
)
{
{
chapter_item_t
new_sub_chapter
;
chapter_item_t
new_sub_chapter
;
ParseChapterAtom
(
p_demux
,
i_level
+
1
,
static_cast
<
EbmlMaster
*>
(
l
),
new_sub_chapter
);
ParseChapterAtom
(
p_demux
,
i_level
+
1
,
static_cast
<
EbmlMaster
*>
(
l
),
new_sub_chapter
);
chapters
.
sub_chapters
.
push_back
(
new_sub_chapter
);
chapters
.
sub_chapters
.
push_back
(
new_sub_chapter
);
}
}
}
}
...
@@ -2818,7 +2824,7 @@ static void ParseChapters( demux_t *p_demux, EbmlElement *chapters )
...
@@ -2818,7 +2824,7 @@ static void ParseChapters( demux_t *p_demux, EbmlElement *chapters )
EbmlMaster
*
m
;
EbmlMaster
*
m
;
unsigned
int
i
;
unsigned
int
i
;
int
i_upper_level
=
0
;
int
i_upper_level
=
0
;
int
i_default_edition
=
0
;
int
i_default_edition
=
0
;
/* Master elements */
/* Master elements */
m
=
static_cast
<
EbmlMaster
*>
(
chapters
);
m
=
static_cast
<
EbmlMaster
*>
(
chapters
);
...
@@ -2830,8 +2836,8 @@ static void ParseChapters( demux_t *p_demux, EbmlElement *chapters )
...
@@ -2830,8 +2836,8 @@ static void ParseChapters( demux_t *p_demux, EbmlElement *chapters )
if
(
MKV_IS_ID
(
l
,
KaxEditionEntry
)
)
if
(
MKV_IS_ID
(
l
,
KaxEditionEntry
)
)
{
{
chapter_edition_t
edition
;
chapter_edition_t
edition
;
EbmlMaster
*
E
=
static_cast
<
EbmlMaster
*>
(
l
);
EbmlMaster
*
E
=
static_cast
<
EbmlMaster
*>
(
l
);
unsigned
int
j
;
unsigned
int
j
;
msg_Dbg
(
p_demux
,
"| | + EditionEntry"
);
msg_Dbg
(
p_demux
,
"| | + EditionEntry"
);
...
@@ -2841,9 +2847,9 @@ static void ParseChapters( demux_t *p_demux, EbmlElement *chapters )
...
@@ -2841,9 +2847,9 @@ static void ParseChapters( demux_t *p_demux, EbmlElement *chapters )
if
(
MKV_IS_ID
(
l
,
KaxChapterAtom
)
)
if
(
MKV_IS_ID
(
l
,
KaxChapterAtom
)
)
{
{
chapter_item_t
new_sub_chapter
;
chapter_item_t
new_sub_chapter
;
ParseChapterAtom
(
p_demux
,
0
,
static_cast
<
EbmlMaster
*>
(
l
),
new_sub_chapter
);
ParseChapterAtom
(
p_demux
,
0
,
static_cast
<
EbmlMaster
*>
(
l
),
new_sub_chapter
);
edition
.
chapters
.
push_back
(
new_sub_chapter
);
edition
.
chapters
.
push_back
(
new_sub_chapter
);
}
}
else
if
(
MKV_IS_ID
(
l
,
KaxEditionUID
)
)
else
if
(
MKV_IS_ID
(
l
,
KaxEditionUID
)
)
{
{
...
@@ -2855,15 +2861,15 @@ static void ParseChapters( demux_t *p_demux, EbmlElement *chapters )
...
@@ -2855,15 +2861,15 @@ static void ParseChapters( demux_t *p_demux, EbmlElement *chapters )
}
}
else
if
(
MKV_IS_ID
(
l
,
KaxEditionFlagDefault
)
)
else
if
(
MKV_IS_ID
(
l
,
KaxEditionFlagDefault
)
)
{
{
if
(
uint8
(
*
static_cast
<
KaxEditionFlagDefault
*>
(
l
))
!=
0
)
if
(
uint8
(
*
static_cast
<
KaxEditionFlagDefault
*>
(
l
))
!=
0
)
p_sys
->
i_current_edition
=
p_sys
->
editions
.
size
();
p_sys
->
i_current_edition
=
p_sys
->
editions
.
size
();
}
}
else
else
{
{
msg_Dbg
(
p_demux
,
"| | | + Unknown (%s)"
,
typeid
(
*
l
).
name
()
);
msg_Dbg
(
p_demux
,
"| | | + Unknown (%s)"
,
typeid
(
*
l
).
name
()
);
}
}
}
}
p_sys
->
editions
.
push_back
(
edition
);
p_sys
->
editions
.
push_back
(
edition
);
}
}
else
else
{
{
...
@@ -2871,12 +2877,12 @@ static void ParseChapters( demux_t *p_demux, EbmlElement *chapters )
...
@@ -2871,12 +2877,12 @@ static void ParseChapters( demux_t *p_demux, EbmlElement *chapters )
}
}
}
}
p_sys
->
i_current_edition
=
i_default_edition
;
p_sys
->
i_current_edition
=
i_default_edition
;
if
(
p_sys
->
editions
[
i_default_edition
].
b_ordered
)
if
(
p_sys
->
editions
[
i_default_edition
].
b_ordered
)
{
{
/* update the duration of the segment according to the sum of all sub chapters */
/* update the duration of the segment according to the sum of all sub chapters */
}
}
}
}
/*****************************************************************************
/*****************************************************************************
...
...
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