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
2afa5cea
Commit
2afa5cea
authored
Nov 03, 2003
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/access/dshow/*: attempt at supporting DV inputs (completely untested).
parent
03d18c98
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
102 additions
and
2 deletions
+102
-2
modules/access/dshow/dshow.cpp
modules/access/dshow/dshow.cpp
+96
-1
modules/access/dshow/filter.cpp
modules/access/dshow/filter.cpp
+6
-1
No files found.
modules/access/dshow/dshow.cpp
View file @
2afa5cea
...
...
@@ -2,7 +2,7 @@
* dshow.cpp : DirectShow access module for vlc
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: dshow.cpp,v 1.1
1 2003/10/25 00:49:13 sam
Exp $
* $Id: dshow.cpp,v 1.1
2 2003/11/03 20:22:21 gbazin
Exp $
*
* Author: Gildas Bazin <gbazin@netcourrier.com>
*
...
...
@@ -40,6 +40,7 @@
static
int
AccessOpen
(
vlc_object_t
*
);
static
void
AccessClose
(
vlc_object_t
*
);
static
ssize_t
Read
(
input_thread_t
*
,
byte_t
*
,
size_t
);
static
ssize_t
ReadDV
(
input_thread_t
*
,
byte_t
*
,
size_t
);
static
int
DemuxOpen
(
vlc_object_t
*
);
static
void
DemuxClose
(
vlc_object_t
*
);
...
...
@@ -516,6 +517,14 @@ static int OpenDevice( input_thread_t *p_input, string devicename,
else
if
(
dshow_stream
.
mt
.
subtype
==
MEDIASUBTYPE_YVU9
)
dshow_stream
.
i_fourcc
=
VLC_FOURCC
(
'Y'
,
'V'
,
'U'
,
'9'
);
/* DV formats */
else
if
(
dshow_stream
.
mt
.
subtype
==
MEDIASUBTYPE_dvsl
)
dshow_stream
.
i_fourcc
=
VLC_FOURCC
(
'd'
,
'v'
,
's'
,
'l'
);
else
if
(
dshow_stream
.
mt
.
subtype
==
MEDIASUBTYPE_dvsd
)
dshow_stream
.
i_fourcc
=
VLC_FOURCC
(
'd'
,
'v'
,
's'
,
'd'
);
else
if
(
dshow_stream
.
mt
.
subtype
==
MEDIASUBTYPE_dvhd
)
dshow_stream
.
i_fourcc
=
VLC_FOURCC
(
'd'
,
'v'
,
'h'
,
'd'
);
else
goto
fail
;
dshow_stream
.
header
.
video
=
...
...
@@ -537,6 +546,19 @@ static int OpenDevice( input_thread_t *p_input, string devicename,
else
i_height
=
-
i_height
;
}
/* Check if we are dealing with a DV stream */
if
(
dshow_stream
.
i_fourcc
==
VLC_FOURCC
(
'd'
,
'v'
,
's'
,
'l'
)
||
dshow_stream
.
i_fourcc
==
VLC_FOURCC
(
'd'
,
'v'
,
's'
,
'd'
)
||
dshow_stream
.
i_fourcc
==
VLC_FOURCC
(
'd'
,
'v'
,
'h'
,
'd'
)
)
{
p_input
->
pf_read
=
ReadDV
;
if
(
!
p_input
->
psz_demux
||
!*
p_input
->
psz_demux
)
{
p_input
->
psz_demux
=
"rawdv"
;
}
}
/* Add video stream to header */
p_sys
->
i_header_size
+=
20
;
p_sys
->
p_header
=
(
uint8_t
*
)
realloc
(
p_sys
->
p_header
,
...
...
@@ -1026,6 +1048,79 @@ static ssize_t Read( input_thread_t * p_input, byte_t * p_buffer,
return
0
;
/* never reached */
}
/*****************************************************************************
* ReadDV: reads from the DV device into PES packets.
*****************************************************************************
* Returns -1 in case of error, 0 in case of EOF, otherwise the number of
* bytes.
*****************************************************************************/
static
ssize_t
ReadDV
(
input_thread_t
*
p_input
,
byte_t
*
p_buffer
,
size_t
i_len
)
{
access_sys_t
*
p_sys
=
p_input
->
p_access_data
;
dshow_stream_t
*
p_stream
=
NULL
;
VLCMediaSample
sample
;
int
i_data_size
;
uint8_t
*
p_data
;
/* Read 1 DV frame (they contain the video and audio data) */
/* There must be only 1 elementary stream to produce a valid
* raw DV stream*/
p_stream
=
p_sys
->
pp_streams
[
0
];
while
(
1
)
{
/* Get new sample/frame from the elementary stream (blocking). */
vlc_mutex_lock
(
&
p_sys
->
lock
);
if
(
p_stream
->
p_capture_filter
->
CustomGetPin
()
->
CustomGetSample
(
&
sample
)
!=
S_OK
)
{
/* No data available. Wait until some data has arrived */
vlc_cond_wait
(
&
p_sys
->
wait
,
&
p_sys
->
lock
);
vlc_mutex_unlock
(
&
p_sys
->
lock
);
continue
;
}
vlc_mutex_unlock
(
&
p_sys
->
lock
);
/*
* We got our sample
*/
i_data_size
=
sample
.
p_sample
->
GetActualDataLength
();
sample
.
p_sample
->
GetPointer
(
&
p_data
);
REFERENCE_TIME
i_pts
,
i_end_date
;
HRESULT
hr
=
sample
.
p_sample
->
GetTime
(
&
i_pts
,
&
i_end_date
);
if
(
hr
!=
VFW_S_NO_STOP_TIME
&&
hr
!=
S_OK
)
i_pts
=
0
;
if
(
!
i_pts
)
{
if
(
p_stream
->
mt
.
majortype
==
MEDIATYPE_Video
||
!
p_stream
->
b_pts
)
{
/* Use our data timestamp */
i_pts
=
sample
.
i_timestamp
;
p_stream
->
b_pts
=
VLC_TRUE
;
}
}
#if 0
msg_Info( p_input, "access read %i data_size %i PTS: "I64Fd,
i_len, i_data_size, i_pts );
#endif
p_input
->
p_vlc
->
pf_memcpy
(
p_buffer
,
p_data
,
i_data_size
);
sample
.
p_sample
->
Release
();
/* The caller got what he wanted */
return
i_data_size
;
}
return
0
;
/* never reached */
}
/****************************************************************************
* I. Demux Part
****************************************************************************/
...
...
modules/access/dshow/filter.cpp
View file @
2afa5cea
...
...
@@ -2,7 +2,7 @@
* filter.c : DirectShow access module for vlc
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: filter.cpp,v 1.
6 2003/10/18 20:09:23
gbazin Exp $
* $Id: filter.cpp,v 1.
7 2003/11/03 20:22:21
gbazin Exp $
*
* Author: Gildas Bazin <gbazin@netcourrier.com>
*
...
...
@@ -102,6 +102,11 @@ const GUID FORMAT_WaveFormatEx = {0x05589f81, 0xc356, 0x11ce, {0xbf, 0x01, 0x00,
const
GUID
MEDIASUBTYPE_PCM
=
{
0x00000001
,
0x0000
,
0x0010
,
{
0x80
,
0x00
,
0x00
,
0xaa
,
0x00
,
0x38
,
0x9b
,
0x71
}};
const
GUID
MEDIASUBTYPE_IEEE_FLOAT
=
{
0x00000003
,
0x0000
,
0x0010
,
{
0x80
,
0x00
,
0x00
,
0xaa
,
0x00
,
0x38
,
0x9b
,
0x71
}};
/* DV formats */
const
GUID
MEDIASUBTYPE_dvsd
=
{
0x64737664
,
0x0000
,
0x0010
,
{
0x80
,
0x00
,
0x00
,
0xaa
,
0x00
,
0x38
,
0x9b
,
0x71
}};
const
GUID
MEDIASUBTYPE_dvhd
=
{
0x64687664
,
0x0000
,
0x0010
,
{
0x80
,
0x00
,
0x00
,
0xaa
,
0x00
,
0x38
,
0x9b
,
0x71
}};
const
GUID
MEDIASUBTYPE_dvsl
=
{
0x6c737664
,
0x0000
,
0x0010
,
{
0x80
,
0x00
,
0x00
,
0xaa
,
0x00
,
0x38
,
0x9b
,
0x71
}};
const
GUID
GUID_NULL
=
{
0x0000
,
0x0000
,
0x0000
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
}};
void
WINAPI
FreeMediaType
(
AM_MEDIA_TYPE
&
mt
)
...
...
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