[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