summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2012-04-28 14:54:04 +0200
committerNicolas George <nicolas.george@normalesup.org>2012-05-04 23:26:40 +0200
commita96cd73ff25795ab4162252d2df87a8b46c782da (patch)
tree3a995ec360bfdb60558b6a1c337b41e9702c3268 /libavfilter
parentd8407bba0e48d50fc9d7c9338324a886f74b7d41 (diff)
src_buffer: implement audio buffer copy.
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/src_buffer.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/libavfilter/src_buffer.c b/libavfilter/src_buffer.c
index e67564da05..9a4d249507 100644
--- a/libavfilter/src_buffer.c
+++ b/libavfilter/src_buffer.c
@@ -220,6 +220,7 @@ static AVFilterBufferRef *copy_buffer_ref(AVFilterContext *ctx,
{
AVFilterLink *outlink = ctx->outputs[0];
AVFilterBufferRef *buf;
+ int channels, data_size, i;
switch (outlink->type) {
@@ -231,6 +232,17 @@ static AVFilterBufferRef *copy_buffer_ref(AVFilterContext *ctx,
ref->format, ref->video->w, ref->video->h);
break;
+ case AVMEDIA_TYPE_AUDIO:
+ buf = avfilter_get_audio_buffer(outlink, AV_PERM_WRITE,
+ ref->audio->nb_samples);
+ channels = av_get_channel_layout_nb_channels(ref->audio->channel_layout);
+ data_size = av_samples_get_buffer_size(NULL, channels,
+ ref->audio->nb_samples,
+ ref->format, 1);
+ for (i = 0; i < FF_ARRAY_ELEMS(ref->buf->data) && ref->buf->data[i]; i++)
+ memcpy(buf->buf->data[i], ref->buf->data[i], data_size);
+ break;
+
default:
return NULL;
}