[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17265] trunk/blender/extern/ffmpeg: Video Texture: add libadevice to extern\ffmpeg for Linux build.

Benoit Bolsee benoit.bolsee at online.be
Sat Nov 1 14:31:32 CET 2008


Revision: 17265
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17265
Author:   ben2610
Date:     2008-11-01 14:31:32 +0100 (Sat, 01 Nov 2008)

Log Message:
-----------
Video Texture: add libadevice to extern\ffmpeg for Linux build. I took the files from a ffmpeg revision that matches the rest of ffmpeg file (revision 12121 2008-02-15). It might be useful to update the whole ffmpeg directory.

Revision Links:
--------------
    http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12121

Modified Paths:
--------------
    trunk/blender/extern/ffmpeg/SConscript

Added Paths:
-----------
    trunk/blender/extern/ffmpeg/libavdevice/
    trunk/blender/extern/ffmpeg/libavdevice/Makefile
    trunk/blender/extern/ffmpeg/libavdevice/alldevices.c
    trunk/blender/extern/ffmpeg/libavdevice/audio.c
    trunk/blender/extern/ffmpeg/libavdevice/avdevice.h
    trunk/blender/extern/ffmpeg/libavdevice/beosaudio.cpp
    trunk/blender/extern/ffmpeg/libavdevice/bktr.c
    trunk/blender/extern/ffmpeg/libavdevice/dv1394.c
    trunk/blender/extern/ffmpeg/libavdevice/dv1394.h
    trunk/blender/extern/ffmpeg/libavdevice/libdc1394.c
    trunk/blender/extern/ffmpeg/libavdevice/v4l.c
    trunk/blender/extern/ffmpeg/libavdevice/v4l2.c
    trunk/blender/extern/ffmpeg/libavdevice/x11grab.c

Modified: trunk/blender/extern/ffmpeg/SConscript
===================================================================
--- trunk/blender/extern/ffmpeg/SConscript	2008-11-01 12:48:46 UTC (rev 17264)
+++ trunk/blender/extern/ffmpeg/SConscript	2008-11-01 13:31:32 UTC (rev 17265)
@@ -3,7 +3,7 @@
 
 Import('env')
 
-all_libs = ['libavformat', 'libavcodec', 'libswscale', 'libavutil']
+all_libs = ['libavformat', 'libavcodec', 'libswscale', 'libavutil', 'libavdevice']
 root = "extern/ffmpeg"
 
 if env['OURPLATFORM'] == 'win32-mingw':

Added: trunk/blender/extern/ffmpeg/libavdevice/Makefile
===================================================================
--- trunk/blender/extern/ffmpeg/libavdevice/Makefile	                        (rev 0)
+++ trunk/blender/extern/ffmpeg/libavdevice/Makefile	2008-11-01 13:31:32 UTC (rev 17265)
@@ -0,0 +1,32 @@
+include ../config.mak
+
+NAME=avdevice
+LIBVERSION=$(LAVDVERSION)
+LIBMAJOR=$(LAVDMAJOR)
+
+EXTRALIBS := -L$(BUILD_ROOT)/libavformat -lavformat$(BUILDSUF) \
+             -L$(BUILD_ROOT)/libavcodec  -lavcodec$(BUILDSUF) \
+             -L$(BUILD_ROOT)/libavutil   -lavutil$(BUILDSUF) $(EXTRALIBS)
+
+CFLAGS += -I$(SRC_PATH)/libavcodec -I$(SRC_PATH)/libavformat
+
+OBJS = alldevices.o
+
+HEADERS = avdevice.h
+
+# input/output devices
+OBJS-$(CONFIG_BKTR_DEMUXER)              += bktr.o
+OBJS-$(CONFIG_DV1394_DEMUXER)            += dv1394.o
+OBJS-$(CONFIG_OSS_DEMUXER)               += audio.o
+OBJS-$(CONFIG_OSS_MUXER)                 += audio.o
+OBJS-$(CONFIG_V4L2_DEMUXER)              += v4l2.o
+OBJS-$(CONFIG_V4L_DEMUXER)               += v4l.o
+OBJS-$(CONFIG_X11_GRAB_DEVICE_DEMUXER)   += x11grab.o
+
+# external libraries
+OBJS-$(CONFIG_LIBDC1394_DEMUXER)         += libdc1394.o
+
+CPPOBJS-$(CONFIG_AUDIO_BEOS_DEMUXER)     += beosaudio.o
+CPPOBJS-$(CONFIG_AUDIO_BEOS_MUXER)       += beosaudio.o
+
+include ../common.mak

