Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Feb 2005 13:44:47 +0100
From:      =?ISO-8859-1?Q?Lluis_L=F3pez?= <cronopiolopez@gmail.com>
To:        freebsd-multimedia@freebsd.org
Subject:   Patch pvr250 (switch between profiles) DEFINITIVE VERSION (I hope)
Message-ID:  <8f8eb53e050214044450fbe8b@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
------=_Part_264_9883545.1108385087845
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline



------=_Part_264_9883545.1108385087845
Content-Type: text/plain; name="patch-pvr250.txt"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="patch-pvr250.txt"

First, I'm sorry for the "spam attack" (I'm feel some stupid send and=20
send messages), but think that is a ineresting patch.

The application setsize allows switch between 3 profiles (determined
for format size). Next patch allows switch between 8 profiles using
hardware ioctl's.

NOTE: Values for profiles are select for me,  I'm not an expert, if
somebody have more knowledge (or datasheet of chip) change source it's
easy (feeback is always welcome and copy of datasheet too). For
exemple the TS profile don't playback well, some losses in audio and
video (grab work without aparent problem), but i suposse it's very
useful for streaming machines. Other example is MPEG1 profile: don't
playback well, his values are selected for works with dvdauthor (only
accept 48 Khz audio streams), economize time in work encoding process.
Or MPEG2 profile select for best quality without losses with mplayer
playback (with -cache 8192, of course).

For apply this patch follow next steps:
1.-
#cd /usr/ports/multimedia/pvr250/ && make clean && make extract
2.-
Copy the enclosed files (see bellow)  pvr250-setprofile, patch_cxm_c
and  patch_modules_cxm_cxm_Makefile in work/ and ioctl_meteor_compat.h
in work/dev/cxm/
3.-
Apply the patches:
#patch < work/patch_cxm_c && patch <work/patch_modules_cxm_cxm_Makefile
4.-
Compile with:
#make

copy:
#cp work/modules/cxm/*/*.ko /boot/kernel/

and unload modules & load new modules:
# kldunload cxm
# kldunload cxm_iic
# kldload cxm_iic
# kldload cxm
NOTE: Select a channel the application pvr250-setprofile allows change
profile in cold or wih channel running, but don't initialize the
device.
5.-
compille pvr250-setprofile:
#cc -o /usr/local/bin/pvr250-setprofile work/pvr250-setprofile.c
6.-
Enjoy.
Regards, Luis L=C3=B3pez Sol=C3=A9.

LAST NOTE: Only tested in RELEGN_5 (compiled last weekend).

START FILE ENCLOSED (patch_cxm_c-file)
---8<---start-of-patch_cxm_c-file---8<------8<---
--- work/dev/cxm/cxm.c.ORIGINAL        Wed Feb  9 03:37:21 2005
+++ work/dev/cxm/cxm.c  Mon Feb 14 00:55:06 2005
@@ -69,6 +69,7 @@
#  include <dev/bktr/ioctl_bt848.h>
#endif

+
#include <sys/bus.h>
#include <sys/rman.h>

@@ -81,7 +82,7 @@
#endif

#include <dev/cxm/cxm.h>
-
+#include <dev/cxm/ioctl_meteor_compat.h>

