Fix Luigi's recently committed submission:
- Actually include the x11 grabber in the compile - Don't force the capture type to PAL; leave it at auto - Remove debugging code and comments - Eliminate the need for kernel patch for tuner code - Don't patch one source file in more than one patch-XX files
This commit is contained in:
parent
deb4dd17f0
commit
0b7a232ad3
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=11546
@ -3,7 +3,7 @@
|
||||
# Date created: 14 December 1994
|
||||
# Whom: wollman
|
||||
#
|
||||
# $Id: Makefile,v 1.13 1998/02/24 21:43:36 jseger Exp $
|
||||
# $Id: Makefile,v 1.14 1998/03/17 07:47:52 tg Exp $
|
||||
#
|
||||
|
||||
DISTNAME= vic-2.8
|
||||
@ -15,7 +15,7 @@ MAINTAINER= fenner@FreeBSD.ORG
|
||||
|
||||
LIB_DEPENDS= tk80\\.1:${PORTSDIR}/x11/tk80
|
||||
|
||||
GNU_CONFIGURE= yes
|
||||
USE_AUTOCONF= yes
|
||||
USE_X11= yes
|
||||
MAN1= vic.1
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
--- grabber-meteor.cc.orig Sat May 18 11:44:54 1996
|
||||
+++ grabber-meteor.cc Thu Dec 18 18:35:09 1997
|
||||
--- grabber-meteor.cc.orig Fri Jun 26 11:25:55 1998
|
||||
+++ grabber-meteor.cc Fri Jun 26 11:18:53 1998
|
||||
@@ -43,7 +43,6 @@
|
||||
*
|
||||
*/
|
||||
@ -8,7 +8,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
@@ -51,14 +50,13 @@
|
||||
@@ -51,16 +50,16 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/mman.h>
|
||||
@ -24,8 +24,11 @@
|
||||
+#include "bsd-endian.h"
|
||||
|
||||
#include <machine/ioctl_meteor.h>
|
||||
+#include <machine/ioctl_bt848.h>
|
||||
|
||||
@@ -72,62 +70,85 @@
|
||||
/*XXX*/
|
||||
#define NTSC_WIDTH 320
|
||||
@@ -72,62 +71,78 @@
|
||||
|
||||
|
||||
class MeteorGrabber : public Grabber {
|
||||
@ -63,6 +66,7 @@
|
||||
- struct meteor_counts cnts_; /* pointer to counters */
|
||||
- double start_time_;
|
||||
-#endif
|
||||
+ int tuner_ ; /* tuner device... */
|
||||
};
|
||||
|
||||
-static const int f_411 = 0; /* coder_format_s */
|
||||
@ -108,50 +112,43 @@
|
||||
|
||||
MeteorScanner::MeteorScanner(const int n)
|
||||
{
|
||||
char* devname_template = "/dev/meteor%d";
|
||||
char* nickname_template = "Matrox Meteor %d";
|
||||
+ char* devname_template1 = "/dev/bktr%d";
|
||||
+ char* nickname_template1 = "BrookTree848 %d";
|
||||
+
|
||||
+
|
||||
- char* devname_template = "/dev/meteor%d";
|
||||
- char* nickname_template = "Matrox Meteor %d";
|
||||
+ static char *d[] = { "/dev/bktr%d", "/dev/meteor%d", NULL };
|
||||
+ char *nickname_template = "meteor-%d";
|
||||
|
||||
for(int i = 0; i < n; i++) {
|
||||
char *devname = new char[strlen(devname_template) + 3];
|
||||
- char *devname = new char[strlen(devname_template) + 3];
|
||||
+ for (int j = 0 ; d[j] != NULL ; j++) {
|
||||
+ char *devname = new char[strlen(d[j]) + 3];
|
||||
char *nickname = new char[strlen(nickname_template) + 3];
|
||||
+ char *devname1 = new char[strlen(devname_template1) + 3];
|
||||
+ char *nickname1 = new char[strlen(nickname_template1) + 3];
|
||||
|
||||
+ sprintf(devname, d[j], i);
|
||||
sprintf(nickname, nickname_template, i + 1);
|
||||
sprintf(devname, devname_template, i);
|
||||
+
|
||||
+ sprintf(nickname1, nickname_template1, i + 1);
|
||||
+ sprintf(devname1, devname_template1, i);
|
||||
- sprintf(devname, devname_template, i);
|
||||
if(access(devname, R_OK) == 0) {
|
||||
int fd = open(devname, O_RDONLY);
|
||||
if(fd < 0) {
|
||||
@@ -140,7 +161,21 @@
|
||||
@@ -140,8 +155,9 @@
|
||||
delete nickname;
|
||||
delete devname;
|
||||
}
|
||||
+
|
||||
+ if(access(devname1, R_OK) == 0) {
|
||||
+ int fd = open(devname1, O_RDONLY);
|
||||
+ if(fd < 0) {
|
||||
+ new MeteorDevice(nickname1, devname1, 0);
|
||||
+ } else {
|
||||
+ (void)close(fd);
|
||||
+ new MeteorDevice(nickname1, devname1, 1);
|
||||
+ }
|
||||
+ } else {
|
||||
+ delete nickname1;
|
||||
+ delete devname1;
|
||||
+ }
|
||||
}
|
||||
+
|
||||
}
|
||||
-}
|
||||
|
||||
MeteorDevice::MeteorDevice(const char* nickname, const char *devname, int free):
|
||||
@@ -160,7 +195,10 @@
|
||||
InputDevice(nickname), name_(devname)
|
||||
@@ -149,6 +165,7 @@
|
||||
if(free)
|
||||
attributes_ = "\
|
||||
format {422 411} \
|
||||
+type {pal ntsc secam auto} \
|
||||
size {large normal small cif} \
|
||||
port {RCA Port-1 Port-2 Port-3 S-Video RGB}";
|
||||
else
|
||||
@@ -160,7 +177,10 @@
|
||||
Tcl& tcl = Tcl::instance();
|
||||
if ((argc == 3) && (strcmp(argv[1], "open") == 0)) {
|
||||
TclObject* o = 0;
|
||||
@ -163,7 +160,7 @@
|
||||
if (o != 0)
|
||||
tcl.result(o->name());
|
||||
return (TCL_OK);
|
||||
@@ -168,19 +206,8 @@
|
||||
@@ -168,19 +188,15 @@
|
||||
return (InputDevice::command(argc, argv));
|
||||
}
|
||||
|
||||
@ -181,11 +178,22 @@
|
||||
- abort();
|
||||
- }
|
||||
-
|
||||
+ int devnum;
|
||||
+ if (sscanf(name, "/dev/bktr%d", &devnum) == 1) {
|
||||
+ char *tunerdev = new char[strlen(name) + 3];
|
||||
+ sprintf(tunerdev, "/dev/tuner%d", devnum);
|
||||
+ tuner_ = open(tunerdev, O_RDONLY);
|
||||
+ } else
|
||||
+ tuner_ = -1;
|
||||
dev_ = open(name, O_RDONLY);
|
||||
if (dev_ == -1) {
|
||||
status_ = -1;
|
||||
@@ -205,27 +232,27 @@
|
||||
@@ -203,52 +219,33 @@
|
||||
if (dev_ != -1) {
|
||||
close(dev_);
|
||||
}
|
||||
+ if (tuner_ != -1)
|
||||
+ close(tuner_);
|
||||
}
|
||||
|
||||
-void MeteorGrabber::setsize()
|
||||
@ -206,22 +214,24 @@
|
||||
* means do so.
|
||||
*/
|
||||
unsigned short status;
|
||||
ioctl(dev_, METEORSTATUS, &status);
|
||||
- ioctl(dev_, METEORSTATUS, &status);
|
||||
- if(status & METEOR_STATUS_HCLK) { /* do we have a source? */
|
||||
- /* No source, assume ntsc*/
|
||||
+ if(status & METEOR_STATUS_HCLK) {
|
||||
+ /* No source, assume ntsc */
|
||||
+ // ioctl(dev_, METEORSTATUS, &status);
|
||||
+ if ( video_format_ == METEOR_FMT_NTSC ) {
|
||||
if(geom.rows <= NTSC_HEIGHT && geom.columns <= NTSC_WIDTH)
|
||||
geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
} else {
|
||||
- if(status & METEOR_STATUS_FIDT) { /* is it pal or ntsc? */
|
||||
+ /* is it pal or ntsc? */
|
||||
+ if(status & METEOR_STATUS_FIDT) {
|
||||
/* 60 hz */
|
||||
if(geom.rows<=NTSC_HEIGHT && geom.columns<=NTSC_WIDTH)
|
||||
- /* 60 hz */
|
||||
- if(geom.rows<=NTSC_HEIGHT && geom.columns<=NTSC_WIDTH)
|
||||
- geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
- } else { /* 50 hz */
|
||||
if(geom.rows<=PAL_HEIGHT && geom.columns<=PAL_WIDTH)
|
||||
geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
@@ -237,18 +264,6 @@
|
||||
|
||||
}
|
||||
- }
|
||||
-
|
||||
if(ioctl(dev_, METEORSETGEO, &geom) < 0)
|
||||
perror("vic: METERSETGEO: ");
|
||||
-
|
||||
@ -239,7 +249,7 @@
|
||||
}
|
||||
|
||||
void MeteorGrabber::format()
|
||||
@@ -285,11 +300,6 @@
|
||||
@@ -285,11 +282,6 @@
|
||||
baseheight_ = PAL_HEIGHT * 2;
|
||||
basewidth_ = PAL_WIDTH * 2;
|
||||
}
|
||||
@ -251,7 +261,7 @@
|
||||
setsize();
|
||||
}
|
||||
|
||||
@@ -299,15 +309,6 @@
|
||||
@@ -299,15 +291,6 @@
|
||||
format();
|
||||
int cmd = METEOR_CAP_SINGLE;
|
||||
ioctl(dev_, METEORCAPTUR, (char*)&cmd);
|
||||
@ -267,7 +277,7 @@
|
||||
|
||||
cmd = METEOR_CAP_CONTINOUS;
|
||||
ioctl(dev_, METEORCAPTUR, (char*)&cmd);
|
||||
@@ -319,19 +320,6 @@
|
||||
@@ -319,19 +302,6 @@
|
||||
|
||||
int cmd = METEOR_CAP_STOP_CONT;
|
||||
ioctl(dev_, METEORCAPTUR, (char*)&cmd);
|
||||
@ -287,7 +297,7 @@
|
||||
Grabber::stop();
|
||||
}
|
||||
|
||||
@@ -345,15 +333,15 @@
|
||||
@@ -345,15 +315,15 @@
|
||||
|
||||
int MeteorGrabber::command(int argc, const char*const* argv)
|
||||
{
|
||||
@ -305,7 +315,7 @@
|
||||
decimate_ = dec;
|
||||
if(running_) {
|
||||
stop();
|
||||
@@ -362,7 +350,8 @@
|
||||
@@ -362,7 +332,8 @@
|
||||
}
|
||||
}
|
||||
return (TCL_OK);
|
||||
@ -315,17 +325,39 @@
|
||||
int p = port_;
|
||||
if(!strcmp(argv[2], "RCA")) p = METEOR_INPUT_DEV0;
|
||||
if(!strcmp(argv[2], "Port-1")) p = METEOR_INPUT_DEV1;
|
||||
@@ -377,7 +366,8 @@
|
||||
@@ -377,7 +348,30 @@
|
||||
ioctl(dev_, METEORSINPUT, &port_);
|
||||
}
|
||||
return (TCL_OK);
|
||||
- } else if (strcmp(argv[1], "format") == 0 ||
|
||||
+ }
|
||||
+ if (strcmp(argv[1], "freeze") == 0) {
|
||||
+ int cmd = METEOR_CAP_CONTINOUS ;
|
||||
+ if ( atoi(argv[2]) != 0 )
|
||||
+ cmd = METEOR_CAP_STOP_CONT;
|
||||
+ ioctl(dev_, METEORCAPTUR, (char*)&cmd);
|
||||
+ return (TCL_OK);
|
||||
+ }
|
||||
+ if (strcmp(argv[1], "chan") == 0) {
|
||||
+ int p = port_;
|
||||
+ int c = atoi(argv[2]);
|
||||
+ if (c > 0 && c < 199)
|
||||
+ p = METEOR_INPUT_DEV1 ;
|
||||
+ else
|
||||
+ p = METEOR_INPUT_DEV0 ;
|
||||
+ if (p != port_) {
|
||||
+ port_ = p;
|
||||
+ ioctl(dev_, METEORSINPUT, &port_);
|
||||
+ }
|
||||
+ if (p == METEOR_INPUT_DEV1)
|
||||
+ ioctl(tuner_, TVTUNER_SETCHNL, &c);
|
||||
+ return (TCL_OK);
|
||||
+ }
|
||||
+ if (strcmp(argv[1], "format") == 0 ||
|
||||
strcmp(argv[1], "type") == 0) {
|
||||
if (strcmp(argv[2], "auto") == 0)
|
||||
video_format_ = METEOR_FMT_AUTOMODE;
|
||||
@@ -390,14 +380,35 @@
|
||||
@@ -390,14 +384,35 @@
|
||||
if (running_)
|
||||
format();
|
||||
return (TCL_OK);
|
||||
@ -365,14 +397,14 @@
|
||||
switch (video_format_) {
|
||||
|
||||
case METEOR_FMT_AUTOMODE:
|
||||
@@ -423,54 +434,316 @@
|
||||
@@ -423,54 +438,316 @@
|
||||
return (TCL_OK);
|
||||
|
||||
}
|
||||
+ if (strcmp(argv[1], "brightness") == 0) {
|
||||
+ u_char val;
|
||||
+ ioctl(dev_, METEORGBRIG, &val);
|
||||
+ tcl.resultf("%d", (int)val);
|
||||
+ tcl.resultf("%d", (unsigned int)val);
|
||||
+ return (TCL_OK);
|
||||
+ }
|
||||
+ if (strcmp(argv[1], "contrast") == 0) {
|
||||
|
@ -1,216 +1,5 @@
|
||||
diff -ubwr ./grabber-meteor.cc /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber-meteor.cc
|
||||
--- ./grabber-meteor.cc Fri May 29 17:06:00 1998
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber-meteor.cc Mon Apr 13 20:47:54 1998
|
||||
@@ -59,6 +59,7 @@
|
||||
#include "bsd-endian.h"
|
||||
|
||||
#include <machine/ioctl_meteor.h>
|
||||
+#include <machine/ioctl_bt848.h>
|
||||
|
||||
/*XXX*/
|
||||
#define NTSC_WIDTH 320
|
||||
@@ -92,6 +93,7 @@
|
||||
u_int baseheight_; /* Width of frame to be captured */
|
||||
u_int decimate_; /* division of base sizes */
|
||||
volatile u_int* pyuv_; /* pointer to yuv data */
|
||||
+ int tuner_ ; /* tuner device... */
|
||||
};
|
||||
|
||||
class Meteor422Grabber : public MeteorGrabber {
|
||||
@@ -131,24 +133,16 @@
|
||||
|
||||
MeteorScanner::MeteorScanner(const int n)
|
||||
{
|
||||
- char* devname_template = "/dev/meteor%d";
|
||||
- char* nickname_template = "Matrox Meteor %d";
|
||||
- char* devname_template1 = "/dev/bktr%d";
|
||||
- char* nickname_template1 = "BrookTree848 %d";
|
||||
-
|
||||
-
|
||||
+ static char *d[] = { "/dev/bktr%d", "/dev/meteor%d", NULL };
|
||||
+ char *nickname_template = "meteor-%d";
|
||||
|
||||
for(int i = 0; i < n; i++) {
|
||||
- char *devname = new char[strlen(devname_template) + 3];
|
||||
+ for (int j = 0 ; d[j] != NULL ; j++) {
|
||||
+ char *devname = new char[strlen(d[j]) + 3];
|
||||
char *nickname = new char[strlen(nickname_template) + 3];
|
||||
- char *devname1 = new char[strlen(devname_template1) + 3];
|
||||
- char *nickname1 = new char[strlen(nickname_template1) + 3];
|
||||
|
||||
+ sprintf(devname, d[j], i);
|
||||
sprintf(nickname, nickname_template, i + 1);
|
||||
- sprintf(devname, devname_template, i);
|
||||
-
|
||||
- sprintf(nickname1, nickname_template1, i + 1);
|
||||
- sprintf(devname1, devname_template1, i);
|
||||
if(access(devname, R_OK) == 0) {
|
||||
int fd = open(devname, O_RDONLY);
|
||||
if(fd < 0) {
|
||||
@@ -161,29 +155,17 @@
|
||||
delete nickname;
|
||||
delete devname;
|
||||
}
|
||||
-
|
||||
- if(access(devname1, R_OK) == 0) {
|
||||
- int fd = open(devname1, O_RDONLY);
|
||||
- if(fd < 0) {
|
||||
- new MeteorDevice(nickname1, devname1, 0);
|
||||
- } else {
|
||||
- (void)close(fd);
|
||||
- new MeteorDevice(nickname1, devname1, 1);
|
||||
}
|
||||
- } else {
|
||||
- delete nickname1;
|
||||
- delete devname1;
|
||||
}
|
||||
}
|
||||
|
||||
-}
|
||||
-
|
||||
MeteorDevice::MeteorDevice(const char* nickname, const char *devname, int free):
|
||||
InputDevice(nickname), name_(devname)
|
||||
{
|
||||
if(free)
|
||||
attributes_ = "\
|
||||
format {422 411} \
|
||||
+type {pal ntsc secam auto} \
|
||||
size {large normal small cif} \
|
||||
port {RCA Port-1 Port-2 Port-3 S-Video RGB}";
|
||||
else
|
||||
@@ -208,6 +190,7 @@
|
||||
|
||||
MeteorGrabber::MeteorGrabber(const char* name)
|
||||
{
|
||||
+ tuner_ = open("/dev/tuner", O_RDONLY);
|
||||
dev_ = open(name, O_RDONLY);
|
||||
if (dev_ == -1) {
|
||||
status_ = -1;
|
||||
@@ -230,6 +213,8 @@
|
||||
if (dev_ != -1) {
|
||||
close(dev_);
|
||||
}
|
||||
+ if (tuner_ != -1)
|
||||
+ close(tuner_);
|
||||
}
|
||||
|
||||
void MeteorGrabber::set_size_meteor(int w, int h)
|
||||
@@ -245,23 +230,14 @@
|
||||
* means do so.
|
||||
*/
|
||||
unsigned short status;
|
||||
- ioctl(dev_, METEORSTATUS, &status);
|
||||
- if(status & METEOR_STATUS_HCLK) {
|
||||
- /* No source, assume ntsc */
|
||||
+ // ioctl(dev_, METEORSTATUS, &status);
|
||||
+ if ( video_format_ == METEOR_FMT_NTSC ) {
|
||||
if(geom.rows <= NTSC_HEIGHT && geom.columns <= NTSC_WIDTH)
|
||||
geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
} else {
|
||||
- /* is it pal or ntsc? */
|
||||
- if(status & METEOR_STATUS_FIDT) {
|
||||
- /* 60 hz */
|
||||
- if(geom.rows<=NTSC_HEIGHT && geom.columns<=NTSC_WIDTH)
|
||||
- geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
- } else { /* 50 hz */
|
||||
if(geom.rows<=PAL_HEIGHT && geom.columns<=PAL_WIDTH)
|
||||
geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
}
|
||||
- }
|
||||
-
|
||||
if(ioctl(dev_, METEORSETGEO, &geom) < 0)
|
||||
perror("vic: METERSETGEO: ");
|
||||
}
|
||||
@@ -326,7 +302,7 @@
|
||||
void MeteorGrabber::fps(int f)
|
||||
{
|
||||
u_short met_fps = (u_short)f;
|
||||
- (void)ioctl(dev_, METEORSFPS, &met_fps);
|
||||
+ // (void)ioctl(dev_, METEORSFPS, &met_fps);
|
||||
|
||||
Grabber::fps(f);
|
||||
}
|
||||
@@ -367,6 +343,28 @@
|
||||
}
|
||||
return (TCL_OK);
|
||||
}
|
||||
+ if (strcmp(argv[1], "freeze") == 0) {
|
||||
+ int cmd = METEOR_CAP_CONTINOUS ;
|
||||
+ if ( atoi(argv[2]) != 0 )
|
||||
+ cmd = METEOR_CAP_STOP_CONT;
|
||||
+ ioctl(dev_, METEORCAPTUR, (char*)&cmd);
|
||||
+ return (TCL_OK);
|
||||
+ }
|
||||
+ if (strcmp(argv[1], "chan") == 0) {
|
||||
+ int p = port_;
|
||||
+ int c = atoi(argv[2]);
|
||||
+ if (c > 0 && c < 199)
|
||||
+ p = METEOR_INPUT_DEV1 ;
|
||||
+ else
|
||||
+ p = METEOR_INPUT_DEV0 ;
|
||||
+ if (p != port_) {
|
||||
+ port_ = p;
|
||||
+ ioctl(dev_, METEORSINPUT, &port_);
|
||||
+ }
|
||||
+ if (p == METEOR_INPUT_DEV1)
|
||||
+ ioctl(dev_, TVTUNER_SETCHNL, &c);
|
||||
+ return (TCL_OK);
|
||||
+ }
|
||||
if (strcmp(argv[1], "format") == 0 ||
|
||||
strcmp(argv[1], "type") == 0) {
|
||||
if (strcmp(argv[2], "auto") == 0)
|
||||
@@ -437,7 +435,7 @@
|
||||
if (strcmp(argv[1], "brightness") == 0) {
|
||||
u_char val;
|
||||
ioctl(dev_, METEORGBRIG, &val);
|
||||
- tcl.resultf("%d", (int)val);
|
||||
+ tcl.resultf("%d", (unsigned int)val);
|
||||
return (TCL_OK);
|
||||
}
|
||||
if (strcmp(argv[1], "contrast") == 0) {
|
||||
@@ -507,10 +505,10 @@
|
||||
return 0;
|
||||
|
||||
int istride = inw_ * 2;
|
||||
- suppress((u_char*)pyuv_, istride);
|
||||
- saveblks((u_char*)pyuv_, istride);
|
||||
+ suppress((u_char*)pyuv_, istride); // compute which ones to send
|
||||
+ saveblks((u_char*)pyuv_, istride); // save copied blocks
|
||||
u_int32_t ts = media_ts();
|
||||
- YuvFrame f(ts, frame_, crvec_, outw_, outh_);
|
||||
+ YuvFrame f(ts, frame_, crvec_, outw_, outh_); // new obj.
|
||||
return (target_->consume(&f));
|
||||
}
|
||||
|
||||
@@ -724,6 +722,7 @@
|
||||
u_char* chm = lum + off;
|
||||
off >>= 2;
|
||||
|
||||
+int to_send = 0 ;
|
||||
crv += vstart_ * blkw_ + hstart_;
|
||||
lum += vstart_ * outw_ * 16 + hstart_ * 16;
|
||||
chm += vstart_ * (outw_ >> 1) * 8 + hstart_ * 8;
|
||||
@@ -734,9 +733,10 @@
|
||||
const u_char* nin = in;
|
||||
for (int x = hstart_; x < hstop_; ++x) {
|
||||
int s = *crv++;
|
||||
- if ((s & CR_SEND) != 0)
|
||||
+ if ((s & CR_SEND) != 0) {
|
||||
saveblk(in, lum, chm, chm + off, outw_, is);
|
||||
-
|
||||
+ to_send++ ;
|
||||
+ }
|
||||
in += 32;
|
||||
lum += 16;
|
||||
chm += 8;
|
||||
@@ -746,4 +746,5 @@
|
||||
chm += 7 * (outw_ >> 1) + skip * 8;
|
||||
in = nin + 16 * is;
|
||||
}
|
||||
+ // fprintf(stderr, "this time send %d\n", to_send);
|
||||
}
|
||||
diff -ubwr ./grabber.cc /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber.cc
|
||||
--- ./grabber.cc Tue Feb 6 00:02:00 1996
|
||||
--- grabber.cc Tue Feb 6 00:02:00 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber.cc Fri Apr 10 15:36:42 1998
|
||||
@@ -69,6 +69,7 @@
|
||||
hstart_(0), hstop_(0),
|
||||
@ -231,31 +20,8 @@ diff -ubwr ./grabber.cc /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/
|
||||
if (strcmp(argv[1], "fps") == 0) {
|
||||
/*XXX assume value in range */
|
||||
fps(atoi(argv[2]));
|
||||
@@ -194,11 +199,14 @@
|
||||
* favoring the more restrictive metric. If we're more than
|
||||
* 200ms behind (e.g., the cpu is saturated or we've been
|
||||
* suspended), give up and reset the frame clock.
|
||||
+ * The argument passed is the number of bytes transmitted.
|
||||
*/
|
||||
double Grabber::tick(int n)
|
||||
{
|
||||
+ // how much it took to send the data (microseconds)
|
||||
double frametime = 8e6 * double(n) / double(bps_);
|
||||
if (frametime < frametime_) {
|
||||
+ // took less than one frame...
|
||||
if (frametime * 2. < frametime_)
|
||||
delta_ += (frametime - delta_) * .25;
|
||||
else
|
||||
@@ -207,6 +215,7 @@
|
||||
} else
|
||||
delta_ = frametime;
|
||||
|
||||
+ // when to get next frame (not earlier than now!
|
||||
frameclock_ += frametime;
|
||||
double now = gettimeofday();
|
||||
double delta = frameclock_ - now;
|
||||
diff -ubwr ./grabber.h /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber.h
|
||||
--- ./grabber.h Tue Feb 6 00:02:00 1996
|
||||
--- grabber.h Tue Feb 6 00:02:00 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber.h Fri Apr 10 15:37:28 1998
|
||||
@@ -87,6 +87,7 @@
|
||||
int vstop_;
|
||||
@ -290,29 +56,8 @@ diff -ubwr ./grabber.h /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/g
|
||||
center = 1; \
|
||||
} \
|
||||
diff -ubwr ./ui-ctrlmenu.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-ctrlmenu.tcl
|
||||
--- ./ui-ctrlmenu.tcl Thu Jun 27 01:27:48 1996
|
||||
--- ui-ctrlmenu.tcl Thu Jun 27 01:27:48 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-ctrlmenu.tcl Fri Apr 10 16:39:04 1998
|
||||
@@ -124,6 +124,7 @@
|
||||
catch "wm resizable $w false false"
|
||||
|
||||
frame $w.session
|
||||
+ # luigi - move next 2 lines to ui-main
|
||||
frame $w.cb
|
||||
build.xmit $w.cb
|
||||
frame $w.encoder
|
||||
@@ -139,9 +140,12 @@
|
||||
-relief raised -anchor c \
|
||||
-command "toggle_window $w" -font [mediumfont]
|
||||
|
||||
+ # luigi $w.cb goes into main menu
|
||||
pack $w.cb $w.encoder $w.decoder $w.session -padx 6 -fill x
|
||||
+ # pack $w.encoder $w.decoder $w.session -padx 6 -fill x
|
||||
pack $w.dismiss -anchor c -pady 4
|
||||
|
||||
+ # luigi - move next 3 lines to ui-main (must check something)
|
||||
if [have_transmit_permission] {
|
||||
selectInitialDevice
|
||||
}
|
||||
@@ -390,11 +394,15 @@
|
||||
-relief raised -command transmit \
|
||||
-anchor w -variable transmitButtonState -font $f \
|
||||
@ -370,15 +115,6 @@ diff -ubwr ./ui-ctrlmenu.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-l
|
||||
|
||||
insert_grabber_panel [$device nickname]
|
||||
|
||||
@@ -765,7 +780,7 @@
|
||||
-value secam -variable inputType -font $f
|
||||
|
||||
global inputType typeButton
|
||||
- set inputType auto
|
||||
+ set inputType pal ; # auto
|
||||
set typeButton $w
|
||||
}
|
||||
|
||||
@@ -774,7 +789,8 @@
|
||||
build.encoder_options $w.options
|
||||
build.device $w.device
|
||||
@ -400,7 +136,7 @@ diff -ubwr ./ui-ctrlmenu.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-l
|
||||
setFillRate
|
||||
update
|
||||
diff -ubwr ./ui-grabber.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-grabber.tcl
|
||||
--- ./ui-grabber.tcl Fri Jun 21 04:39:35 1996
|
||||
--- ui-grabber.tcl Fri Jun 21 04:39:35 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-grabber.tcl Fri Apr 10 13:54:42 1998
|
||||
@@ -39,65 +39,93 @@
|
||||
# called foo-1, foo-2, etc. and you'll only need build.foo
|
||||
@ -672,7 +408,7 @@ diff -ubwr ./ui-grabber.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-lu
|
||||
+
|
||||
+### end of file ###
|
||||
diff -ubwr ./ui-resource.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-resource.tcl
|
||||
--- ./ui-resource.tcl Wed Apr 3 02:33:56 1996
|
||||
--- ui-resource.tcl Wed Apr 3 02:33:56 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-resource.tcl Fri Apr 10 21:11:56 1998
|
||||
@@ -140,7 +140,7 @@
|
||||
option add Vic.useHardwareDecode false startupFile
|
||||
@ -683,24 +419,3 @@ diff -ubwr ./ui-resource.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-l
|
||||
option add Vic.siteDropTime "300" startupFile
|
||||
|
||||
#
|
||||
diff -ubwr ./ui-util.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-util.tcl
|
||||
--- ./ui-util.tcl Tue Feb 6 00:02:20 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-util.tcl Fri Apr 10 20:49:56 1998
|
||||
@@ -64,7 +64,7 @@
|
||||
global created$w
|
||||
if { ! [info exists created$w] } {
|
||||
set created$w 1
|
||||
- wm transient $w .
|
||||
+ # wm transient $w .
|
||||
update idletasks
|
||||
set x [winfo rootx .]
|
||||
set y [winfo rooty .]
|
||||
@@ -103,7 +103,7 @@
|
||||
}
|
||||
set title [resource iconPrefix]$title
|
||||
wm withdraw $w
|
||||
- wm transient $w .
|
||||
+ # wm transient $w .
|
||||
wm title $w $title
|
||||
wm iconname $w $title
|
||||
bind $w <Enter> "focus $w"
|
||||
|
@ -3,7 +3,7 @@
|
||||
# Date created: 14 December 1994
|
||||
# Whom: wollman
|
||||
#
|
||||
# $Id: Makefile,v 1.13 1998/02/24 21:43:36 jseger Exp $
|
||||
# $Id: Makefile,v 1.14 1998/03/17 07:47:52 tg Exp $
|
||||
#
|
||||
|
||||
DISTNAME= vic-2.8
|
||||
@ -15,7 +15,7 @@ MAINTAINER= fenner@FreeBSD.ORG
|
||||
|
||||
LIB_DEPENDS= tk80\\.1:${PORTSDIR}/x11/tk80
|
||||
|
||||
GNU_CONFIGURE= yes
|
||||
USE_AUTOCONF= yes
|
||||
USE_X11= yes
|
||||
MAN1= vic.1
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
--- grabber-meteor.cc.orig Sat May 18 11:44:54 1996
|
||||
+++ grabber-meteor.cc Thu Dec 18 18:35:09 1997
|
||||
--- grabber-meteor.cc.orig Fri Jun 26 11:25:55 1998
|
||||
+++ grabber-meteor.cc Fri Jun 26 11:18:53 1998
|
||||
@@ -43,7 +43,6 @@
|
||||
*
|
||||
*/
|
||||
@ -8,7 +8,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
@@ -51,14 +50,13 @@
|
||||
@@ -51,16 +50,16 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/mman.h>
|
||||
@ -24,8 +24,11 @@
|
||||
+#include "bsd-endian.h"
|
||||
|
||||
#include <machine/ioctl_meteor.h>
|
||||
+#include <machine/ioctl_bt848.h>
|
||||
|
||||
@@ -72,62 +70,85 @@
|
||||
/*XXX*/
|
||||
#define NTSC_WIDTH 320
|
||||
@@ -72,62 +71,78 @@
|
||||
|
||||
|
||||
class MeteorGrabber : public Grabber {
|
||||
@ -63,6 +66,7 @@
|
||||
- struct meteor_counts cnts_; /* pointer to counters */
|
||||
- double start_time_;
|
||||
-#endif
|
||||
+ int tuner_ ; /* tuner device... */
|
||||
};
|
||||
|
||||
-static const int f_411 = 0; /* coder_format_s */
|
||||
@ -108,50 +112,43 @@
|
||||
|
||||
MeteorScanner::MeteorScanner(const int n)
|
||||
{
|
||||
char* devname_template = "/dev/meteor%d";
|
||||
char* nickname_template = "Matrox Meteor %d";
|
||||
+ char* devname_template1 = "/dev/bktr%d";
|
||||
+ char* nickname_template1 = "BrookTree848 %d";
|
||||
+
|
||||
+
|
||||
- char* devname_template = "/dev/meteor%d";
|
||||
- char* nickname_template = "Matrox Meteor %d";
|
||||
+ static char *d[] = { "/dev/bktr%d", "/dev/meteor%d", NULL };
|
||||
+ char *nickname_template = "meteor-%d";
|
||||
|
||||
for(int i = 0; i < n; i++) {
|
||||
char *devname = new char[strlen(devname_template) + 3];
|
||||
- char *devname = new char[strlen(devname_template) + 3];
|
||||
+ for (int j = 0 ; d[j] != NULL ; j++) {
|
||||
+ char *devname = new char[strlen(d[j]) + 3];
|
||||
char *nickname = new char[strlen(nickname_template) + 3];
|
||||
+ char *devname1 = new char[strlen(devname_template1) + 3];
|
||||
+ char *nickname1 = new char[strlen(nickname_template1) + 3];
|
||||
|
||||
+ sprintf(devname, d[j], i);
|
||||
sprintf(nickname, nickname_template, i + 1);
|
||||
sprintf(devname, devname_template, i);
|
||||
+
|
||||
+ sprintf(nickname1, nickname_template1, i + 1);
|
||||
+ sprintf(devname1, devname_template1, i);
|
||||
- sprintf(devname, devname_template, i);
|
||||
if(access(devname, R_OK) == 0) {
|
||||
int fd = open(devname, O_RDONLY);
|
||||
if(fd < 0) {
|
||||
@@ -140,7 +161,21 @@
|
||||
@@ -140,8 +155,9 @@
|
||||
delete nickname;
|
||||
delete devname;
|
||||
}
|
||||
+
|
||||
+ if(access(devname1, R_OK) == 0) {
|
||||
+ int fd = open(devname1, O_RDONLY);
|
||||
+ if(fd < 0) {
|
||||
+ new MeteorDevice(nickname1, devname1, 0);
|
||||
+ } else {
|
||||
+ (void)close(fd);
|
||||
+ new MeteorDevice(nickname1, devname1, 1);
|
||||
+ }
|
||||
+ } else {
|
||||
+ delete nickname1;
|
||||
+ delete devname1;
|
||||
+ }
|
||||
}
|
||||
+
|
||||
}
|
||||
-}
|
||||
|
||||
MeteorDevice::MeteorDevice(const char* nickname, const char *devname, int free):
|
||||
@@ -160,7 +195,10 @@
|
||||
InputDevice(nickname), name_(devname)
|
||||
@@ -149,6 +165,7 @@
|
||||
if(free)
|
||||
attributes_ = "\
|
||||
format {422 411} \
|
||||
+type {pal ntsc secam auto} \
|
||||
size {large normal small cif} \
|
||||
port {RCA Port-1 Port-2 Port-3 S-Video RGB}";
|
||||
else
|
||||
@@ -160,7 +177,10 @@
|
||||
Tcl& tcl = Tcl::instance();
|
||||
if ((argc == 3) && (strcmp(argv[1], "open") == 0)) {
|
||||
TclObject* o = 0;
|
||||
@ -163,7 +160,7 @@
|
||||
if (o != 0)
|
||||
tcl.result(o->name());
|
||||
return (TCL_OK);
|
||||
@@ -168,19 +206,8 @@
|
||||
@@ -168,19 +188,15 @@
|
||||
return (InputDevice::command(argc, argv));
|
||||
}
|
||||
|
||||
@ -181,11 +178,22 @@
|
||||
- abort();
|
||||
- }
|
||||
-
|
||||
+ int devnum;
|
||||
+ if (sscanf(name, "/dev/bktr%d", &devnum) == 1) {
|
||||
+ char *tunerdev = new char[strlen(name) + 3];
|
||||
+ sprintf(tunerdev, "/dev/tuner%d", devnum);
|
||||
+ tuner_ = open(tunerdev, O_RDONLY);
|
||||
+ } else
|
||||
+ tuner_ = -1;
|
||||
dev_ = open(name, O_RDONLY);
|
||||
if (dev_ == -1) {
|
||||
status_ = -1;
|
||||
@@ -205,27 +232,27 @@
|
||||
@@ -203,52 +219,33 @@
|
||||
if (dev_ != -1) {
|
||||
close(dev_);
|
||||
}
|
||||
+ if (tuner_ != -1)
|
||||
+ close(tuner_);
|
||||
}
|
||||
|
||||
-void MeteorGrabber::setsize()
|
||||
@ -206,22 +214,24 @@
|
||||
* means do so.
|
||||
*/
|
||||
unsigned short status;
|
||||
ioctl(dev_, METEORSTATUS, &status);
|
||||
- ioctl(dev_, METEORSTATUS, &status);
|
||||
- if(status & METEOR_STATUS_HCLK) { /* do we have a source? */
|
||||
- /* No source, assume ntsc*/
|
||||
+ if(status & METEOR_STATUS_HCLK) {
|
||||
+ /* No source, assume ntsc */
|
||||
+ // ioctl(dev_, METEORSTATUS, &status);
|
||||
+ if ( video_format_ == METEOR_FMT_NTSC ) {
|
||||
if(geom.rows <= NTSC_HEIGHT && geom.columns <= NTSC_WIDTH)
|
||||
geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
} else {
|
||||
- if(status & METEOR_STATUS_FIDT) { /* is it pal or ntsc? */
|
||||
+ /* is it pal or ntsc? */
|
||||
+ if(status & METEOR_STATUS_FIDT) {
|
||||
/* 60 hz */
|
||||
if(geom.rows<=NTSC_HEIGHT && geom.columns<=NTSC_WIDTH)
|
||||
- /* 60 hz */
|
||||
- if(geom.rows<=NTSC_HEIGHT && geom.columns<=NTSC_WIDTH)
|
||||
- geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
- } else { /* 50 hz */
|
||||
if(geom.rows<=PAL_HEIGHT && geom.columns<=PAL_WIDTH)
|
||||
geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
@@ -237,18 +264,6 @@
|
||||
|
||||
}
|
||||
- }
|
||||
-
|
||||
if(ioctl(dev_, METEORSETGEO, &geom) < 0)
|
||||
perror("vic: METERSETGEO: ");
|
||||
-
|
||||
@ -239,7 +249,7 @@
|
||||
}
|
||||
|
||||
void MeteorGrabber::format()
|
||||
@@ -285,11 +300,6 @@
|
||||
@@ -285,11 +282,6 @@
|
||||
baseheight_ = PAL_HEIGHT * 2;
|
||||
basewidth_ = PAL_WIDTH * 2;
|
||||
}
|
||||
@ -251,7 +261,7 @@
|
||||
setsize();
|
||||
}
|
||||
|
||||
@@ -299,15 +309,6 @@
|
||||
@@ -299,15 +291,6 @@
|
||||
format();
|
||||
int cmd = METEOR_CAP_SINGLE;
|
||||
ioctl(dev_, METEORCAPTUR, (char*)&cmd);
|
||||
@ -267,7 +277,7 @@
|
||||
|
||||
cmd = METEOR_CAP_CONTINOUS;
|
||||
ioctl(dev_, METEORCAPTUR, (char*)&cmd);
|
||||
@@ -319,19 +320,6 @@
|
||||
@@ -319,19 +302,6 @@
|
||||
|
||||
int cmd = METEOR_CAP_STOP_CONT;
|
||||
ioctl(dev_, METEORCAPTUR, (char*)&cmd);
|
||||
@ -287,7 +297,7 @@
|
||||
Grabber::stop();
|
||||
}
|
||||
|
||||
@@ -345,15 +333,15 @@
|
||||
@@ -345,15 +315,15 @@
|
||||
|
||||
int MeteorGrabber::command(int argc, const char*const* argv)
|
||||
{
|
||||
@ -305,7 +315,7 @@
|
||||
decimate_ = dec;
|
||||
if(running_) {
|
||||
stop();
|
||||
@@ -362,7 +350,8 @@
|
||||
@@ -362,7 +332,8 @@
|
||||
}
|
||||
}
|
||||
return (TCL_OK);
|
||||
@ -315,17 +325,39 @@
|
||||
int p = port_;
|
||||
if(!strcmp(argv[2], "RCA")) p = METEOR_INPUT_DEV0;
|
||||
if(!strcmp(argv[2], "Port-1")) p = METEOR_INPUT_DEV1;
|
||||
@@ -377,7 +366,8 @@
|
||||
@@ -377,7 +348,30 @@
|
||||
ioctl(dev_, METEORSINPUT, &port_);
|
||||
}
|
||||
return (TCL_OK);
|
||||
- } else if (strcmp(argv[1], "format") == 0 ||
|
||||
+ }
|
||||
+ if (strcmp(argv[1], "freeze") == 0) {
|
||||
+ int cmd = METEOR_CAP_CONTINOUS ;
|
||||
+ if ( atoi(argv[2]) != 0 )
|
||||
+ cmd = METEOR_CAP_STOP_CONT;
|
||||
+ ioctl(dev_, METEORCAPTUR, (char*)&cmd);
|
||||
+ return (TCL_OK);
|
||||
+ }
|
||||
+ if (strcmp(argv[1], "chan") == 0) {
|
||||
+ int p = port_;
|
||||
+ int c = atoi(argv[2]);
|
||||
+ if (c > 0 && c < 199)
|
||||
+ p = METEOR_INPUT_DEV1 ;
|
||||
+ else
|
||||
+ p = METEOR_INPUT_DEV0 ;
|
||||
+ if (p != port_) {
|
||||
+ port_ = p;
|
||||
+ ioctl(dev_, METEORSINPUT, &port_);
|
||||
+ }
|
||||
+ if (p == METEOR_INPUT_DEV1)
|
||||
+ ioctl(tuner_, TVTUNER_SETCHNL, &c);
|
||||
+ return (TCL_OK);
|
||||
+ }
|
||||
+ if (strcmp(argv[1], "format") == 0 ||
|
||||
strcmp(argv[1], "type") == 0) {
|
||||
if (strcmp(argv[2], "auto") == 0)
|
||||
video_format_ = METEOR_FMT_AUTOMODE;
|
||||
@@ -390,14 +380,35 @@
|
||||
@@ -390,14 +384,35 @@
|
||||
if (running_)
|
||||
format();
|
||||
return (TCL_OK);
|
||||
@ -365,14 +397,14 @@
|
||||
switch (video_format_) {
|
||||
|
||||
case METEOR_FMT_AUTOMODE:
|
||||
@@ -423,54 +434,316 @@
|
||||
@@ -423,54 +438,316 @@
|
||||
return (TCL_OK);
|
||||
|
||||
}
|
||||
+ if (strcmp(argv[1], "brightness") == 0) {
|
||||
+ u_char val;
|
||||
+ ioctl(dev_, METEORGBRIG, &val);
|
||||
+ tcl.resultf("%d", (int)val);
|
||||
+ tcl.resultf("%d", (unsigned int)val);
|
||||
+ return (TCL_OK);
|
||||
+ }
|
||||
+ if (strcmp(argv[1], "contrast") == 0) {
|
||||
|
@ -1,216 +1,5 @@
|
||||
diff -ubwr ./grabber-meteor.cc /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber-meteor.cc
|
||||
--- ./grabber-meteor.cc Fri May 29 17:06:00 1998
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber-meteor.cc Mon Apr 13 20:47:54 1998
|
||||
@@ -59,6 +59,7 @@
|
||||
#include "bsd-endian.h"
|
||||
|
||||
#include <machine/ioctl_meteor.h>
|
||||
+#include <machine/ioctl_bt848.h>
|
||||
|
||||
/*XXX*/
|
||||
#define NTSC_WIDTH 320
|
||||
@@ -92,6 +93,7 @@
|
||||
u_int baseheight_; /* Width of frame to be captured */
|
||||
u_int decimate_; /* division of base sizes */
|
||||
volatile u_int* pyuv_; /* pointer to yuv data */
|
||||
+ int tuner_ ; /* tuner device... */
|
||||
};
|
||||
|
||||
class Meteor422Grabber : public MeteorGrabber {
|
||||
@@ -131,24 +133,16 @@
|
||||
|
||||
MeteorScanner::MeteorScanner(const int n)
|
||||
{
|
||||
- char* devname_template = "/dev/meteor%d";
|
||||
- char* nickname_template = "Matrox Meteor %d";
|
||||
- char* devname_template1 = "/dev/bktr%d";
|
||||
- char* nickname_template1 = "BrookTree848 %d";
|
||||
-
|
||||
-
|
||||
+ static char *d[] = { "/dev/bktr%d", "/dev/meteor%d", NULL };
|
||||
+ char *nickname_template = "meteor-%d";
|
||||
|
||||
for(int i = 0; i < n; i++) {
|
||||
- char *devname = new char[strlen(devname_template) + 3];
|
||||
+ for (int j = 0 ; d[j] != NULL ; j++) {
|
||||
+ char *devname = new char[strlen(d[j]) + 3];
|
||||
char *nickname = new char[strlen(nickname_template) + 3];
|
||||
- char *devname1 = new char[strlen(devname_template1) + 3];
|
||||
- char *nickname1 = new char[strlen(nickname_template1) + 3];
|
||||
|
||||
+ sprintf(devname, d[j], i);
|
||||
sprintf(nickname, nickname_template, i + 1);
|
||||
- sprintf(devname, devname_template, i);
|
||||
-
|
||||
- sprintf(nickname1, nickname_template1, i + 1);
|
||||
- sprintf(devname1, devname_template1, i);
|
||||
if(access(devname, R_OK) == 0) {
|
||||
int fd = open(devname, O_RDONLY);
|
||||
if(fd < 0) {
|
||||
@@ -161,29 +155,17 @@
|
||||
delete nickname;
|
||||
delete devname;
|
||||
}
|
||||
-
|
||||
- if(access(devname1, R_OK) == 0) {
|
||||
- int fd = open(devname1, O_RDONLY);
|
||||
- if(fd < 0) {
|
||||
- new MeteorDevice(nickname1, devname1, 0);
|
||||
- } else {
|
||||
- (void)close(fd);
|
||||
- new MeteorDevice(nickname1, devname1, 1);
|
||||
}
|
||||
- } else {
|
||||
- delete nickname1;
|
||||
- delete devname1;
|
||||
}
|
||||
}
|
||||
|
||||
-}
|
||||
-
|
||||
MeteorDevice::MeteorDevice(const char* nickname, const char *devname, int free):
|
||||
InputDevice(nickname), name_(devname)
|
||||
{
|
||||
if(free)
|
||||
attributes_ = "\
|
||||
format {422 411} \
|
||||
+type {pal ntsc secam auto} \
|
||||
size {large normal small cif} \
|
||||
port {RCA Port-1 Port-2 Port-3 S-Video RGB}";
|
||||
else
|
||||
@@ -208,6 +190,7 @@
|
||||
|
||||
MeteorGrabber::MeteorGrabber(const char* name)
|
||||
{
|
||||
+ tuner_ = open("/dev/tuner", O_RDONLY);
|
||||
dev_ = open(name, O_RDONLY);
|
||||
if (dev_ == -1) {
|
||||
status_ = -1;
|
||||
@@ -230,6 +213,8 @@
|
||||
if (dev_ != -1) {
|
||||
close(dev_);
|
||||
}
|
||||
+ if (tuner_ != -1)
|
||||
+ close(tuner_);
|
||||
}
|
||||
|
||||
void MeteorGrabber::set_size_meteor(int w, int h)
|
||||
@@ -245,23 +230,14 @@
|
||||
* means do so.
|
||||
*/
|
||||
unsigned short status;
|
||||
- ioctl(dev_, METEORSTATUS, &status);
|
||||
- if(status & METEOR_STATUS_HCLK) {
|
||||
- /* No source, assume ntsc */
|
||||
+ // ioctl(dev_, METEORSTATUS, &status);
|
||||
+ if ( video_format_ == METEOR_FMT_NTSC ) {
|
||||
if(geom.rows <= NTSC_HEIGHT && geom.columns <= NTSC_WIDTH)
|
||||
geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
} else {
|
||||
- /* is it pal or ntsc? */
|
||||
- if(status & METEOR_STATUS_FIDT) {
|
||||
- /* 60 hz */
|
||||
- if(geom.rows<=NTSC_HEIGHT && geom.columns<=NTSC_WIDTH)
|
||||
- geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
- } else { /* 50 hz */
|
||||
if(geom.rows<=PAL_HEIGHT && geom.columns<=PAL_WIDTH)
|
||||
geom.oformat |= METEOR_GEO_EVEN_ONLY;
|
||||
}
|
||||
- }
|
||||
-
|
||||
if(ioctl(dev_, METEORSETGEO, &geom) < 0)
|
||||
perror("vic: METERSETGEO: ");
|
||||
}
|
||||
@@ -326,7 +302,7 @@
|
||||
void MeteorGrabber::fps(int f)
|
||||
{
|
||||
u_short met_fps = (u_short)f;
|
||||
- (void)ioctl(dev_, METEORSFPS, &met_fps);
|
||||
+ // (void)ioctl(dev_, METEORSFPS, &met_fps);
|
||||
|
||||
Grabber::fps(f);
|
||||
}
|
||||
@@ -367,6 +343,28 @@
|
||||
}
|
||||
return (TCL_OK);
|
||||
}
|
||||
+ if (strcmp(argv[1], "freeze") == 0) {
|
||||
+ int cmd = METEOR_CAP_CONTINOUS ;
|
||||
+ if ( atoi(argv[2]) != 0 )
|
||||
+ cmd = METEOR_CAP_STOP_CONT;
|
||||
+ ioctl(dev_, METEORCAPTUR, (char*)&cmd);
|
||||
+ return (TCL_OK);
|
||||
+ }
|
||||
+ if (strcmp(argv[1], "chan") == 0) {
|
||||
+ int p = port_;
|
||||
+ int c = atoi(argv[2]);
|
||||
+ if (c > 0 && c < 199)
|
||||
+ p = METEOR_INPUT_DEV1 ;
|
||||
+ else
|
||||
+ p = METEOR_INPUT_DEV0 ;
|
||||
+ if (p != port_) {
|
||||
+ port_ = p;
|
||||
+ ioctl(dev_, METEORSINPUT, &port_);
|
||||
+ }
|
||||
+ if (p == METEOR_INPUT_DEV1)
|
||||
+ ioctl(dev_, TVTUNER_SETCHNL, &c);
|
||||
+ return (TCL_OK);
|
||||
+ }
|
||||
if (strcmp(argv[1], "format") == 0 ||
|
||||
strcmp(argv[1], "type") == 0) {
|
||||
if (strcmp(argv[2], "auto") == 0)
|
||||
@@ -437,7 +435,7 @@
|
||||
if (strcmp(argv[1], "brightness") == 0) {
|
||||
u_char val;
|
||||
ioctl(dev_, METEORGBRIG, &val);
|
||||
- tcl.resultf("%d", (int)val);
|
||||
+ tcl.resultf("%d", (unsigned int)val);
|
||||
return (TCL_OK);
|
||||
}
|
||||
if (strcmp(argv[1], "contrast") == 0) {
|
||||
@@ -507,10 +505,10 @@
|
||||
return 0;
|
||||
|
||||
int istride = inw_ * 2;
|
||||
- suppress((u_char*)pyuv_, istride);
|
||||
- saveblks((u_char*)pyuv_, istride);
|
||||
+ suppress((u_char*)pyuv_, istride); // compute which ones to send
|
||||
+ saveblks((u_char*)pyuv_, istride); // save copied blocks
|
||||
u_int32_t ts = media_ts();
|
||||
- YuvFrame f(ts, frame_, crvec_, outw_, outh_);
|
||||
+ YuvFrame f(ts, frame_, crvec_, outw_, outh_); // new obj.
|
||||
return (target_->consume(&f));
|
||||
}
|
||||
|
||||
@@ -724,6 +722,7 @@
|
||||
u_char* chm = lum + off;
|
||||
off >>= 2;
|
||||
|
||||
+int to_send = 0 ;
|
||||
crv += vstart_ * blkw_ + hstart_;
|
||||
lum += vstart_ * outw_ * 16 + hstart_ * 16;
|
||||
chm += vstart_ * (outw_ >> 1) * 8 + hstart_ * 8;
|
||||
@@ -734,9 +733,10 @@
|
||||
const u_char* nin = in;
|
||||
for (int x = hstart_; x < hstop_; ++x) {
|
||||
int s = *crv++;
|
||||
- if ((s & CR_SEND) != 0)
|
||||
+ if ((s & CR_SEND) != 0) {
|
||||
saveblk(in, lum, chm, chm + off, outw_, is);
|
||||
-
|
||||
+ to_send++ ;
|
||||
+ }
|
||||
in += 32;
|
||||
lum += 16;
|
||||
chm += 8;
|
||||
@@ -746,4 +746,5 @@
|
||||
chm += 7 * (outw_ >> 1) + skip * 8;
|
||||
in = nin + 16 * is;
|
||||
}
|
||||
+ // fprintf(stderr, "this time send %d\n", to_send);
|
||||
}
|
||||
diff -ubwr ./grabber.cc /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber.cc
|
||||
--- ./grabber.cc Tue Feb 6 00:02:00 1996
|
||||
--- grabber.cc Tue Feb 6 00:02:00 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber.cc Fri Apr 10 15:36:42 1998
|
||||
@@ -69,6 +69,7 @@
|
||||
hstart_(0), hstop_(0),
|
||||
@ -231,31 +20,8 @@ diff -ubwr ./grabber.cc /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/
|
||||
if (strcmp(argv[1], "fps") == 0) {
|
||||
/*XXX assume value in range */
|
||||
fps(atoi(argv[2]));
|
||||
@@ -194,11 +199,14 @@
|
||||
* favoring the more restrictive metric. If we're more than
|
||||
* 200ms behind (e.g., the cpu is saturated or we've been
|
||||
* suspended), give up and reset the frame clock.
|
||||
+ * The argument passed is the number of bytes transmitted.
|
||||
*/
|
||||
double Grabber::tick(int n)
|
||||
{
|
||||
+ // how much it took to send the data (microseconds)
|
||||
double frametime = 8e6 * double(n) / double(bps_);
|
||||
if (frametime < frametime_) {
|
||||
+ // took less than one frame...
|
||||
if (frametime * 2. < frametime_)
|
||||
delta_ += (frametime - delta_) * .25;
|
||||
else
|
||||
@@ -207,6 +215,7 @@
|
||||
} else
|
||||
delta_ = frametime;
|
||||
|
||||
+ // when to get next frame (not earlier than now!
|
||||
frameclock_ += frametime;
|
||||
double now = gettimeofday();
|
||||
double delta = frameclock_ - now;
|
||||
diff -ubwr ./grabber.h /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber.h
|
||||
--- ./grabber.h Tue Feb 6 00:02:00 1996
|
||||
--- grabber.h Tue Feb 6 00:02:00 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/grabber.h Fri Apr 10 15:37:28 1998
|
||||
@@ -87,6 +87,7 @@
|
||||
int vstop_;
|
||||
@ -290,29 +56,8 @@ diff -ubwr ./grabber.h /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/g
|
||||
center = 1; \
|
||||
} \
|
||||
diff -ubwr ./ui-ctrlmenu.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-ctrlmenu.tcl
|
||||
--- ./ui-ctrlmenu.tcl Thu Jun 27 01:27:48 1996
|
||||
--- ui-ctrlmenu.tcl Thu Jun 27 01:27:48 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-ctrlmenu.tcl Fri Apr 10 16:39:04 1998
|
||||
@@ -124,6 +124,7 @@
|
||||
catch "wm resizable $w false false"
|
||||
|
||||
frame $w.session
|
||||
+ # luigi - move next 2 lines to ui-main
|
||||
frame $w.cb
|
||||
build.xmit $w.cb
|
||||
frame $w.encoder
|
||||
@@ -139,9 +140,12 @@
|
||||
-relief raised -anchor c \
|
||||
-command "toggle_window $w" -font [mediumfont]
|
||||
|
||||
+ # luigi $w.cb goes into main menu
|
||||
pack $w.cb $w.encoder $w.decoder $w.session -padx 6 -fill x
|
||||
+ # pack $w.encoder $w.decoder $w.session -padx 6 -fill x
|
||||
pack $w.dismiss -anchor c -pady 4
|
||||
|
||||
+ # luigi - move next 3 lines to ui-main (must check something)
|
||||
if [have_transmit_permission] {
|
||||
selectInitialDevice
|
||||
}
|
||||
@@ -390,11 +394,15 @@
|
||||
-relief raised -command transmit \
|
||||
-anchor w -variable transmitButtonState -font $f \
|
||||
@ -370,15 +115,6 @@ diff -ubwr ./ui-ctrlmenu.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-l
|
||||
|
||||
insert_grabber_panel [$device nickname]
|
||||
|
||||
@@ -765,7 +780,7 @@
|
||||
-value secam -variable inputType -font $f
|
||||
|
||||
global inputType typeButton
|
||||
- set inputType auto
|
||||
+ set inputType pal ; # auto
|
||||
set typeButton $w
|
||||
}
|
||||
|
||||
@@ -774,7 +789,8 @@
|
||||
build.encoder_options $w.options
|
||||
build.device $w.device
|
||||
@ -400,7 +136,7 @@ diff -ubwr ./ui-ctrlmenu.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-l
|
||||
setFillRate
|
||||
update
|
||||
diff -ubwr ./ui-grabber.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-grabber.tcl
|
||||
--- ./ui-grabber.tcl Fri Jun 21 04:39:35 1996
|
||||
--- ui-grabber.tcl Fri Jun 21 04:39:35 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-grabber.tcl Fri Apr 10 13:54:42 1998
|
||||
@@ -39,65 +39,93 @@
|
||||
# called foo-1, foo-2, etc. and you'll only need build.foo
|
||||
@ -672,7 +408,7 @@ diff -ubwr ./ui-grabber.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-lu
|
||||
+
|
||||
+### end of file ###
|
||||
diff -ubwr ./ui-resource.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-resource.tcl
|
||||
--- ./ui-resource.tcl Wed Apr 3 02:33:56 1996
|
||||
--- ui-resource.tcl Wed Apr 3 02:33:56 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-resource.tcl Fri Apr 10 21:11:56 1998
|
||||
@@ -140,7 +140,7 @@
|
||||
option add Vic.useHardwareDecode false startupFile
|
||||
@ -683,24 +419,3 @@ diff -ubwr ./ui-resource.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-l
|
||||
option add Vic.siteDropTime "300" startupFile
|
||||
|
||||
#
|
||||
diff -ubwr ./ui-util.tcl /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-util.tcl
|
||||
--- ./ui-util.tcl Tue Feb 6 00:02:20 1996
|
||||
+++ /home/old_wd0f/ports/mbone/vic/work.luigi/vic-2.8-luigi/ui-util.tcl Fri Apr 10 20:49:56 1998
|
||||
@@ -64,7 +64,7 @@
|
||||
global created$w
|
||||
if { ! [info exists created$w] } {
|
||||
set created$w 1
|
||||
- wm transient $w .
|
||||
+ # wm transient $w .
|
||||
update idletasks
|
||||
set x [winfo rootx .]
|
||||
set y [winfo rooty .]
|
||||
@@ -103,7 +103,7 @@
|
||||
}
|
||||
set title [resource iconPrefix]$title
|
||||
wm withdraw $w
|
||||
- wm transient $w .
|
||||
+ # wm transient $w .
|
||||
wm title $w $title
|
||||
wm iconname $w $title
|
||||
bind $w <Enter> "focus $w"
|
||||
|
Loading…
Reference in New Issue
Block a user