summaryrefslogtreecommitdiffstats
path: root/audio/filter/af_pan.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-11-10 23:11:40 +0100
committerwm4 <wm4@nowhere>2013-11-12 23:16:31 +0100
commitd2e7467eb203d3a34bc1111564c7058b5e9c6b12 (patch)
tree9285523821c8710a0609f47e3ee923a20d038826 /audio/filter/af_pan.c
parentb2d4b5ee43206f8c4491b3af1c24fedd35dbdc31 (diff)
downloadmpv-d2e7467eb203d3a34bc1111564c7058b5e9c6b12.tar.bz2
mpv-d2e7467eb203d3a34bc1111564c7058b5e9c6b12.tar.xz
audio/filter: prepare filter chain for non-interleaved audio
Based on earlier work by Stefano Pigozzi. There are 2 changes: 1. Instead of mp_audio.audio, mp_audio.planes[0] must be used. 2. mp_audio.len used to contain the size of the audio in bytes. Now mp_audio.samples must be used. (Where 1 sample is the smallest unit of audio that covers all channels.) Also, some filters need changes to reject non-interleaved formats properly. Nothing uses the non-interleaved features yet, but this is needed so that things don't just break when doing so.
Diffstat (limited to 'audio/filter/af_pan.c')
-rw-r--r--audio/filter/af_pan.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/audio/filter/af_pan.c b/audio/filter/af_pan.c
index b3e31dab98..3c15b8f629 100644
--- a/audio/filter/af_pan.c
+++ b/audio/filter/af_pan.c
@@ -147,7 +147,7 @@ static int control(struct af_instance* af, int cmd, void* arg)
static void uninit(struct af_instance* af)
{
if(af->data)
- free(af->data->audio);
+ free(af->data->planes[0]);
free(af->data);
free(af->setup);
}
@@ -158,9 +158,9 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data)
struct mp_audio* c = data; // Current working data
struct mp_audio* l = af->data; // Local data
af_pan_t* s = af->setup; // Setup for this instance
- float* in = c->audio; // Input audio data
+ float* in = c->planes[0]; // Input audio data
float* out = NULL; // Output audio data
- float* end = in+c->len/4; // End of loop
+ float* end = in+c->samples*c->nch; // End of loop
int nchi = c->nch; // Number of input channels
int ncho = l->nch; // Number of output channels
register int j,k;
@@ -168,7 +168,7 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data)
if(AF_OK != RESIZE_LOCAL_BUFFER(af,data))
return NULL;
- out = l->audio;
+ out = l->planes[0];
// Execute panning
// FIXME: Too slow
while(in < end){
@@ -184,8 +184,7 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data)
}
// Set output data
- c->audio = l->audio;
- c->len = c->len / c->nch * l->nch;
+ c->planes[0] = l->planes[0];
set_channels(c, l->nch);
return c;