aboutsummaryrefslogtreecommitdiffstats
path: root/multimedia/ffmpeg/files
diff options
context:
space:
mode:
authorlioux <lioux@FreeBSD.org>2003-09-08 07:52:59 +0800
committerlioux <lioux@FreeBSD.org>2003-09-08 07:52:59 +0800
commit8aa6b40fafcc9840efab3279c2153ebc94a390c4 (patch)
tree6f03bd13e6117209dc57a87c33db101c56b7cb1e /multimedia/ffmpeg/files
parent6b627131a774aad83a1f772625068921521298e6 (diff)
downloadfreebsd-ports-gnome-8aa6b40fafcc9840efab3279c2153ebc94a390c4.tar.gz
freebsd-ports-gnome-8aa6b40fafcc9840efab3279c2153ebc94a390c4.tar.zst
freebsd-ports-gnome-8aa6b40fafcc9840efab3279c2153ebc94a390c4.zip
Update to 0.4.7
Submitted by: Steve O'Hara-Smith <steve@sohara.org>
Diffstat (limited to 'multimedia/ffmpeg/files')
-rw-r--r--multimedia/ffmpeg/files/extra-bktr-patch-ffmpeg.c37
-rw-r--r--multimedia/ffmpeg/files/extra-bktr-patch-libavformat::avformat.h11
-rw-r--r--multimedia/ffmpeg/files/grab_bsdbktr.c193
-rw-r--r--multimedia/ffmpeg/files/patch-libavformat::audio.c17
4 files changed, 131 insertions, 127 deletions
diff --git a/multimedia/ffmpeg/files/extra-bktr-patch-ffmpeg.c b/multimedia/ffmpeg/files/extra-bktr-patch-ffmpeg.c
deleted file mode 100644
index 0ba5924735c1..000000000000
--- a/multimedia/ffmpeg/files/extra-bktr-patch-ffmpeg.c
+++ /dev/null
@@ -1,37 +0,0 @@
---- ffmpeg.c.orig Wed Jan 1 20:56:06 2003
-+++ ffmpeg.c Wed Jan 1 20:56:41 2003
-@@ -35,6 +35,7 @@
- #define INFINITY HUGE_VAL
- #endif
-
-+#define INT64_C(x) x##LL
- #define MAXINT64 INT64_C(0x7fffffffffffffff)
-
- typedef struct {
-@@ -158,7 +159,7 @@
- const char *audio_device = "none";
- #endif
- #ifndef CONFIG_VIDEO4LINUX
--const char *v4l_device = "none";
-+const char *video_device = "none";
- #endif
-
- typedef struct AVOutputStream {
-@@ -1842,7 +1843,7 @@
-
- void opt_video_device(const char *arg)
- {
-- v4l_device = strdup(arg);
-+ video_device = strdup(arg);
- }
-
- void opt_audio_device(const char *arg)
-@@ -2428,7 +2429,7 @@
- /* by now video grab has one stream */
- ic->streams[0]->r_frame_rate = ap->frame_rate;
- input_files[nb_input_files] = ic;
-- dump_format(ic, nb_input_files, v4l_device, 0);
-+ dump_format(ic, nb_input_files, video_device, 0);
- nb_input_files++;
- }
- if (has_audio) {
diff --git a/multimedia/ffmpeg/files/extra-bktr-patch-libavformat::avformat.h b/multimedia/ffmpeg/files/extra-bktr-patch-libavformat::avformat.h
deleted file mode 100644
index 7c3de0a20929..000000000000
--- a/multimedia/ffmpeg/files/extra-bktr-patch-libavformat::avformat.h
+++ /dev/null
@@ -1,11 +0,0 @@
---- libavformat/avformat.h.orig Wed Jan 1 21:03:56 2003
-+++ libavformat/avformat.h Wed Jan 1 21:04:02 2003
-@@ -329,7 +329,7 @@
- int video_grab_init(void);
- int audio_init(void);
-
--extern const char *v4l_device;
-+extern const char *video_device;
- extern const char *audio_device;
-
- #ifdef HAVE_AV_CONFIG_H
diff --git a/multimedia/ffmpeg/files/grab_bsdbktr.c b/multimedia/ffmpeg/files/grab_bsdbktr.c
index 2dc397a8d804..81d1850fdc5c 100644
--- a/multimedia/ffmpeg/files/grab_bsdbktr.c
+++ b/multimedia/ffmpeg/files/grab_bsdbktr.c
@@ -39,8 +39,8 @@ typedef struct {
int frame_format; /* see VIDEO_PALETTE_xxx */
int width, height;
int frame_rate;
- INT64 per_frame;
- INT64 last_frame_time;
+ int frame_rate_base;
+ int64_t per_frame;
} VideoData;
const char *video_device = "/dev/bktr0";
@@ -63,11 +63,10 @@ const char *video_device = "/dev/bktr0";
#define VIDEO_FORMAT NTSC
#endif
-#ifndef VIDEO_INPUT
-#define VIDEO_INPUT METEOR_INPUT_DEV0;
-#endif
+static int bktr_dev[] = { METEOR_DEV0, METEOR_DEV1, METEOR_DEV2,
+ METEOR_DEV3, METEOR_DEV_SVIDEO };
-static UINT8 *video_buf;
+static u_int8_t *video_buf;
static int nsignals = 0;
static void catchsignal(int signal)
{
@@ -75,41 +74,65 @@ static void catchsignal(int signal)
return;
}
-static int bktr_init(AVFormatContext *s1, AVFormatParameters *ap)
+static int bktr_init (const char *video_device, int width, int height,
+ int format, u_int8_t **video_buf, int *video_fd, int *tuner_fd,
+ int idev, double frequency)
{
- VideoData *s = s1->priv_data;
- int width, height, h_max;
- int video_fd;
- int format = VIDEO_FORMAT;
struct meteor_geomet geo;
+ int h_max;
+ long ioctl_frequency;
+ char *arg;
int c;
struct sigaction act,old;
+ if (idev < 0 || idev > 4)
+ {
+ arg = getenv ("BKTR_DEV");
+ if (arg)
+ idev = atoi (arg);
+ if (idev < 0 || idev > 4)
+ idev = 0;
+ }
+
+ if (format < 1 || format > 6)
+ {
+ arg = getenv ("BKTR_FORMAT");
+ if (arg)
+ format = atoi (arg);
+ if (format < 1 || format > 6)
+ format = VIDEO_FORMAT;
+ }
+
+ if (frequency <= 0)
+ {
+ arg = getenv ("BKTR_FREQUENCY");
+ if (arg)
+ frequency = atof (arg);
+ if (frequency <= 0)
+ frequency = 0.0;
+ }
+
memset(&act,0,sizeof(act));
sigemptyset(&act.sa_mask);
act.sa_handler = catchsignal;
sigaction(SIGUSR1,&act,&old);
- sigaction(SIGALRM,&act,&old);
-
- width = s->width;
- height = s->height;
- s->last_frame_time = 0;
- s->tuner_fd = open ("/dev/tuner0", O_RDONLY);
- if (s->tuner_fd < 0) {
+ *tuner_fd = open ("/dev/tuner0", O_RDONLY);
+ if (*tuner_fd < 0) {
perror("Warning: Tuner not opened continuing");
}
- video_fd = open(video_device, O_RDONLY);
- if (video_fd < 0) {
- perror(video_device);
- return -EIO;
+ *video_fd = open (video_device, O_RDONLY);
+ if (*video_fd < 0) {
+ perror (video_device);
+ return -1;
}
- s->fd=video_fd;
+
geo.rows = height;
geo.columns = width;
geo.frames = 1;
- geo.oformat = METEOR_GEO_YUV_422 | METEOR_GEO_YUV_12;
+// geo.oformat = METEOR_GEO_YUV_422 | METEOR_GEO_YUV_12;
+ geo.oformat = METEOR_GEO_YUV_PACKED;
switch (format) {
case PAL: h_max = PAL_HEIGHT; c = BT848_IFORM_F_PALBDGHI; break;
@@ -124,61 +147,89 @@ static int bktr_init(AVFormatContext *s1, AVFormatParameters *ap)
geo.oformat |= METEOR_GEO_EVEN_ONLY;
}
- if (ioctl(video_fd, METEORSETGEO, &geo) < 0) {
+ if (ioctl(*video_fd, METEORSETGEO, &geo) < 0) {
perror ("METEORSETGEO");
- return -EIO;
+ return -1;
}
- if (ioctl(video_fd, BT848SFMT, &c) < 0) {
+ if (ioctl(*video_fd, BT848SFMT, &c) < 0) {
perror ("BT848SFMT");
- return -EIO;
+ return -1;
}
- c = VIDEO_INPUT;
- if (ioctl(video_fd, METEORSINPUT, &c) < 0) {
+ c = bktr_dev[idev];
+ if (ioctl(*video_fd, METEORSINPUT, &c) < 0) {
perror ("METEORSINPUT");
- return -EIO;
+ return -1;
}
- video_buf = mmap((caddr_t)0, width*height*3, PROT_READ, MAP_SHARED,
- video_fd, (off_t) 0);
- if (video_buf == MAP_FAILED) {
+ *video_buf = (u_int8_t *) mmap((caddr_t)0, width*height*2,
+ PROT_READ, MAP_SHARED, *video_fd, (off_t) 0);
+ if (*video_buf == MAP_FAILED) {
perror ("mmap");
- return -EIO;
+ return -1;
+ }
+ if (frequency != 0.0) {
+ ioctl_frequency = (unsigned long)(frequency*16);
+ if (ioctl(*tuner_fd, TVTUNER_SETFREQ, &ioctl_frequency)<0)
+ perror("TVTUNER_SETFREQ");
}
c = METEOR_CAP_CONTINOUS;
- ioctl(s->fd, METEORCAPTUR, &c);
+ ioctl(*video_fd, METEORCAPTUR, &c);
c = SIGUSR1;
- ioctl (s->fd, METEORSSIGNAL, &c);
+ ioctl (*video_fd, METEORSSIGNAL, &c);
return 0;
}
+static void bktr_getframe(u_int64_t per_frame)
+{
+ u_int64_t curtime;
+ static u_int64_t last_frame_time = 0;
+
+ curtime = av_gettime();
+ if (!last_frame_time
+ || ((last_frame_time + per_frame) > curtime)) {
+ if (!usleep (last_frame_time + per_frame + per_frame/8 - curtime)) {
+ if (!nsignals)
+ printf ("\nSLEPT NO signals - %d microseconds late\n",
+ (int) (av_gettime() - last_frame_time - per_frame));
+ }
+ }
+ nsignals = 0;
+
+ last_frame_time = curtime;
+}
+
+void bf_memcpy (char *dest, char *src, int size)
+{
+ while (size -= 2)
+ {
+ dest[0] = src[1];
+ dest[1] = src[0];
+ dest += 2;
+ src += 2;
+ }
+}
+
/* note: we support only one picture read at a time */
static int grab_read_packet(AVFormatContext *s1, AVPacket *pkt)
{
VideoData *s = s1->priv_data;
int size, halfsize;
- UINT64 curtime;
size = s->width * s->height;
halfsize = size << 1;
- if (av_new_packet(pkt, size + halfsize) < 0)
+
+// if (av_new_packet(pkt, size + halfsize) < 0)
+ if (av_new_packet(pkt, size + size) < 0)
return -EIO;
- curtime = av_gettime();
- if (!s->last_frame_time
- || ((s->last_frame_time + s->per_frame) > curtime)) {
- if (!usleep (s->last_frame_time + s->per_frame + s->per_frame/8 - curtime)) {
- if (!nsignals)
- printf ("\nSLEPT NO signals - %d microseconds late\n",
- av_gettime() - s->last_frame_time - s->per_frame);
- }
- }
- nsignals = 0;
+ bktr_getframe (s->per_frame);
+ pkt->pts = av_gettime() & ((1LL << 48) - 1);
+ bf_memcpy (pkt->data, video_buf, size + size);
+// bf_memcpy (pkt->data, video_buf, size + halfsize);
- s->last_frame_time = curtime;
- pkt->pts = curtime & ((1LL << 48) - 1);
- memcpy (pkt->data, video_buf, size + halfsize);
- return size + halfsize;
+// return size + halfsize;
+ return size + size;
}
static int grab_read_header (AVFormatContext *s1, AVFormatParameters *ap)
@@ -187,6 +238,8 @@ static int grab_read_header (AVFormatContext *s1, AVFormatParameters *ap)
AVStream *st;
int width, height;
int frame_rate;
+ int frame_rate_base;
+ int format = -1;
if (!ap || ap->width <= 0 || ap->height <= 0 || ap->frame_rate <= 0)
return -1;
@@ -194,26 +247,42 @@ static int grab_read_header (AVFormatContext *s1, AVFormatParameters *ap)
width = ap->width;
height = ap->height;
frame_rate = ap->frame_rate;
+ frame_rate_base = ap->frame_rate_base;
+
st = av_new_stream(s1, 0);
if (!st)
return -ENOMEM;
- s1->priv_data = s;
- s1->nb_streams = 1;
- s1->streams[0] = st;
s->width = width;
s->height = height;
s->frame_rate = frame_rate;
- s->per_frame = (INT64_C(1000000) * FRAME_RATE_BASE) / s->frame_rate;
- st->codec.pix_fmt = PIX_FMT_YUV420P;
+ s->frame_rate_base = frame_rate_base;
+ s->per_frame = ((int64_t)1000000 * s->frame_rate_base) / s->frame_rate;
+
+ st->codec.codec_type = CODEC_TYPE_VIDEO;
+// st->codec.pix_fmt = PIX_FMT_YUV420P;
+ st->codec.pix_fmt = PIX_FMT_YUV422;
st->codec.codec_id = CODEC_ID_RAWVIDEO;
st->codec.width = width;
st->codec.height = height;
st->codec.frame_rate = frame_rate;
+ st->codec.frame_rate_base = frame_rate_base;
+
+ av_set_pts_info(s1, 48, 1, 1000000); /* 48 bits pts in use */
- av_set_pts_info(s1, 48, 1, 1000000); /* 48 bits pts in us */
+ if (ap->standard) {
+ if (!strcasecmp(ap->standard, "pal"))
+ format = PAL;
+ if (!strcasecmp(ap->standard, "secam"))
+ format = SECAM;
+ if (!strcasecmp(ap->standard, "ntsc"))
+ format = NTSC;
+ }
- return bktr_init(s1, ap);
+ if (bktr_init (video_device, width, height, format, &video_buf,
+ &(s->fd), &(s->tuner_fd), -1, 0.0) < 0)
+ return -EIO;
+ return 0;
}
static int grab_read_close (AVFormatContext *s1)
@@ -224,12 +293,12 @@ static int grab_read_close (AVFormatContext *s1)
ioctl(s->fd, METEORCAPTUR, &c);
close(s->fd);
close(s->tuner_fd);
- free(s);
+ av_free(s);
return 0;
}
AVInputFormat video_grab_device_format = {
- "video_grab_device",
+ "video4linux",
"video grab",
sizeof(VideoData),
NULL,
diff --git a/multimedia/ffmpeg/files/patch-libavformat::audio.c b/multimedia/ffmpeg/files/patch-libavformat::audio.c
deleted file mode 100644
index 375a58dd7280..000000000000
--- a/multimedia/ffmpeg/files/patch-libavformat::audio.c
+++ /dev/null
@@ -1,17 +0,0 @@
---- libavformat/audio.c.orig Wed Feb 5 20:49:08 2003
-+++ libavformat/audio.c Wed Feb 5 20:50:36 2003
-@@ -243,6 +243,14 @@
- if (av_new_packet(pkt, s->frame_size) < 0)
- return -EIO;
- for(;;) {
-+ struct timeval tv;
-+ fd_set fds;
-+ tv.tv_sec = 0;
-+ tv.tv_usec = 30 * 1000; /* 30 msecs -- a bit shorter than 1 frame at 30fps */
-+ FD_ZERO(&fds);
-+ FD_SET(s->fd, &fds); /* This will block until data is available or we get a timeout */
-+ (void) select(s->fd + 1, &fds, 0, 0, &tv);
-+
- ret = read(s->fd, pkt->data, pkt->size);
- if (ret > 0)
- break;