/*
* Various supported device vendors/types and their names.
@@ -292,6 +293,240 @@
      0xe9
};

+static struct cxm_codec_profile mpeg2_ntsc_profile =3D {
+       "MPEG-2 NTSC video and MPEG audio",
+       CXM_FW_STREAM_TYPE_MPEG2_PROGRAM,
+       30,
+       720, 480, 480,
+       { 10, 12, 21 },
+       2,
+       0,
+       /*
+        * 8 Mb/s (size of BLOCKDEVICE)the best quality for realtime playba=
ck
+        * without losses and default cache size for mplayer and xine.
+        */
+       { 0, 8000000, 8192000 },
+       { 1, 15, 3},
+       /*
+        * Spatial filter =3D Manual, Temporal filter =3D Manual
+        * Median filter =3D Horizontal / Vertical
+        * Spatial filter value =3D 1, Temporal filter value =3D 4
+        */
+       { 0, 3, 1, 4 },
+       /* 48 Khz, MPEG-1 Layer II, 384 kb/s */
+       0xe9
+};
+
+static struct cxm_codec_profile mpeg2_pal_profile =3D {
+       "MPEG-2 PAL video and MPEG audio",
+       CXM_FW_STREAM_TYPE_MPEG2_PROGRAM,
+       25,
+       720, 576, 576,
+       { 6, 17, 22 },
+       2,
+       0,
+       /*
+        * 8 Mb/s (size of BLOCKDEVICE)the best quality for realtime playba=
ck
+        * without losses and default cache size for mplayer and xine.
+        */
+       { 0, 8000000, 8192000 },
+       { 1, 12, 3},
+       /*
+        * Spatial filter =3D Manual, Temporal filter =3D Manual
+        * Median filter =3D Horizontal / Vertical
+        * Spatial filter value =3D 1, Temporal filter value =3D 4
+        */
+       { 0, 3, 1, 4 },
+       /* 48 Khz, MPEG-1 Layer II, 384 kb/s */
+       0xe9
+};
+
+static struct cxm_codec_profile mpeg1_ntsc_profile =3D {
+       "MPEG-1 NTSC video and MPEG audio",
+       CXM_FW_STREAM_TYPE_MPEG1,
+       30,
+       352, 240, 480,
+       { 10, 12, 21 },
+       12,
+       0,
+       /* For store 6 h in DVD5 and 12 h in DVD9 -Ideal for series-*/
+       { 1, 2048000, 0 },
+       { 1, 15, 3},
+       /*
+        * Spatial filter =3D Manual, Temporal filter =3D Manual
+        * Median filter =3D Horizontal / Vertical
+        * Spatial filter value =3D 1, Temporal filter value =3D 4
+        */
+       { 0, 3, 1, 4 },
+       /*
+        * 48 Khz, (with 44.1 Khz dvdauthor reports WARNINGS and sync probl=
ems)
+        * MPEG-1 Layer II, 224 kb/s PROBLEMS: don't works in realtime play=
back,
+        * but is the only profile that works for store MPEG1 streams in DV=
D.
+        */
+       0xb9
+};
+
+static struct cxm_codec_profile mpeg1_pal_profile =3D {
+       "MPEG-1 PAL video and MPEG audio",
+       CXM_FW_STREAM_TYPE_MPEG1,
+       25,
+       352, 288, 576,
+       { 6, 17, 22 },
+       8,
+       0,
+       /* For store 6 h in DVD5 and 12 h in DVD9 -Ideal for series-*/
+       { 1, 2048000, 0 },
+       { 1, 12, 3},
+       /*
+        * Spatial filter =3D Manual, Temporal filter =3D Manual
+        * Median filter =3D Horizontal / Vertical
+        * Spatial filter value =3D 1, Temporal filter value =3D 4
+        */
+       { 0, 3, 1, 4 },
+       /*
+        * 48 Khz, (with 44.1 Khz dvdauthor reports WARNINGS and sync probl=
ems)
+        * MPEG-1 Layer II, 224 kb/s PROBLEMS: don't works in realtime play=
back,
+        * but is the only profile that works for store MPEG1 streams in DV=
D.
+        */
+       0xb9
+};
+
+static struct cxm_codec_profile dvd_s1_ntsc_profile =3D {
+       "MPEG-2 DVD_S1 NTSC video and MPEG audio",
+       CXM_FW_STREAM_TYPE_DVD_S1,
+       30,
+       720, 480, 480,
+       { 10, 12, 21 },
+       2,
+       0,
+       /* 4 Mb/s ~2Gb/h - Ideal for DVD5 -140 min. aprox. -*/
+       { 0, 4000000, 4096000 },
+       { 1, 15, 3},
+       /*
+        * Spatial filter =3D Manual, Temporal filter =3D Manual
+        * Median filter =3D Horizontal / Vertical
+        * Spatial filter value =3D 1, Temporal filter value =3D 4
+        */
+       { 0, 3, 1, 4 },
+       /* 48 Khz, MPEG-1 Layer II, 384 kb/s */
+       0xe9
+};
+
+static struct cxm_codec_profile dvd_s1_pal_profile =3D {
+       "MPEG-2 DVD PAL video and MPEG audio",
+       CXM_FW_STREAM_TYPE_DVD_S1,
+       25,
+       720, 576, 576,
+       { 6, 17, 22 },
+       2,
+       0,
+       /* 4 Mb/s ~2Gb/h - Ideal for DVD5 -140 min. aprox. -*/
+       { 0, 4000000, 4096000 },
+       { 1, 12, 3},
+       /*
+        * Spatial filter =3D Manual, Temporal filter =3D Manual
+        * Median filter =3D Horizontal / Vertical
+        * Spatial filter value =3D 1, Temporal filter value =3D 4
+        */
+       { 0, 3, 1, 4 },
+       /* 48 Khz, MPEG-1 Layer II, 384 kb/s */
+       0xe9
+};
+
+static struct cxm_codec_profile dvd_s2_ntsc_profile =3D {
+       "MPEG-2 DVD_S2 NTSC video and MPEG audio",
+       CXM_FW_STREAM_TYPE_DVD_S2,
+       30,
+       720, 480, 480,
+       { 10, 12, 21 },
+       2,
+       0,
+       /*
+        * 2 Mb/s peak ~1Gb/h For store 6 h in DVD5 and 12 h in DVD9 -Ideal=
 for series-
+        */
+       { 0, 2000000, 2048000 },
+       { 1, 15, 3},
+       /*
+        * Spatial filter =3D Manual, Temporal filter =3D Manual
+        * Median filter =3D Horizontal / Vertical
+        * Spatial filter value =3D 1, Temporal filter value =3D 4
+        */
+       { 0, 3, 1, 4 },
+       /* 48 Khz, MPEG-1 Layer II, 224 kb/s */
+       0xb9
+};
+
+static struct cxm_codec_profile dvd_s2_pal_profile =3D {
+       "MPEG-2 DVD PAL video and MPEG audio",
+       CXM_FW_STREAM_TYPE_DVD_S2,
+       25,
+       720, 576, 576,
+       { 6, 17, 22 },
+       2,
+       0,
+       /*
+        * 2 Mb/s peak ~1Gb/h For store 6 h in DVD5 and 12 h in DVD9-Ideal =
for series-
+        */
+       { 0, 2000000, 2048000 },
+       { 1, 12, 3},
+       /*
+        * Spatial filter =3D Manual, Temporal filter =3D Manual
+        * Median filter =3D Horizontal / Vertical
+        * Spatial filter value =3D 1, Temporal filter value =3D 4
+        */
+       { 0, 3, 1, 4 },
+       /* 48 Khz, MPEG-1 Layer II, 224 kb/s */
+       0xb9
+};
+
+static struct cxm_codec_profile mpeg2_ts_ntsc_profile =3D {
+       "MPEG-2 NTSC video and MPEG audio",
+       CXM_FW_STREAM_TYPE_MPEG2_TS,
+       30,
+       720, 480, 480,
+       { 10, 12, 21 },
+       2,
+       0,
+       /*
+        * Unknow good values. I don't have the datasheet.
+        * ONLY FOR TEST.
+        */
+       { 0, 6000000, 6144000 },
+       { 1, 15, 3},
+       /*
+        * Spatial filter =3D Manual, Temporal filter =3D Manual
+        * Median filter =3D Horizontal / Vertical
+        * Spatial filter value =3D 1, Temporal filter value =3D 4
+        */
+       { 0, 3, 1, 4 },
+       /* 48 Khz, MPEG-1 Layer II, 384 kb/s */
+       0xe9
+};
+
+static struct cxm_codec_profile mpeg2_ts_pal_profile =3D {
+       "MPEG-2 PAL video and MPEG audio",
+       CXM_FW_STREAM_TYPE_MPEG2_TS,
+       25,
+       720, 576, 576,
+       { 6, 17, 22 },
+       2,
+       0,
+       /*
+        * Unknow good values. I don't have the datasheet.
+        * ONLY FOR TEST.
+        */
+       { 0, 6000000, 6144000 },
+       { 1, 12, 3},
+       /*
+        * Spatial filter =3D Manual, Temporal filter =3D Manual
+        * Median filter =3D Horizontal / Vertical
+        * Spatial filter value =3D 1, Temporal filter value =3D 4
+        */
+       { 0, 3, 1, 4 },
+       /* 48 Khz, MPEG-1 Layer II, 384 kb/s */
+       0xe9
+};
+
static const struct cxm_codec_profile
*codec_profiles[] =3D {
      &vcd_ntsc_profile,
@@ -299,7 +534,17 @@
      &svcd_ntsc_profile,
      &svcd_pal_profile,
      &dvd_ntsc_profile,
-       &dvd_pal_profile
+       &dvd_pal_profile,
+       &mpeg2_ntsc_profile,
+       &mpeg2_pal_profile,
+       &mpeg1_ntsc_profile,
+       &mpeg1_pal_profile,
+       &dvd_s1_ntsc_profile,
+       &dvd_s1_pal_profile,
+       &dvd_s2_ntsc_profile,
+       &dvd_s2_pal_profile,
+       &mpeg2_ts_ntsc_profile,
+       &mpeg2_ts_pal_profile
};