Added: trunk/blender/extern/ffmpeg/libavdevice/alldevices.c
===================================================================
--- trunk/blender/extern/ffmpeg/libavdevice/alldevices.c	                        (rev 0)
+++ trunk/blender/extern/ffmpeg/libavdevice/alldevices.c	2008-11-01 13:31:32 UTC (rev 17265)
@@ -0,0 +1,50 @@
+/*
+ * Register all the grabbing devices.
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#include "avformat.h"
+#include "avdevice.h"
+
+#define REGISTER_MUXER(X,x) { \
+          extern AVOutputFormat x##_muxer; \
+          if(ENABLE_##X##_MUXER)   av_register_output_format(&x##_muxer); }
+#define REGISTER_DEMUXER(X,x) { \
+          extern AVInputFormat x##_demuxer; \
+          if(ENABLE_##X##_DEMUXER) av_register_input_format(&x##_demuxer); }
+#define REGISTER_MUXDEMUX(X,x)  REGISTER_MUXER(X,x); REGISTER_DEMUXER(X,x)
+
+void avdevice_register_all(void)
+{
+    static int initialized;
+
+    if (initialized)
+        return;
+    initialized = 1;
+
+    /* devices */
+    REGISTER_MUXDEMUX (AUDIO_BEOS, audio_beos);
+    REGISTER_DEMUXER  (BKTR, bktr);
+    REGISTER_DEMUXER  (DV1394, dv1394);
+    REGISTER_MUXDEMUX (OSS, oss);
+    REGISTER_DEMUXER  (V4L2, v4l2);
+    REGISTER_DEMUXER  (V4L, v4l);
+    REGISTER_DEMUXER  (X11_GRAB_DEVICE, x11_grab_device);
+
+    /* external libraries */
+    REGISTER_DEMUXER  (LIBDC1394, libdc1394);
+}

