Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
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-2-2
Commits
74d6bb34
Commit
74d6bb34
authored
Aug 02, 2011
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
aout: mix and convert before slicing the audio packets
parent
a7def3d5
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
39 additions
and
27 deletions
+39
-27
src/audio_output/aout_internal.h
src/audio_output/aout_internal.h
+2
-4
src/audio_output/dec.c
src/audio_output/dec.c
+8
-3
src/audio_output/input.c
src/audio_output/input.c
+12
-12
src/audio_output/output.c
src/audio_output/output.c
+17
-8
No files found.
src/audio_output/aout_internal.h
View file @
74d6bb34
...
@@ -102,8 +102,8 @@ struct aout_input_t
...
@@ -102,8 +102,8 @@ struct aout_input_t
/* From input.c : */
/* From input.c : */
int
aout_InputNew
(
audio_output_t
*
p_aout
,
aout_input_t
*
p_input
,
const
aout_request_vout_t
*
);
int
aout_InputNew
(
audio_output_t
*
p_aout
,
aout_input_t
*
p_input
,
const
aout_request_vout_t
*
);
int
aout_InputDelete
(
audio_output_t
*
p_aout
,
aout_input_t
*
p_input
);
int
aout_InputDelete
(
audio_output_t
*
p_aout
,
aout_input_t
*
p_input
);
void
aout_InputPlay
(
audio_output_t
*
p_aout
,
aout_input_t
*
p_input
,
block_t
*
aout_InputPlay
(
audio_output_t
*
p_aout
,
aout_input_t
*
p_input
,
aout_buffer_t
*
p_buffer
,
int
i_input_rate
);
block_t
*
p_buffer
,
int
i_input_rate
);
void
aout_InputCheckAndRestart
(
audio_output_t
*
p_aout
,
aout_input_t
*
p_input
);
void
aout_InputCheckAndRestart
(
audio_output_t
*
p_aout
,
aout_input_t
*
p_input
);
/* From filters.c : */
/* From filters.c : */
...
@@ -118,8 +118,6 @@ audio_mixer_t *aout_MixerNew(vlc_object_t *, const audio_sample_format_t * );
...
@@ -118,8 +118,6 @@ audio_mixer_t *aout_MixerNew(vlc_object_t *, const audio_sample_format_t * );
void
aout_MixerDelete
(
audio_mixer_t
*
);
void
aout_MixerDelete
(
audio_mixer_t
*
);
void
aout_MixerRun
(
audio_mixer_t
*
,
block_t
*
,
float
);
void
aout_MixerRun
(
audio_mixer_t
*
,
block_t
*
,
float
);
block_t
*
aout_OutputSlice
(
audio_output_t
*
,
aout_fifo_t
*
);
/* From output.c : */
/* From output.c : */
int
aout_OutputNew
(
audio_output_t
*
p_aout
,
int
aout_OutputNew
(
audio_output_t
*
p_aout
,
const
audio_sample_format_t
*
p_format
);
const
audio_sample_format_t
*
p_format
);
...
...
src/audio_output/dec.c
View file @
74d6bb34
...
@@ -195,15 +195,20 @@ int aout_DecPlay( audio_output_t * p_aout, aout_input_t * p_input,
...
@@ -195,15 +195,20 @@ int aout_DecPlay( audio_output_t * p_aout, aout_input_t * p_input,
return
-
1
;
return
-
1
;
}
}
/* Input */
aout_InputCheckAndRestart
(
p_aout
,
p_input
);
aout_InputCheckAndRestart
(
p_aout
,
p_input
);
aout_InputPlay
(
p_aout
,
p_input
,
p_buffer
,
i_input_rate
);
p_buffer
=
aout_InputPlay
(
p_aout
,
p_input
,
p_buffer
,
i_input_rate
);
const
float
amp
=
p_aout
->
mixer_multiplier
*
p_input
->
multiplier
;
if
(
p_buffer
!=
NULL
)
while
(
(
p_buffer
=
aout_OutputSlice
(
p_aout
,
&
p_input
->
fifo
)
)
!=
NULL
)
{
{
/* Mixer */
float
amp
=
p_aout
->
mixer_multiplier
*
p_input
->
multiplier
;
aout_MixerRun
(
p_aout
->
mixer
,
p_buffer
,
amp
);
aout_MixerRun
(
p_aout
->
mixer
,
p_buffer
,
amp
);
/* Output */
aout_OutputPlay
(
p_aout
,
p_buffer
);
aout_OutputPlay
(
p_aout
,
p_buffer
);
}
}
aout_unlock
(
p_aout
);
aout_unlock
(
p_aout
);
return
0
;
return
0
;
}
}
...
...
src/audio_output/input.c
View file @
74d6bb34
...
@@ -485,8 +485,8 @@ void aout_InputCheckAndRestart( audio_output_t * p_aout, aout_input_t * p_input
...
@@ -485,8 +485,8 @@ void aout_InputCheckAndRestart( audio_output_t * p_aout, aout_input_t * p_input
*****************************************************************************/
*****************************************************************************/
/* XXX Do not activate it !! */
/* XXX Do not activate it !! */
//#define AOUT_PROCESS_BEFORE_CHEKS
//#define AOUT_PROCESS_BEFORE_CHEKS
void
aout_InputPlay
(
audio_output_t
*
p_aout
,
aout_input_t
*
p_input
,
block_t
*
aout_InputPlay
(
audio_output_t
*
p_aout
,
aout_input_t
*
p_input
,
aout_buffer_t
*
p_buffer
,
int
i_input_rate
)
block_t
*
p_buffer
,
int
i_input_rate
)
{
{
mtime_t
start_date
;
mtime_t
start_date
;
AOUT_ASSERT_LOCKED
;
AOUT_ASSERT_LOCKED
;
...
@@ -494,7 +494,7 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
...
@@ -494,7 +494,7 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
if
(
i_input_rate
!=
INPUT_RATE_DEFAULT
&&
p_input
->
p_playback_rate_filter
==
NULL
)
if
(
i_input_rate
!=
INPUT_RATE_DEFAULT
&&
p_input
->
p_playback_rate_filter
==
NULL
)
{
{
inputDrop
(
p_input
,
p_buffer
);
inputDrop
(
p_input
,
p_buffer
);
return
;
return
NULL
;
}
}
#ifdef AOUT_PROCESS_BEFORE_CHEKS
#ifdef AOUT_PROCESS_BEFORE_CHEKS
...
@@ -502,7 +502,7 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
...
@@ -502,7 +502,7 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
aout_FiltersPlay
(
p_aout
,
p_input
->
pp_filters
,
p_input
->
i_nb_filters
,
aout_FiltersPlay
(
p_aout
,
p_input
->
pp_filters
,
p_input
->
i_nb_filters
,
&
p_buffer
);
&
p_buffer
);
if
(
!
p_buffer
)
if
(
!
p_buffer
)
return
;
return
NULL
;
/* Actually run the resampler now. */
/* Actually run the resampler now. */
if
(
p_input
->
i_nb_resamplers
>
0
)
if
(
p_input
->
i_nb_resamplers
>
0
)
...
@@ -514,11 +514,11 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
...
@@ -514,11 +514,11 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
}
}
if
(
!
p_buffer
)
if
(
!
p_buffer
)
return
;
return
NULL
;
if
(
p_buffer
->
i_nb_samples
<=
0
)
if
(
p_buffer
->
i_nb_samples
<=
0
)
{
{
block_Release
(
p_buffer
);
block_Release
(
p_buffer
);
return
;
return
NULL
;
}
}
#endif
#endif
...
@@ -564,7 +564,7 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
...
@@ -564,7 +564,7 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
now
-
p_buffer
->
i_pts
);
now
-
p_buffer
->
i_pts
);
inputDrop
(
p_input
,
p_buffer
);
inputDrop
(
p_input
,
p_buffer
);
inputResamplingStop
(
p_input
);
inputResamplingStop
(
p_input
);
return
;
return
NULL
;
}
}
/* If the audio drift is too big then it's not worth trying to resample
/* If the audio drift is too big then it's not worth trying to resample
...
@@ -593,14 +593,14 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
...
@@ -593,14 +593,14 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
msg_Warn
(
p_aout
,
"buffer way too late (%"
PRId64
"), dropping buffer"
,
msg_Warn
(
p_aout
,
"buffer way too late (%"
PRId64
"), dropping buffer"
,
drift
);
drift
);
inputDrop
(
p_input
,
p_buffer
);
inputDrop
(
p_input
,
p_buffer
);
return
;
return
NULL
;
}
}
#ifndef AOUT_PROCESS_BEFORE_CHEKS
#ifndef AOUT_PROCESS_BEFORE_CHEKS
/* Run pre-filters. */
/* Run pre-filters. */
aout_FiltersPlay
(
p_input
->
pp_filters
,
p_input
->
i_nb_filters
,
&
p_buffer
);
aout_FiltersPlay
(
p_input
->
pp_filters
,
p_input
->
i_nb_filters
,
&
p_buffer
);
if
(
!
p_buffer
)
if
(
!
p_buffer
)
return
;
return
NULL
;
#endif
#endif
/* Run the resampler if needed.
/* Run the resampler if needed.
...
@@ -682,17 +682,17 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
...
@@ -682,17 +682,17 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
}
}
if
(
!
p_buffer
)
if
(
!
p_buffer
)
return
;
return
NULL
;
if
(
p_buffer
->
i_nb_samples
<=
0
)
if
(
p_buffer
->
i_nb_samples
<=
0
)
{
{
block_Release
(
p_buffer
);
block_Release
(
p_buffer
);
return
;
return
NULL
;
}
}
#endif
#endif
/* Adding the start date will be managed by aout_FifoPush(). */
/* Adding the start date will be managed by aout_FifoPush(). */
p_buffer
->
i_pts
=
start_date
;
p_buffer
->
i_pts
=
start_date
;
aout_FifoPush
(
&
p_input
->
fifo
,
p_buffer
)
;
return
p_buffer
;
}
}
/*****************************************************************************
/*****************************************************************************
...
...
src/audio_output/output.c
View file @
74d6bb34
...
@@ -218,6 +218,8 @@ void aout_OutputDelete( audio_output_t * p_aout )
...
@@ -218,6 +218,8 @@ void aout_OutputDelete( audio_output_t * p_aout )
aout_FifoDestroy
(
&
p_aout
->
fifo
);
aout_FifoDestroy
(
&
p_aout
->
fifo
);
}
}
static
block_t
*
aout_OutputSlice
(
audio_output_t
*
,
aout_fifo_t
*
);
/*****************************************************************************
/*****************************************************************************
* aout_OutputPlay : play a buffer
* aout_OutputPlay : play a buffer
*****************************************************************************
*****************************************************************************
...
@@ -236,8 +238,15 @@ void aout_OutputPlay( audio_output_t * p_aout, aout_buffer_t * p_buffer )
...
@@ -236,8 +238,15 @@ void aout_OutputPlay( audio_output_t * p_aout, aout_buffer_t * p_buffer )
return
;
return
;
}
}
aout_FifoPush
(
&
p_aout
->
fifo
,
p_buffer
);
aout_fifo_t
*
fifo
=
&
p_aout
->
p_input
->
fifo
;
p_aout
->
pf_play
(
p_aout
);
/* XXX: cleanup */
aout_FifoPush
(
fifo
,
p_buffer
);
while
(
(
p_buffer
=
aout_OutputSlice
(
p_aout
,
fifo
)
)
!=
NULL
)
{
aout_FifoPush
(
&
p_aout
->
fifo
,
p_buffer
);
p_aout
->
pf_play
(
p_aout
);
}
}
}
/**
/**
...
@@ -375,7 +384,7 @@ void aout_VolumeHardSet (audio_output_t *aout, float volume, bool mute)
...
@@ -375,7 +384,7 @@ void aout_VolumeHardSet (audio_output_t *aout, float volume, bool mute)
* @note (FIXME) This is left here for historical reasons. It belongs in the
* @note (FIXME) This is left here for historical reasons. It belongs in the
* output code. Besides, this operation should be avoided if possible.
* output code. Besides, this operation should be avoided if possible.
*/
*/
block_t
*
aout_OutputSlice
(
audio_output_t
*
p_aout
,
aout_fifo_t
*
p_fifo
)
static
block_t
*
aout_OutputSlice
(
audio_output_t
*
p_aout
,
aout_fifo_t
*
p_fifo
)
{
{
const
unsigned
samples
=
p_aout
->
i_nb_samples
;
const
unsigned
samples
=
p_aout
->
i_nb_samples
;
/* FIXME: Remove this silly constraint. Just pass buffers as they come to
/* FIXME: Remove this silly constraint. Just pass buffers as they come to
...
@@ -443,14 +452,14 @@ block_t *aout_OutputSlice( audio_output_t * p_aout, aout_fifo_t *p_fifo )
...
@@ -443,14 +452,14 @@ block_t *aout_OutputSlice( audio_output_t * p_aout, aout_fifo_t *p_fifo )
prev_date
=
p_buffer
->
i_pts
+
p_buffer
->
i_length
;
prev_date
=
p_buffer
->
i_pts
+
p_buffer
->
i_length
;
}
}
if
(
!
AOUT_FMT_NON_LINEAR
(
&
p_aout
->
mixer_
format
)
)
if
(
!
AOUT_FMT_NON_LINEAR
(
&
p_aout
->
format
)
)
{
{
p_buffer
=
p_fifo
->
p_first
;
p_buffer
=
p_fifo
->
p_first
;
/* Additionally check that p_first_byte_to_mix is well located. */
/* Additionally check that p_first_byte_to_mix is well located. */
const
unsigned
framesize
=
p_aout
->
mixer_
format
.
i_bytes_per_frame
;
const
unsigned
framesize
=
p_aout
->
format
.
i_bytes_per_frame
;
ssize_t
delta
=
(
start_date
-
p_buffer
->
i_pts
)
ssize_t
delta
=
(
start_date
-
p_buffer
->
i_pts
)
*
p_aout
->
mixer_
format
.
i_rate
/
CLOCK_FREQ
;
*
p_aout
->
format
.
i_rate
/
CLOCK_FREQ
;
if
(
delta
!=
0
)
if
(
delta
!=
0
)
msg_Warn
(
p_aout
,
"input start is not output end (%zd)"
,
delta
);
msg_Warn
(
p_aout
,
"input start is not output end (%zd)"
,
delta
);
if
(
delta
<
0
)
if
(
delta
<
0
)
...
@@ -461,7 +470,7 @@ block_t *aout_OutputSlice( audio_output_t * p_aout, aout_fifo_t *p_fifo )
...
@@ -461,7 +470,7 @@ block_t *aout_OutputSlice( audio_output_t * p_aout, aout_fifo_t *p_fifo )
}
}
if
(
delta
>
0
)
if
(
delta
>
0
)
{
{
mtime_t
t
=
delta
*
CLOCK_FREQ
/
p_aout
->
mixer_
format
.
i_rate
;
mtime_t
t
=
delta
*
CLOCK_FREQ
/
p_aout
->
format
.
i_rate
;
p_buffer
->
i_nb_samples
-=
delta
;
p_buffer
->
i_nb_samples
-=
delta
;
p_buffer
->
i_pts
+=
t
;
p_buffer
->
i_pts
+=
t
;
p_buffer
->
i_length
-=
t
;
p_buffer
->
i_length
-=
t
;
...
@@ -498,7 +507,7 @@ block_t *aout_OutputSlice( audio_output_t * p_aout, aout_fifo_t *p_fifo )
...
@@ -498,7 +507,7 @@ block_t *aout_OutputSlice( audio_output_t * p_aout, aout_fifo_t *p_fifo )
needed
/=
framesize
;
needed
/=
framesize
;
p_fifo
->
p_first
->
i_nb_samples
-=
needed
;
p_fifo
->
p_first
->
i_nb_samples
-=
needed
;
mtime_t
t
=
needed
*
CLOCK_FREQ
/
p_aout
->
mixer_
format
.
i_rate
;
mtime_t
t
=
needed
*
CLOCK_FREQ
/
p_aout
->
format
.
i_rate
;
p_fifo
->
p_first
->
i_pts
+=
t
;
p_fifo
->
p_first
->
i_pts
+=
t
;
p_fifo
->
p_first
->
i_length
-=
t
;
p_fifo
->
p_first
->
i_length
-=
t
;
break
;
break
;
...
...
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