@@ -801,7 +1046,8 @@

              for (i =3D 0; i < NUM_ELEMENTS(codec_profiles); i++)
                      if (codec_profiles[i]->fps =3D=3D fps
-                           && codec_profiles[i]->width =3D=3D sc->profile-=
>width)
+                           && codec_profiles[i]->width =3D=3D sc->profile-=
>width
+                               && codec_profiles[i]->stream_type =3D=3Dsc-=
>profile->stream_type)
                              break;

              if (i >=3D NUM_ELEMENTS(codec_profiles))
@@ -2278,6 +2524,7 @@
      enum cxm_source source;
      struct bktr_capture_area *cap;
      struct bktr_remote *remote;
+       struct meteor_geomet *my_oformat;
      intrmask_t      s;

      unit =3D UNIT( minor(dev) );
@@ -2848,6 +3095,42 @@
              remote =3D (struct bktr_remote *)arg;
              if (cxm_ir_key(sc, (char *)remote, sizeof(*remote)) < 0)
                      return ENXIO;
+               break;
+
+
+/* My ioctl's for switch between profiles*/
+       case METEORGETGEO:
+               my_oformat =3D (struct meteor_geomet *)arg;
+               memset (my_oformat, 0, sizeof (*my_oformat));
+               my_oformat->rows =3D 0;
+               my_oformat->columns =3D 0;
+               my_oformat->frames =3D 0;
+               my_oformat->oformat =3D sc->profile->stream_type;
+               break;
+
+       case METEORSETGEO:
+               if (sc->encoding)
+                       return EBUSY;
+
+
+               my_oformat =3D (struct meteor_geomet *)arg;
+                               if (my_oformat->rows || my_oformat->columns
+                   || my_oformat->frames)
+                       return EINVAL;
+
+               /*
+                * Setting the  stream type has the side effect of
+                * chosing between the VCD, SVCD, and DVD profiles.
+                */
+
+               for (i =3D 0; i < NUM_ELEMENTS(codec_profiles); i++)
+                       if (codec_profiles[i]->stream_type =3D=3D my_oforma=
t->oformat)
+                               break;
+
+               if (i >=3D NUM_ELEMENTS(codec_profiles))
+                       return EINVAL;
+
+               sc->profile =3D codec_profiles[i];
              break;

      default:

---8<---end-of-patch_cxm_c-file---8<------8<---

NEXT FILE (patch_modules_cxm_cxm_Makefile)
---8<---start-of-patch_modules_cxm_cxm_Makefile--file--8<
--- work/modules/cxm/cxm/Makefile.ORIGINAL      Sun Feb  6 01:38:54 2005
+++ work/modules/cxm/cxm/Makefile       Wed Feb  9 05:17:27 2005
@@ -1,7 +1,7 @@
.PATH: ${.CURDIR}/../../../dev/cxm
KMOD   =3D cxm
SRCS   =3D cxm.c cxm.h cxm_dec_fw.c cxm_enc_fw.c cxm_audio.c cxm_eeprom.c \
-         cxm_ir.c cxm_tuner.c cxm_video.c opt_cxm.h \
+         cxm_ir.c cxm_tuner.c cxm_video.c ioctl_meteor_compat.h opt_cxm.h =
\
        bus_if.h device_if.h iicbb_if.h pci_if.h vnode_if.h

.include <bsd.kmod.mk>

---8<---end-of-patch_modules_cxm_cxm_Makefile--file--8<

NEXT FILE (ioctl_meteor_compat.h)
---8<---start-of-ioctl_meteor_compat.h--file---8<--
/* ioctl_meteor_compat.h - Defines for meteor compatibility interface */

