[FFmpeg-cvslog] src_buffer: implement audio buffer copy.

Nicolas George git at videolan.org
Fri May 4 23:46:07 CEST 2012


ffmpeg | branch: master | Nicolas George <nicolas.george at normalesup.org> | Sat Apr 28 14:54:04 2012 +0200| [a96cd73ff25795ab4162252d2df87a8b46c782da] | committer: Nicolas George

src_buffer: implement audio buffer copy.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a96cd73ff25795ab4162252d2df87a8b46c782da
---

 libavfilter/src_buffer.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/libavfilter/src_buffer.c b/libavfilter/src_buffer.c
index e67564d..9a4d249 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;
     }



More information about the ffmpeg-cvslog mailing list