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
9b3216c8
Commit
9b3216c8
authored
May 21, 2002
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* ./plugins/directx/aout_directx.c: fixed compile warnings.
parent
d4a50a34
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
71 additions
and
71 deletions
+71
-71
plugins/directx/aout_directx.c
plugins/directx/aout_directx.c
+71
-71
No files found.
plugins/directx/aout_directx.c
View file @
9b3216c8
...
...
@@ -2,7 +2,7 @@
* aout_directx.c: Windows DirectX audio output method
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: aout_directx.c,v 1.2
0 2002/02/24 22:06:50 sam
Exp $
* $Id: aout_directx.c,v 1.2
1 2002/05/21 07:48:50 gbazin
Exp $
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
*
...
...
@@ -68,12 +68,12 @@ typedef struct aout_sys_s
HINSTANCE
hdsound_dll
;
/* handle of the opened dsound dll */
int
i_buffer_size
;
/* secondary sound buffer size */
int
i_write_position
;
/* next write position for the buffer */
long
l_buffer_size
;
/* secondary sound buffer size */
long
l_write_position
;
/* next write position for the buffer */
volatile
boolean_t
b_buffer_underflown
;
/* buffer underflow detection */
volatile
int
i_data_played_from_beginning
;
/* for underflow detection */
volatile
int
i_data_written_from_beginning
;
/* for underflow detection */
volatile
long
l_data_played_from_beginning
;
/* for underflow detection */
volatile
long
l_data_written_from_beginning
;
/* for underflow detection */
vlc_mutex_t
buffer_lock
;
/* audio buffer lock */
...
...
@@ -141,8 +141,8 @@ static int aout_Open( aout_thread_t *p_aout )
p_aout
->
p_sys
->
p_dsbuffer
=
NULL
;
p_aout
->
p_sys
->
p_dsnotify
=
NULL
;
p_aout
->
p_sys
->
b_notification_thread_die
=
0
;
p_aout
->
p_sys
->
i
_data_written_from_beginning
=
0
;
p_aout
->
p_sys
->
i
_data_played_from_beginning
=
0
;
p_aout
->
p_sys
->
l
_data_written_from_beginning
=
0
;
p_aout
->
p_sys
->
l
_data_played_from_beginning
=
0
;
vlc_mutex_init
(
&
p_aout
->
p_sys
->
buffer_lock
);
...
...
@@ -205,7 +205,7 @@ static int aout_SetFormat( aout_thread_t *p_aout )
{
HRESULT
dsresult
;
WAVEFORMATEX
*
p_waveformat
;
unsigned
int
i_size_struct
;
unsigned
long
i_size_struct
;
intf_WarnMsg
(
3
,
"aout: DirectX aout_SetFormat "
);
...
...
@@ -273,7 +273,7 @@ static int aout_SetFormat( aout_thread_t *p_aout )
*****************************************************************************/
static
int
aout_GetBufInfo
(
aout_thread_t
*
p_aout
,
int
i_buffer_limit
)
{
int
i_play_position
,
i_notused
,
i
_result
;
long
l_play_position
,
l_notused
,
l
_result
;
HRESULT
dsresult
;
if
(
p_aout
->
p_sys
->
b_buffer_underflown
)
...
...
@@ -283,22 +283,22 @@ static int aout_GetBufInfo( aout_thread_t *p_aout, int i_buffer_limit )
}
dsresult
=
IDirectSoundBuffer_GetCurrentPosition
(
p_aout
->
p_sys
->
p_dsbuffer
,
&
i_play_position
,
&
i
_notused
);
&
l_play_position
,
&
l
_notused
);
if
(
dsresult
!=
DS_OK
)
{
intf_WarnMsg
(
3
,
"aout: DirectX aout_GetBufInfo cannot get current pos"
);
return
(
i_buffer_limit
);
}
i_result
=
(
p_aout
->
p_sys
->
i_write_position
>=
i
_play_position
)
?
(
p_aout
->
p_sys
->
i_write_position
-
i
_play_position
)
:
(
p_aout
->
p_sys
->
i_buffer_size
-
i
_play_position
+
p_aout
->
p_sys
->
i
_write_position
);
l_result
=
(
p_aout
->
p_sys
->
l_write_position
>=
l
_play_position
)
?
(
p_aout
->
p_sys
->
l_write_position
-
l
_play_position
)
:
(
p_aout
->
p_sys
->
l_buffer_size
-
l
_play_position
+
p_aout
->
p_sys
->
l
_write_position
);
#if 0
intf_WarnMsg( 3, "aout: DirectX aout_GetBufInfo: %
i", i
_result);
intf_WarnMsg( 3, "aout: DirectX aout_GetBufInfo: %
li", l
_result);
#endif
return
i
_result
;
return
l
_result
;
}
/*****************************************************************************
...
...
@@ -310,7 +310,7 @@ static int aout_GetBufInfo( aout_thread_t *p_aout, int i_buffer_limit )
static
void
aout_Play
(
aout_thread_t
*
p_aout
,
byte_t
*
buffer
,
int
i_size
)
{
VOID
*
p_write_position
,
*
p_start_buffer
;
int
i_bytes1
,
i_bytes2
,
i
_play_position
;
long
l_bytes1
,
l_bytes2
,
l
_play_position
;
HRESULT
dsresult
;
/* protect buffer access (because of DirectSoundThread) */
...
...
@@ -322,30 +322,30 @@ static void aout_Play( aout_thread_t *p_aout, byte_t *buffer, int i_size )
* as soon as possible. This is why we query the play position */
dsresult
=
IDirectSoundBuffer_GetCurrentPosition
(
p_aout
->
p_sys
->
p_dsbuffer
,
&
i
_play_position
,
&
p_aout
->
p_sys
->
i
_write_position
);
&
l
_play_position
,
&
p_aout
->
p_sys
->
l
_write_position
);
if
(
dsresult
!=
DS_OK
)
{
intf_WarnMsg
(
3
,
"aout: aout_Play can'get buffer position"
);
p_aout
->
p_sys
->
i
_write_position
=
0
;
p_aout
->
p_sys
->
l
_write_position
=
0
;
}
intf_WarnMsg
(
3
,
"aout: aout_Play underflow"
);
/* reinitialise the underflow detection counters */
p_aout
->
p_sys
->
b_buffer_underflown
=
0
;
p_aout
->
p_sys
->
i
_data_written_from_beginning
=
0
;
p_aout
->
p_sys
->
l
_data_written_from_beginning
=
0
;
#define WRITE_P p_aout->p_sys->
i
_write_position
#define PLAY_P
i
_play_position
#define BUF_SIZE p_aout->p_sys->
i
_buffer_size
p_aout
->
p_sys
->
i
_data_played_from_beginning
=
-
(
WRITE_P
%
(
BUF_SIZE
/
2
));
#define WRITE_P p_aout->p_sys->
l
_write_position
#define PLAY_P
l
_play_position
#define BUF_SIZE p_aout->p_sys->
l
_buffer_size
p_aout
->
p_sys
->
l
_data_played_from_beginning
=
-
(
WRITE_P
%
(
BUF_SIZE
/
2
));
if
(
PLAY_P
<
BUF_SIZE
/
2
&&
WRITE_P
>
BUF_SIZE
/
2
)
{
p_aout
->
p_sys
->
i
_data_played_from_beginning
-=
(
BUF_SIZE
/
2
);
p_aout
->
p_sys
->
l
_data_played_from_beginning
-=
(
BUF_SIZE
/
2
);
}
if
(
PLAY_P
>
BUF_SIZE
/
2
&&
WRITE_P
<
BUF_SIZE
/
2
)
{
p_aout
->
p_sys
->
i
_data_played_from_beginning
-=
(
BUF_SIZE
/
2
);
p_aout
->
p_sys
->
l
_data_played_from_beginning
-=
(
BUF_SIZE
/
2
);
}
#undef WRITE_P
#undef PLAY_P
...
...
@@ -354,23 +354,23 @@ static void aout_Play( aout_thread_t *p_aout, byte_t *buffer, int i_size )
/* Before copying anything, we have to lock the buffer */
dsresult
=
IDirectSoundBuffer_Lock
(
p_aout
->
p_sys
->
p_dsbuffer
,
p_aout
->
p_sys
->
i
_write_position
,
/* Offset of lock start */
p_aout
->
p_sys
->
l
_write_position
,
/* Offset of lock start */
i_size
,
/* Number of bytes to lock */
&
p_write_position
,
/* Address of lock start */
&
i
_bytes1
,
/* Count of bytes locked before wrap around */
&
l
_bytes1
,
/* Count of bytes locked before wrap around */
&
p_start_buffer
,
/* Buffer adress (if wrap around) */
&
i
_bytes2
,
/* Count of bytes after wrap around */
&
l
_bytes2
,
/* Count of bytes after wrap around */
0
);
/* Flags */
if
(
dsresult
==
DSERR_BUFFERLOST
)
{
IDirectSoundBuffer_Restore
(
p_aout
->
p_sys
->
p_dsbuffer
);
dsresult
=
IDirectSoundBuffer_Lock
(
p_aout
->
p_sys
->
p_dsbuffer
,
p_aout
->
p_sys
->
i
_write_position
,
p_aout
->
p_sys
->
l
_write_position
,
i_size
,
&
p_write_position
,
&
i
_bytes1
,
&
l
_bytes1
,
&
p_start_buffer
,
&
i
_bytes2
,
&
l
_bytes2
,
0
);
}
...
...
@@ -382,20 +382,20 @@ static void aout_Play( aout_thread_t *p_aout, byte_t *buffer, int i_size )
}
/* Now do the actual memcpy (two memcpy because the buffer is circular) */
memcpy
(
p_write_position
,
buffer
,
i
_bytes1
);
memcpy
(
p_write_position
,
buffer
,
l
_bytes1
);
if
(
p_start_buffer
!=
NULL
)
{
memcpy
(
p_start_buffer
,
buffer
+
i_bytes1
,
i
_bytes2
);
memcpy
(
p_start_buffer
,
buffer
+
l_bytes1
,
l
_bytes2
);
}
/* Now the data has been copied, unlock the buffer */
IDirectSoundBuffer_Unlock
(
p_aout
->
p_sys
->
p_dsbuffer
,
p_write_position
,
i_bytes1
,
p_start_buffer
,
i
_bytes2
);
p_write_position
,
l_bytes1
,
p_start_buffer
,
l
_bytes2
);
/* Update the write position index of the buffer*/
p_aout
->
p_sys
->
i
_write_position
+=
i_size
;
p_aout
->
p_sys
->
i_write_position
%=
p_aout
->
p_sys
->
i
_buffer_size
;
p_aout
->
p_sys
->
i
_data_written_from_beginning
+=
i_size
;
p_aout
->
p_sys
->
l
_write_position
+=
i_size
;
p_aout
->
p_sys
->
l_write_position
%=
p_aout
->
p_sys
->
l
_buffer_size
;
p_aout
->
p_sys
->
l
_data_written_from_beginning
+=
i_size
;
vlc_mutex_unlock
(
&
p_aout
->
p_sys
->
buffer_lock
);
...
...
@@ -574,11 +574,11 @@ static int DirectxCreateSecondaryBuffer( aout_thread_t *p_aout )
memset
(
&
dsbcaps
,
0
,
sizeof
(
DSBCAPS
));
dsbcaps
.
dwSize
=
sizeof
(
DSBCAPS
);
IDirectSoundBuffer_GetCaps
(
p_aout
->
p_sys
->
p_dsbuffer
,
&
dsbcaps
);
p_aout
->
p_sys
->
i
_buffer_size
=
dsbcaps
.
dwBufferBytes
;
p_aout
->
p_sys
->
i
_write_position
=
0
;
p_aout
->
p_sys
->
l
_buffer_size
=
dsbcaps
.
dwBufferBytes
;
p_aout
->
p_sys
->
l
_write_position
=
0
;
intf_WarnMsg
(
3
,
"aout: DirectX DirectxCreateSecondaryBuffer: %i"
,
p_aout
->
p_sys
->
i
_buffer_size
);
intf_WarnMsg
(
3
,
"aout: DirectX DirectxCreateSecondaryBuffer: %
l
i"
,
p_aout
->
p_sys
->
l
_buffer_size
);
/* Now the secondary buffer is created, we need to setup its position
* notification */
...
...
@@ -646,9 +646,9 @@ static void DirectSoundThread( aout_thread_t *p_aout )
{
HANDLE
notification_events
[
2
];
VOID
*
p_write_position
,
*
p_start_buffer
;
int
i_bytes1
,
i
_bytes2
;
long
l_bytes1
,
l
_bytes2
;
HRESULT
dsresult
;
int
i_buffer_size
,
i_play_position
,
i
_data_in_buffer
;
long
l_buffer_size
,
l_play_position
,
l
_data_in_buffer
;
notification_events
[
0
]
=
p_aout
->
p_sys
->
notification_events
[
0
].
hEventNotify
;
notification_events
[
1
]
=
p_aout
->
p_sys
->
notification_events
[
1
].
hEventNotify
;
...
...
@@ -665,7 +665,7 @@ static void DirectSoundThread( aout_thread_t *p_aout )
while
(
!
p_aout
->
p_sys
->
b_notification_thread_die
)
{
/* wait for the position notification */
i
_play_position
=
WaitForMultipleObjects
(
2
,
notification_events
,
l
_play_position
=
WaitForMultipleObjects
(
2
,
notification_events
,
0
,
INFINITE
);
vlc_mutex_lock
(
&
p_aout
->
p_sys
->
buffer_lock
);
...
...
@@ -675,28 +675,28 @@ static void DirectSoundThread( aout_thread_t *p_aout )
}
/* check for buffer underflow (bodge for wrap around) */
i_buffer_size
=
p_aout
->
p_sys
->
i
_buffer_size
;
i_play_position
=
(
i_play_position
-
WAIT_OBJECT_0
)
*
i
_buffer_size
/
2
;
p_aout
->
p_sys
->
i_data_played_from_beginning
+=
(
i
_buffer_size
/
2
);
i_data_in_buffer
=
p_aout
->
p_sys
->
i
_data_written_from_beginning
-
p_aout
->
p_sys
->
i
_data_played_from_beginning
;
l_buffer_size
=
p_aout
->
p_sys
->
l
_buffer_size
;
l_play_position
=
(
l_play_position
-
WAIT_OBJECT_0
)
*
l
_buffer_size
/
2
;
p_aout
->
p_sys
->
l_data_played_from_beginning
+=
(
l
_buffer_size
/
2
);
l_data_in_buffer
=
p_aout
->
p_sys
->
l
_data_written_from_beginning
-
p_aout
->
p_sys
->
l
_data_played_from_beginning
;
/* detect wrap-around */
if
(
i_data_in_buffer
<
(
-
i
_buffer_size
/
2
)
)
if
(
l_data_in_buffer
<
(
-
l
_buffer_size
/
2
)
)
{
intf_WarnMsg
(
3
,
"aout: DirectSoundThread wrap around: %
i"
,
i
_data_in_buffer
);
i_data_in_buffer
+=
i
_buffer_size
;
intf_WarnMsg
(
3
,
"aout: DirectSoundThread wrap around: %
li"
,
l
_data_in_buffer
);
l_data_in_buffer
+=
l
_buffer_size
;
}
/* detect underflow */
if
(
i
_data_in_buffer
<=
0
)
if
(
l
_data_in_buffer
<=
0
)
{
intf_WarnMsg
(
3
,
"aout: DirectSoundThread underflow: %li"
,
i
_data_in_buffer
);
intf_WarnMsg
(
3
,
"aout: DirectSoundThread underflow: %li"
,
l
_data_in_buffer
);
p_aout
->
p_sys
->
b_buffer_underflown
=
1
;
p_aout
->
p_sys
->
i
_write_position
=
(
i_play_position
+
i_buffer_size
/
2
)
%
i
_buffer_size
;
i_data_in_buffer
=
i
_buffer_size
/
2
;
p_aout
->
p_sys
->
i_data_played_from_beginning
-=
(
i
_buffer_size
/
2
);
p_aout
->
p_sys
->
l
_write_position
=
(
l_play_position
+
l_buffer_size
/
2
)
%
l
_buffer_size
;
l_data_in_buffer
=
l
_buffer_size
/
2
;
p_aout
->
p_sys
->
l_data_played_from_beginning
-=
(
l
_buffer_size
/
2
);
}
...
...
@@ -704,23 +704,23 @@ static void DirectSoundThread( aout_thread_t *p_aout )
/* Before copying anything, we have to lock the buffer */
dsresult
=
IDirectSoundBuffer_Lock
(
p_aout
->
p_sys
->
p_dsbuffer
,
p_aout
->
p_sys
->
i
_write_position
,
/* Offset of lock start */
i_buffer_size
-
i
_data_in_buffer
,
/* Number of bytes */
p_aout
->
p_sys
->
l
_write_position
,
/* Offset of lock start */
l_buffer_size
-
l
_data_in_buffer
,
/* Number of bytes */
&
p_write_position
,
/* Address of lock start */
&
i
_bytes1
,
/* Count of bytes locked before wrap around */
&
l
_bytes1
,
/* Count of bytes locked before wrap around */
&
p_start_buffer
,
/* Buffer adress (if wrap around) */
&
i
_bytes2
,
/* Count of bytes after wrap around */
&
l
_bytes2
,
/* Count of bytes after wrap around */
0
);
/* Flags */
if
(
dsresult
==
DSERR_BUFFERLOST
)
{
IDirectSoundBuffer_Restore
(
p_aout
->
p_sys
->
p_dsbuffer
);
dsresult
=
IDirectSoundBuffer_Lock
(
p_aout
->
p_sys
->
p_dsbuffer
,
p_aout
->
p_sys
->
i
_write_position
,
i_buffer_size
-
i
_data_in_buffer
,
p_aout
->
p_sys
->
l
_write_position
,
l_buffer_size
-
l
_data_in_buffer
,
&
p_write_position
,
&
i
_bytes1
,
&
l
_bytes1
,
&
p_start_buffer
,
&
i
_bytes2
,
&
l
_bytes2
,
0
);
}
if
(
dsresult
!=
DS_OK
)
...
...
@@ -731,15 +731,15 @@ static void DirectSoundThread( aout_thread_t *p_aout )
}
/* Now do the actual memcpy (two because the buffer is circular) */
memset
(
p_write_position
,
0
,
i
_bytes1
);
memset
(
p_write_position
,
0
,
l
_bytes1
);
if
(
p_start_buffer
!=
NULL
)
{
memset
(
p_start_buffer
,
0
,
i
_bytes2
);
memset
(
p_start_buffer
,
0
,
l
_bytes2
);
}
/* Now the data has been copied, unlock the buffer */
IDirectSoundBuffer_Unlock
(
p_aout
->
p_sys
->
p_dsbuffer
,
p_write_position
,
i_bytes1
,
p_start_buffer
,
i
_bytes2
);
p_write_position
,
l_bytes1
,
p_start_buffer
,
l
_bytes2
);
vlc_mutex_unlock
(
&
p_aout
->
p_sys
->
buffer_lock
);
...
...
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