aboutsummaryrefslogtreecommitdiff
path: root/multimedia/pwcview
diff options
context:
space:
mode:
authorKoop Mast <kwm@FreeBSD.org>2010-01-16 20:49:04 +0000
committerKoop Mast <kwm@FreeBSD.org>2010-01-16 20:49:04 +0000
commite64511508d2549769f9b9e0fbe31cbf4e64cf877 (patch)
treed51fe6ebf0ed0b2d0883ba2104bc7de418854d09 /multimedia/pwcview
parenta878479bcc8dd4cbbc46ee76a751a26f39d0f9ae (diff)
downloadports-e64511508d2549769f9b9e0fbe31cbf4e64cf877.tar.gz
ports-e64511508d2549769f9b9e0fbe31cbf4e64cf877.zip
Notes
Diffstat (limited to 'multimedia/pwcview')
-rw-r--r--multimedia/pwcview/Makefile41
-rw-r--r--multimedia/pwcview/distinfo3
-rw-r--r--multimedia/pwcview/files/patch-pwcview.c442
-rw-r--r--multimedia/pwcview/pkg-descr5
-rw-r--r--multimedia/pwcview/pkg-plist2
5 files changed, 493 insertions, 0 deletions
diff --git a/multimedia/pwcview/Makefile b/multimedia/pwcview/Makefile
new file mode 100644
index 000000000000..870158b2a344
--- /dev/null
+++ b/multimedia/pwcview/Makefile
@@ -0,0 +1,41 @@
+# New ports collection makefile for: pwcview
+# Date created: 13 January 2010
+# Whom: Andrew Thompson <thompsa@FreeBSD.org>
+#
+# $FreeBSD$
+#
+
+PORTNAME= pwcview
+PORTVERSION= 1.4.1
+CATEGORIES= multimedia
+MASTER_SITES= http://raaf.atspace.org/ \
+ http://www.bsd-geek.de/FreeBSD/distfiles/ \
+ ${MASTER_SITE_LOCAL}
+MASTER_SITE_SUBDIR= miwi
+
+MAINTAINER= hselasky@FreeBSD.org
+COMMENT= The Video4Linux PWC webcam viewer
+
+BUILD_DEPENDS= ${LOCALBASE}/include/linux/videodev.h:${PORTSDIR}/multimedia/v4l_compat
+LIB_DEPENDS= jpeg.10:${PORTSDIR}/graphics/jpeg \
+ v4l1.0:${PORTSDIR}/multimedia/libv4l
+
+CONFLICTS= pwcbsd-[0-9]*
+
+USE_SDL= sdl
+MAN1= pwcview.1
+
+WRKSRC= ${WRKDIR}/${PORTNAME}
+
+.include <bsd.port.pre.mk>
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|-ljpeg|-ljpeg -lv4l1|g' \
+ -e 's|sdl-config|${SDL_CONFIG}|g' ${WRKSRC}/Makefile
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/pwcview ${PREFIX}/bin
+ ${INSTALL_PROGRAM} ${WRKSRC}/pwcsnap ${PREFIX}/bin
+ ${INSTALL_MAN} ${WRKSRC}/${MAN1} ${PREFIX}/man/man1
+
+.include <bsd.port.post.mk>
diff --git a/multimedia/pwcview/distinfo b/multimedia/pwcview/distinfo
new file mode 100644
index 000000000000..52d72fa19e4e
--- /dev/null
+++ b/multimedia/pwcview/distinfo
@@ -0,0 +1,3 @@
+MD5 (pwcview-1.4.1.tar.gz) = a858da696f1d6ad70e16073310c8dfb8
+SHA256 (pwcview-1.4.1.tar.gz) = 91d05dd4f9fdfab315ea31e640f60081ae59069aaca221a2965dd3243a695802
+SIZE (pwcview-1.4.1.tar.gz) = 21263
diff --git a/multimedia/pwcview/files/patch-pwcview.c b/multimedia/pwcview/files/patch-pwcview.c
new file mode 100644
index 000000000000..19691c8f2e19
--- /dev/null
+++ b/multimedia/pwcview/files/patch-pwcview.c
@@ -0,0 +1,442 @@
+--- pwcview.c.orig 2010-01-14 18:40:49.000000000 +0100
++++ pwcview.c 2010-01-14 18:57:19.000000000 +0100
+@@ -37,11 +37,8 @@
+ #ifndef NOGUI
+ #include <SDL.h>
+ #endif
+-#ifdef __FreeBSD__
+-#include "videodev.h"
+-#else
++#include <libv4l1.h>
+ #include <linux/videodev.h>
+-#endif
+ #include "pwc-ioctl.h"
+ #include "pixels.h"
+
+@@ -80,7 +77,7 @@
+ int fps;
+ struct video_window vw;
+
+- if(ioctl(fd,VIDIOCGWIN,&vw) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCGWIN,&vw) == -1) {
+ perror("Failed to get current framerate");
+ return -1;
+ }
+@@ -90,9 +87,9 @@
+ if((dir == -1 && fps >= 9) ||(dir == 1 && fps <= 25)) {
+ fps += dir == -1 ? -5 : 5;
+ vw.flags = fps << PWC_FPS_SHIFT;
+- if(ioctl(fd,VIDIOCSWIN,&vw) == -1)
++ if(v4l1_ioctl(fd,VIDIOCSWIN,&vw) == -1)
+ fprintf(stderr,"Failed to set framerate to %d fps: %s\n",fps,strerror(errno));
+- if(ioctl(fd,VIDIOCGWIN,&vw) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCGWIN,&vw) == -1) {
+ perror("Failed to get new framerate");
+ return -1;
+ }
+@@ -106,16 +103,16 @@
+ {
+ int qual;
+
+- if(ioctl(fd,VIDIOCPWCGCQUAL,&qual) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGCQUAL,&qual) == -1) {
+ perror("Failed to get current compression");
+ return -1;
+ }
+
+ if((dir == -1 && qual > 0) || (dir == 1 && qual < 3)) {
+ qual += dir == -1 ? -1 : 1;
+- if(ioctl(fd,VIDIOCPWCSCQUAL,&qual) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSCQUAL,&qual) == -1)
+ perror("Failed to set compression");
+- if(ioctl(fd,VIDIOCPWCGCQUAL,&qual) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGCQUAL,&qual) == -1) {
+ perror("Failed to get new compression");
+ return -1;
+ }
+@@ -128,16 +125,16 @@
+ {
+ struct video_picture pict;
+
+- if(ioctl(fd,VIDIOCGPICT,&pict) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCGPICT,&pict) == -1) {
+ perror("Failed to get current brightness");
+ return -1;
+ }
+
+ if((dir == -1) || (dir == 1)) {
+ pict.brightness += dir == -1 ? -512 : 512;
+- if(ioctl(fd,VIDIOCSPICT,&pict) == -1)
++ if(v4l1_ioctl(fd,VIDIOCSPICT,&pict) == -1)
+ perror("Failed to set brightness");
+- if(ioctl(fd,VIDIOCGPICT,&pict) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCGPICT,&pict) == -1) {
+ perror("Failed to get new brightness");
+ return -1;
+ }
+@@ -150,16 +147,16 @@
+ {
+ struct video_picture pict;
+
+- if(ioctl(fd,VIDIOCGPICT,&pict) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCGPICT,&pict) == -1) {
+ perror("Failed to get current contrast");
+ return -1;
+ }
+
+ if((dir == -1) || (dir == 1)) {
+ pict.contrast += dir == -1 ? -1024 : 1024;
+- if(ioctl(fd,VIDIOCSPICT,&pict) == -1)
++ if(v4l1_ioctl(fd,VIDIOCSPICT,&pict) == -1)
+ perror("Failed to set contrast");
+- if(ioctl(fd,VIDIOCGPICT,&pict) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCGPICT,&pict) == -1) {
+ perror("Failed to get new contrast");
+ return -1;
+ }
+@@ -172,16 +169,16 @@
+ {
+ struct video_picture pict;
+
+- if(ioctl(fd,VIDIOCGPICT,&pict) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCGPICT,&pict) == -1) {
+ perror("Failed to get current saturation");
+ return -1;
+ }
+
+ if((dir == -1) || (dir == 1)) {
+ pict.colour += dir == -1 ? -327 : 327;
+- if(ioctl(fd,VIDIOCSPICT,&pict) == -1)
++ if(v4l1_ioctl(fd,VIDIOCSPICT,&pict) == -1)
+ perror("Failed to set saturation");
+- if(ioctl(fd,VIDIOCGPICT,&pict) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCGPICT,&pict) == -1) {
+ perror("Failed to get new saturation");
+ return -1;
+ }
+@@ -194,16 +191,16 @@
+ {
+ struct video_picture pict;
+
+- if(ioctl(fd,VIDIOCGPICT,&pict) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCGPICT,&pict) == -1) {
+ perror("Failed to get current gamma");
+ return -1;
+ }
+
+ if((dir == -1) ||(dir == 1)) {
+ pict.whiteness += dir == -1 ? -2048 : 2048;
+- if(ioctl(fd,VIDIOCSPICT,&pict) == -1)
++ if(v4l1_ioctl(fd,VIDIOCSPICT,&pict) == -1)
+ perror("Failed to set gamma");
+- if(ioctl(fd,VIDIOCGPICT,&pict) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCGPICT,&pict) == -1) {
+ perror("Failed to get new gamma");
+ return -1;
+ }
+@@ -236,7 +233,7 @@
+ snprintf(buf,80,"gain control: %d",agc >> 10);
+ }
+
+- ioctl(fd,VIDIOCPWCSAGC,&val);
++ v4l1_ioctl(fd,VIDIOCPWCSAGC,&val);
+ return 0;
+ }
+
+@@ -263,7 +260,7 @@
+ val = shutter;
+ snprintf(buf,80,"shutter speed: %d",shutter >> 8);
+ }
+- ioctl(fd,VIDIOCPWCSSHUTTER,&val);
++ v4l1_ioctl(fd,VIDIOCPWCSSHUTTER,&val);
+ return 0;
+ }
+
+@@ -274,7 +271,7 @@
+ char *names[] = { "indoor", "outdoor", "fluorescent","manual","auto" };
+ int *val = NULL;
+
+- if(ioctl(fd,VIDIOCPWCGAWB,&wb) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGAWB,&wb) == -1) {
+ perror("Failed to get white balance");
+ return -1;
+ }
+@@ -298,10 +295,10 @@
+ *val += 256;
+ }
+
+- if(ioctl(fd,VIDIOCPWCSAWB,&wb) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSAWB,&wb) == -1)
+ perror("Failed to set white balance");
+
+- if(ioctl(fd,VIDIOCPWCGAWB,&wb) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGAWB,&wb) == -1) {
+ perror("Failed to get white balance");
+ return -1;
+ }
+@@ -317,16 +314,16 @@
+ {
+ struct pwc_wb_speed speed;
+
+- if(ioctl(fd,VIDIOCPWCGAWBSPEED,&speed) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGAWBSPEED,&speed) == -1) {
+ perror("Failed to get current awb speed");
+ return -1;
+ }
+
+ if((dir == -1) || (dir == 1)) {
+ speed.control_speed += dir == -1 ? -2032 : 2032;
+- if(ioctl(fd,VIDIOCPWCSAWBSPEED,&speed) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSAWBSPEED,&speed) == -1)
+ perror("Failed to set awb speed");
+- if(ioctl(fd,VIDIOCPWCGAWBSPEED,&speed) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGAWBSPEED,&speed) == -1) {
+ perror("Failed to get new awb speed");
+ return -1;
+ }
+@@ -339,16 +336,16 @@
+ {
+ struct pwc_wb_speed speed;
+
+- if(ioctl(fd,VIDIOCPWCGAWBSPEED,&speed) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGAWBSPEED,&speed) == -1) {
+ perror("Failed to get current awb delay");
+ return -1;
+ }
+
+ if((dir == -1) || (dir == 1)) {
+ speed.control_delay += dir == -1 ? -1024 : 1024;
+- if(ioctl(fd,VIDIOCPWCSAWBSPEED,&speed) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSAWBSPEED,&speed) == -1)
+ perror("Failed to set awb delay");
+- if(ioctl(fd,VIDIOCPWCGAWBSPEED,&speed) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGAWBSPEED,&speed) == -1) {
+ perror("Failed to get new awb delay");
+ return -1;
+ }
+@@ -377,13 +374,13 @@
+ else
+ val = contour;
+
+- if(ioctl(fd,VIDIOCPWCSCONTOUR,&val) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSCONTOUR,&val) == -1)
+ perror("Failed to set contour");
+
+ if(contourmode == 1)
+ snprintf(buf,80,"contour: auto");
+ else {
+- if(ioctl(fd,VIDIOCPWCGCONTOUR,&contour) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGCONTOUR,&contour) == -1) {
+ perror("Failed to get contour");
+ return -1;
+ }
+@@ -396,17 +393,17 @@
+ {
+ int dynnoise;
+
+- if(ioctl(fd,VIDIOCPWCGDYNNOISE,&dynnoise) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGDYNNOISE,&dynnoise) == -1) {
+ perror("Failed to get current dynamic noise reduction mode");
+ return -1;
+ }
+ if(dir == 2) {
+ if(++dynnoise == 4)
+ dynnoise = 0;
+- if(ioctl(fd,VIDIOCPWCSDYNNOISE,&dynnoise) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSDYNNOISE,&dynnoise) == -1)
+ perror("Failed to set dynamic noise reduction mode");
+
+- if(ioctl(fd,VIDIOCPWCGDYNNOISE,&dynnoise) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGDYNNOISE,&dynnoise) == -1) {
+ perror("Failed to get new dynamic noise reduction mode");
+ return -1;
+ }
+@@ -419,16 +416,16 @@
+ {
+ int backlight;
+
+- if(ioctl(fd,VIDIOCPWCGBACKLIGHT,&backlight) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGBACKLIGHT,&backlight) == -1) {
+ perror("Failed to get backlight mode");
+ return -1;
+ }
+ if(dir == 2) {
+ backlight = !backlight;
+- if(ioctl(fd,VIDIOCPWCSBACKLIGHT,&backlight) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSBACKLIGHT,&backlight) == -1)
+ perror("Failed to set backlight mode");
+
+- if(ioctl(fd,VIDIOCPWCGBACKLIGHT,&backlight) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGBACKLIGHT,&backlight) == -1) {
+ perror("Failed to get new backlight mode");
+ return -1;
+ }
+@@ -441,16 +438,16 @@
+ {
+ int flicker;
+
+- if(ioctl(fd,VIDIOCPWCGFLICKER,&flicker) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGFLICKER,&flicker) == -1) {
+ perror("Failed to get flicker mode");
+ return -1;
+ }
+ if(dir == 2) {
+ flicker = !flicker;
+- if(ioctl(fd,VIDIOCPWCSFLICKER,&flicker) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSFLICKER,&flicker) == -1)
+ perror("Failed to set flicker mode");
+
+- if(ioctl(fd,VIDIOCPWCGFLICKER,&flicker) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGFLICKER,&flicker) == -1) {
+ perror("Failed to get new flicker mode");
+ return -1;
+ }
+@@ -463,16 +460,16 @@
+ {
+ int colour;
+
+- if(ioctl(fd,VIDIOCPWCGCOLOUR,&colour) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGCOLOUR,&colour) == -1) {
+ perror("Failed to get colour mode");
+ return -1;
+ }
+ if(dir == 2) {
+ colour = !colour;
+- if(ioctl(fd,VIDIOCPWCSCOLOUR,&colour) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSCOLOUR,&colour) == -1)
+ perror("Failed to set colour mode");
+
+- if(ioctl(fd,VIDIOCPWCGCOLOUR,&colour) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCPWCGCOLOUR,&colour) == -1) {
+ perror("Failed to get new colour mode");
+ return -1;
+ }
+@@ -487,7 +484,7 @@
+ snprintf(buf,80,"save user settings");
+ }
+ else if(dir == 2) {
+- if(ioctl(fd,VIDIOCPWCSUSER) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSUSER) == -1)
+ snprintf(buf,80,"Error: %s",strerror(errno));
+ else
+ snprintf(buf,80,"User settings saved");
+@@ -506,7 +503,7 @@
+ snprintf(buf,80,"restore user settings");
+ }
+ else if(dir == 2) {
+- if(ioctl(fd,VIDIOCPWCRUSER) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCRUSER) == -1)
+ snprintf(buf,80,"Error: %s",strerror(errno));
+ else
+ snprintf(buf,80,"User settings restored");
+@@ -523,7 +520,7 @@
+ snprintf(buf,80,"restore factory settings");
+ }
+ else if(dir == 2) {
+- if(ioctl(fd,VIDIOCPWCFACTORY) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCFACTORY) == -1)
+ snprintf(buf,80,"Error: %s",strerror(errno));
+ else
+ snprintf(buf,80,"Factory settings restored");
+@@ -537,12 +534,12 @@
+ struct pwc_leds led;
+ int ledon_handler(int fd, int dir, char *buf)
+ {
+- ioctl(fd,VIDIOCPWCGLED,&led);
++ v4l1_ioctl(fd,VIDIOCPWCGLED,&led);
+ if((dir == -1) || (dir == 1)) {
+ led.led_on += (dir == -1) ? -100 : 100;
+ if(led.led_on < 0)
+ led.led_on = 0;
+- if(ioctl(fd,VIDIOCPWCSLED,&led) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSLED,&led) == -1)
+ perror("Failed to set leds");
+ }
+ snprintf(buf,80,"led on: %d", led.led_on);
+@@ -551,12 +548,12 @@
+
+ int ledoff_handler(int fd, int dir, char *buf)
+ {
+- ioctl(fd,VIDIOCPWCGLED,&led);
++ v4l1_ioctl(fd,VIDIOCPWCGLED,&led);
+ if((dir == -1) || (dir == 1)) {
+ led.led_off += (dir == -1) ? -100 : 100;
+ if(led.led_off < 0)
+ led.led_off = 0;
+- if(ioctl(fd,VIDIOCPWCSLED,&led) == -1)
++ if(v4l1_ioctl(fd,VIDIOCPWCSLED,&led) == -1)
+ perror("Failed to set leds");
+ }
+ snprintf(buf,80,"led off: %d", led.led_off);
+@@ -837,6 +834,8 @@
+ jdata[1] = jimage[1];
+ jdata[2] = jimage[2];
+
++ cinfo->raw_data_in = TRUE;
++ cinfo->do_fancy_downsampling = FALSE;
+ jpeg_stdio_dest(cinfo, outfile);
+ jpeg_start_compress(cinfo, TRUE);
+
+@@ -1218,7 +1217,7 @@
+ vw.flags = fps << PWC_FPS_SHIFT;
+ imgsize = (vw.width * vw.height * 3)/2;
+
+- if((fd = open(device, O_RDONLY)) < 0) {
++ if((fd = v4l1_open(device, O_RDONLY)) < 0) {
+ if(errno == EBUSY)
+ fprintf(stderr,"Failed to access webcam: Device in use\n");
+ else {
+@@ -1236,17 +1235,17 @@
+ }
+ fcntl(fd,F_SETFD,FD_CLOEXEC);
+
+- if(ioctl(fd,VIDIOCGPICT,&vp) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCGPICT,&vp) == -1) {
+ perror("Failed to get current picture info");
+ exit(1);
+ }
+ vp.palette = VIDEO_PALETTE_YUV420P;
+- if(ioctl(fd,VIDIOCSPICT,&vp) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCSPICT,&vp) == -1) {
+ perror("Failed to set palette to YUV420P");
+ exit(1);
+ }
+
+- if(ioctl(fd,VIDIOCSWIN,&vw) == -1) {
++ if(v4l1_ioctl(fd,VIDIOCSWIN,&vw) == -1) {
+ fprintf(stderr,"Failed to set webcam to: %dx%d (%s) at %d fps (%s)\n",
+ vw.width,vw.height,sizes[i].name,fps,strerror(errno));
+ exit(1);
+@@ -1254,12 +1253,12 @@
+ fprintf(stderr,"Webcam set to: %dx%d (%s) at %d fps\n",vw.width,vw.height,sizes[i].name,fps);
+
+ if(headless && snapcnt == 0 && motionrecord == 0) { /* Done */
+- close(fd);
++ v4l1_close(fd);
+ exit(0);
+ }
+ if(snapbtn) {
+ snapbtn = 0;
+- if(ioctl(fd,VIDIOCPWCPROBE,&probe) != -1 &&
++ if(v4l1_ioctl(fd,VIDIOCPWCPROBE,&probe) != -1 &&
+ probe.type >= 720 && probe.type <= 740)
+ snapbtn = 1;
+ }
+@@ -1327,7 +1326,7 @@
+ timerid = SDL_AddTimer(interval,cbtimer,NULL);
+ }
+ #endif
+- while (frozen || ((size = read(fd,y,imgsize)) > 0) || (size == -1 && errno == EINTR)) {
++ while (frozen || ((size = v4l1_read(fd,y,imgsize)) > 0) || (size == -1 && errno == EINTR)) {
+ int snap = y[0] & 0x01;
+ if(!frozen && size != imgsize) {
+ if(size != -1) {
+@@ -1498,7 +1497,7 @@
+ if(size != 0)
+ perror("Error reading from webcam");
+
+- close(fd);
++ v4l1_close(fd);
+ jpeg_destroy_compress(&cinfo);
+ return 0;
+ }
diff --git a/multimedia/pwcview/pkg-descr b/multimedia/pwcview/pkg-descr
new file mode 100644
index 000000000000..fdc99c4aaf77
--- /dev/null
+++ b/multimedia/pwcview/pkg-descr
@@ -0,0 +1,5 @@
+An application that you can use to view the video stream of your webcam, alter
+various settings of your webcam, take jpeg snapshots or output raw YUV420P data
+to stdout when motion is detected.
+
+WWW: http://raaf.atspace.org/
diff --git a/multimedia/pwcview/pkg-plist b/multimedia/pwcview/pkg-plist
new file mode 100644
index 000000000000..b89edf6318f9
--- /dev/null
+++ b/multimedia/pwcview/pkg-plist
@@ -0,0 +1,2 @@
+bin/pwcview
+bin/pwcsnap