#define CXM_FW_STREAM_TYPE_DVD                      0x0000000a
#define METEOR_GEO_DVD  CXM_FW_STREAM_TYPE_DVD
#define CXM_FW_STREAM_TYPE_MPEG1                    0x00000002
#define METEOR_GEO_MPEG1        CXM_FW_STREAM_TYPE_MPEG1
#define CXM_FW_STREAM_TYPE_MPEG2_PROGRAM            0x00000000
#define METEOR_GEO_MPEG2_PROGRAM        CXM_FW_STREAM_TYPE_MPEG2_PROGRAM
#define CXM_FW_STREAM_TYPE_SVCD                     0x0000000c
#define METEOR_GEO_SVCD CXM_FW_STREAM_TYPE_SVCD
#define CXM_FW_STREAM_TYPE_VCD                      0x0000000b
#define METEOR_GEO_VCD  CXM_FW_STREAM_TYPE_VCD
#define CXM_FW_STREAM_TYPE_MPEG2_TS 0x00000001
#define METEOR_GEO_MPEG2_TS     CXM_FW_STREAM_TYPE_MPEG2_TS
#define CXM_FW_STREAM_TYPE_PES_AV 0x00000003 /* Test and don't work */
#define METEOR_GEO_PES_AV       CXM_FW_STREAM_TYPE_PES_AV
#define CXM_FW_STREAM_TYPE_PES_V 0x00000005 /* Not tested */
#define METEOR_GEO_PES_V        CXM_FW_STREAM_TYPE_PES_V
#define CXM_FW_STREAM_TYPE_PES_A 0x00000007 /* Not tested */
#define METEOR_GEO_PES_A        CXM_FW_STREAM_TYPE_PES_A
#define CXM_FW_STREAM_TYPE_DVD_S1 0x0000000d
#define METEOR_GEO_DVD_S1       CXM_FW_STREAM_TYPE_DVD_S1
#define CXM_FW_STREAM_TYPE_DVD_S2 0x0000000e
#define METEOR_GEO_DVD_S2       CXM_FW_STREAM_TYPE_DVD_S2

---8<---end-of-ioctl_meteor_compat.h--file---8<--

LAST FILE (pvr250-setprofile.c)
---8<---start-of-pvr250-setprofile.c--file---8<--
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdlib.h>
#include <dev/bktr/ioctl_bt848.h>
#include <dev/bktr/ioctl_meteor.h>
#include "./dev/cxm/ioctl_meteor_compat.h"

/**************************************************************************=
**/
/*  setprofile.c  -  Set the porfile of the bktr tuner card.               =
 */
/*                                                                         =
 */
/*  COMPILE WITH:  cc -o pvr250-setprofile pvr250-setprofile.c             =
 */
/*                                                                         =
 */
/**************************************************************************=
**/