Added: trunk/blender/extern/ffmpeg/libavdevice/audio.c
===================================================================
--- trunk/blender/extern/ffmpeg/libavdevice/audio.c	                        (rev 0)
+++ trunk/blender/extern/ffmpeg/libavdevice/audio.c	2008-11-01 13:31:32 UTC (rev 17265)
@@ -0,0 +1,344 @@
+/*
+ * Linux audio play and grab interface
+ * Copyright (c) 2000, 2001 Fabrice Bellard.
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#include "avformat.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#ifdef HAVE_SOUNDCARD_H
+#include <soundcard.h>
+#else
+#include <sys/soundcard.h>
+#endif
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <sys/time.h>
+
+#define AUDIO_BLOCK_SIZE 4096
+
+typedef struct {
+    int fd;
+    int sample_rate;
+    int channels;
+    int frame_size; /* in bytes ! */
+    int codec_id;
+    int flip_left : 1;
+    uint8_t buffer[AUDIO_BLOCK_SIZE];
+    int buffer_ptr;
+} AudioData;
+
+static int audio_open(AudioData *s, int is_output, const char *audio_device)
+{
+    int audio_fd;
+    int tmp, err;
+    char *flip = getenv("AUDIO_FLIP_LEFT");
+
+    if (is_output)
+        audio_fd = open(audio_device, O_WRONLY);
+    else
+        audio_fd = open(audio_device, O_RDONLY);
+    if (audio_fd < 0) {
+        av_log(NULL, AV_LOG_ERROR, "%s: %s\n", audio_device, strerror(errno));
+        return AVERROR(EIO);
+    }
+
+    if (flip && *flip == '1') {
+        s->flip_left = 1;
+    }
+
+    /* non blocking mode */
+    if (!is_output)
+        fcntl(audio_fd, F_SETFL, O_NONBLOCK);
+
+    s->frame_size = AUDIO_BLOCK_SIZE;
+#if 0
+    tmp = (NB_FRAGMENTS << 16) | FRAGMENT_BITS;
+    err = ioctl(audio_fd, SNDCTL_DSP_SETFRAGMENT, &tmp);
+    if (err < 0) {
+        perror("SNDCTL_DSP_SETFRAGMENT");
+    }
+#endif
+
+    /* select format : favour native format */
+    err = ioctl(audio_fd, SNDCTL_DSP_GETFMTS, &tmp);
+
+#ifdef WORDS_BIGENDIAN
+    if (tmp & AFMT_S16_BE) {
+        tmp = AFMT_S16_BE;
+    } else if (tmp & AFMT_S16_LE) {
+        tmp = AFMT_S16_LE;
+    } else {
+        tmp = 0;
+    }
+#else
+    if (tmp & AFMT_S16_LE) {
+        tmp = AFMT_S16_LE;
+    } else if (tmp & AFMT_S16_BE) {
+        tmp = AFMT_S16_BE;
+    } else {
+        tmp = 0;
+    }
+#endif
+
+    switch(tmp) {
+    case AFMT_S16_LE:
+        s->codec_id = CODEC_ID_PCM_S16LE;
+        break;
+    case AFMT_S16_BE:
+        s->codec_id = CODEC_ID_PCM_S16BE;
+        break;
+    default:
+        av_log(NULL, AV_LOG_ERROR, "Soundcard does not support 16 bit sample format\n");
+        close(audio_fd);
+        return AVERROR(EIO);
+    }
+    err=ioctl(audio_fd, SNDCTL_DSP_SETFMT, &tmp);
+    if (err < 0) {
+        av_log(NULL, AV_LOG_ERROR, "SNDCTL_DSP_SETFMT: %s\n", strerror(errno));
+        goto fail;
+    }
+
+    tmp = (s->channels == 2);
+    err = ioctl(audio_fd, SNDCTL_DSP_STEREO, &tmp);
+    if (err < 0) {
+        av_log(NULL, AV_LOG_ERROR, "SNDCTL_DSP_STEREO: %s\n", strerror(errno));
+        goto fail;
+    }
+    if (tmp)
+        s->channels = 2;
+
+    tmp = s->sample_rate;
+    err = ioctl(audio_fd, SNDCTL_DSP_SPEED, &tmp);
+    if (err < 0) {
+        av_log(NULL, AV_LOG_ERROR, "SNDCTL_DSP_SPEED: %s\n", strerror(errno));
+        goto fail;
+    }
+    s->sample_rate = tmp; /* store real sample rate */
+    s->fd = audio_fd;
+
+    return 0;
+ fail:
+    close(audio_fd);
+    return AVERROR(EIO);
+}
+
+static int audio_close(AudioData *s)
+{
+    close(s->fd);
+    return 0;
+}
+
+/* sound output support */
+static int audio_write_header(AVFormatContext *s1)
+{
+    AudioData *s = s1->priv_data;
+    AVStream *st;
+    int ret;
+
+    st = s1->streams[0];
+    s->sample_rate = st->codec->sample_rate;
+    s->channels = st->codec->channels;
+    ret = audio_open(s, 1, s1->filename);
+    if (ret < 0) {
+        return AVERROR(EIO);
+    } else {
+        return 0;
+    }
+}
+
+static int audio_write_packet(AVFormatContext *s1, AVPacket *pkt)
+{
+    AudioData *s = s1->priv_data;
+    int len, ret;
+    int size= pkt->size;
+    uint8_t *buf= pkt->data;
+
+    while (size > 0) {
+        len = AUDIO_BLOCK_SIZE - s->buffer_ptr;
+        if (len > size)
+            len = size;
+        memcpy(s->buffer + s->buffer_ptr, buf, len);
+        s->buffer_ptr += len;
+        if (s->buffer_ptr >= AUDIO_BLOCK_SIZE) {
+            for(;;) {
+                ret = write(s->fd, s->buffer, AUDIO_BLOCK_SIZE);
+                if (ret > 0)
+                    break;
+                if (ret < 0 && (errno != EAGAIN && errno != EINTR))
+                    return AVERROR(EIO);
+            }
+            s->buffer_ptr = 0;
+        }
+        buf += len;
+        size -= len;
+    }
+    return 0;
+}
+
+static int audio_write_trailer(AVFormatContext *s1)
+{
+    AudioData *s = s1->priv_data;
+
+    audio_close(s);
+    return 0;
+}
+
+/* grab support */
+
+static int audio_read_header(AVFormatContext *s1, AVFormatParameters *ap)
+{
+    AudioData *s = s1->priv_data;
+    AVStream *st;
+    int ret;
+
+    if (ap->sample_rate <= 0 || ap->channels <= 0)
+        return -1;
+
+    st = av_new_stream(s1, 0);
+    if (!st) {
+        return AVERROR(ENOMEM);
+    }
+    s->sample_rate = ap->sample_rate;
+    s->channels = ap->channels;
+
+    ret = audio_open(s, 0, s1->filename);
+    if (ret < 0) {
+        av_free(st);
+        return AVERROR(EIO);
+    }
+
+    /* take real parameters */
+    st->codec->codec_type = CODEC_TYPE_AUDIO;
+    st->codec->codec_id = s->codec_id;
+    st->codec->sample_rate = s->sample_rate;
+    st->codec->channels = s->channels;
+
+    av_set_pts_info(st, 64, 1, 1000000);  /* 64 bits pts in us */
+    return 0;
+}
+
+static int audio_read_packet(AVFormatContext *s1, AVPacket *pkt)
+{
+    AudioData *s = s1->priv_data;
+    int ret, bdelay;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list