static void
usage()
{
printf("Usage: setprofile <-a|-b|-c|-d|-e|-l|-x|-t>\n\n"
                      "  -a   Enable DVD profile.      Video: 720x575/480, =
9520 kbs.\n"
                      "                                Audio: 384 kbs 48 Kh=
z\n\n"
                      "  -b   Enable SVCD profile.     Video: 480x480/576, =
2500 kbs.\n"
                      "                                Audio: 224 kbs 41.1 =
Khz\n\n"
                      "  -c  Enable VCD profile.       Video: 352x288/352x2=
40, 1150 kbs.\n"
                      "                                Audio: 224 kbs 41.1 =
Khz.\n\n"
                      "  -d   Enable MPEG2 profile.    Video: 720x575/480, =
8192 kbs.\n"
                      "                                Audio: 384 kbs 48 Kh=
z.\n\n"
                      "  -e   Enable MPEG1 profile.    Video: 352x288/352x2=
40, 2048 kbs.\n"
                      "                                Audio: 224 kbs 48 Kh=
z.\n\n"
                      "  -l   Enable DVDS1 profile.    Video: 720x575/480, =
4096 kbs.\n"
                      "                                Audio: 384 kbs 48 Kh=
z.\n\n"
                      "  -x   Enable DVDS2 profile.    Video: 720x575/480, =
2048 kbs.\n"
                      "                                Audio: 224 kbs 48 Kh=
z.\n\n"
                      "  -t   Enable MPEG2_TS profile. Video: 720x575/480, =
6144 kbs.\n"
                      "                                Audio: 384 kbs 48 Kh=
z.\n");
}

int main( int argc, char *argv[] )
{
char opt;
int status;
int tfd;
struct meteor_geomet *my_oformat;
struct meteor_bitrate *my_bitrate;

while ((opt =3D getopt (argc, argv, ":abcdelxt")) !=3D -1)
       switch (opt){
        case 'a':
                my_oformat=3D(struct meteor_geomet *)calloc(sizeof(struct m=
eteor_geomet),1);
                my_oformat->rows =3D 0;
                my_oformat->columns =3D 0;
                my_oformat->frames =3D 0;
                my_oformat->oformat=3D METEOR_GEO_DVD;
                printf("Setting to %d\n",my_oformat->oformat);
                break;

        case 'b':
                my_oformat=3D(struct meteor_geomet *)calloc(sizeof(struct m=
eteor_geomet),1);
                my_oformat->rows =3D 0;
                my_oformat->columns =3D 0;
                my_oformat->frames =3D 0;
                my_oformat->oformat=3D METEOR_GEO_SVCD;
                printf("Setting to %d\n",my_oformat->oformat);
                break;

        case 'c':
                my_oformat=3D(struct meteor_geomet *)calloc(sizeof(struct m=
eteor_geomet),1);
                my_oformat->rows =3D 0;
                my_oformat->columns =3D 0;
                my_oformat->frames =3D 0;
                my_oformat->oformat=3D METEOR_GEO_VCD;
                printf("Setting to %d\n",my_oformat->oformat);
                break;

        case 'd':
                my_oformat=3D(struct meteor_geomet *)calloc(sizeof(struct m=
eteor_geomet),1);
                my_oformat->rows =3D 0;
                my_oformat->columns =3D 0;
                my_oformat->frames =3D 0;
                my_oformat->oformat=3D METEOR_GEO_MPEG2_PROGRAM;
                printf("Setting to %d\n",my_oformat->oformat);
                break;

        case 'e':
                my_oformat=3D(struct meteor_geomet *)calloc(sizeof(struct m=
eteor_geomet),1);
                my_oformat->rows =3D 0;
                my_oformat->columns =3D 0;
                my_oformat->frames =3D 0;
                my_oformat->oformat=3D METEOR_GEO_MPEG1;
                printf("Setting to %d\n",my_oformat->oformat);
                break;

        case 'l':
                my_oformat=3D(struct meteor_geomet *)calloc(sizeof(struct m=
eteor_geomet),1);
                my_oformat->rows =3D 0;
                my_oformat->columns =3D 0;
                my_oformat->frames =3D 0;
                my_oformat->oformat=3D METEOR_GEO_DVD_S1;
                printf("Setting to %d\n",my_oformat->oformat);
                break;

        case 'x':
                my_oformat=3D(struct meteor_geomet *)calloc(sizeof(struct m=
eteor_geomet),1);
                my_oformat->rows =3D 0;
                my_oformat->columns =3D 0;
                my_oformat->frames =3D 0;
                my_oformat->oformat=3D METEOR_GEO_DVD_S2;
                printf("Setting to %d\n",my_oformat->oformat);
                break;

        case 't':
                my_oformat=3D(struct meteor_geomet *)calloc(sizeof(struct m=
eteor_geomet),1);
                my_oformat->rows =3D 0;
                my_oformat->columns =3D 0;
                my_oformat->frames =3D 0;
                my_oformat->oformat=3D METEOR_GEO_MPEG2_TS;
                printf("Setting to %d\n",my_oformat->oformat);
                break;

        default:
                usage ();
                exit (1);
                break;
        }

tfd =3D open( "/dev/cxm0", O_RDONLY );
if ( tfd < 0 ) {
  perror( "open() of /dev/cxm0 failed." );
  exit(1);
}

if ( ioctl( tfd, METEORSETGEO, my_oformat ) < 0 ) {
    perror( "ioctl( tfd, METEORSETGEO ) failed." );
    status =3D 1;
}

close ( tfd );
exit ( status );
}

---8<---end-of-pvr250-setprofile.c--file---8<--

------=_Part_264_9883545.1108385087845--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8f8eb53e050214044450fbe8b>