Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-dvb] Re: ?: How I can recording video PES to a file with NAPI



Hello,

	To access the ts from the card , my initialisation looks something
like this
	pesFilterParamsA.pid = audiopid /videopid;
	pesFilterParamsA.input = DMX_IN_FRONTEND;
        pesFilterParamsA.output = DMX_OUT_TS_TAP;(DMX_OUT_TAP for pes)
        pesFilterParamsA.pesType = DMX_PES_AUDIO;
        pesFilterParamsA.flags = DMX_IMMEDIATE_START;
	ioctl();
	(for the respective audio/video pids)

	then I open the dvr device

	fdstap = open("/dev/ost/dvr0", O_RDONLY);
        if(fdstap<0)
        {
                perror("DVR DEVICE: ");
                exit(0);
        }
and start to read the transport streams from the card.

	read( fdstap, recordBuf, REC_BUFF_SIZE );

hope this helps

with regards
Prakash













On Mon, 19 Mar 2001, Varga Zsager Peter wrote:

> Hi!
>
>
> We have a SIEMENS DVB-S card. We would like capture from the card a video
> pes stream and write it to a file. I have made the follows steps, but
> it unfortunately don't functional, I can't anything to read from
> /dev/ost/demux. My program is:
>
> ---
>
> #include <sys/ioctl.h>
> #include <stdio.h>
> #include <stdint.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <time.h>
> #include <sys/poll.h>
> #include <errno.h>
>
> #include <ost/sec.h>
> #include <ost/frontend.h>
> #include <ost/dmx.h>
>
> #define SECDEV          "/dev/ost/sec"
> #define FRONTENDDEV     "/dev/ost/qpskfe"
> #define DEMUXDEV        "/dev/ost/demux"
> #define BUFFSIZE        8192 // 2 * maximum size of a section
> #define NFD             1
> #define FALSE           0
> #define TRUE            1
> //#define WE_WANT_DEBUG
>
>
> unsigned long convertFreq(unsigned long wantedFreq) {
>     if (wantedFreq < 11800UL) {
> 	return ((wantedFreq - 9750UL) * 1000000UL);
>     }
>     else {
>         return ((wantedFreq - 10600UL) * 1000000UL);
>     }
> }
>
> unsigned long convertSr(unsigned long wantedSr) {
>     return (wantedSr * 1000);
> }
>
> int main(int argc, char **argv) {
>     char *file;
>     char *secDev = SECDEV;
>     char *frontendDev = FRONTENDDEV;
>     char *demuxDev = DEMUXDEV;
>     int fileFd;
>     int secDevFd;
>     int frontendDevFd;
>     int demuxDevFd;
>     secToneMode mySecToneMode;~
>     secVoltage mySecVoltage;
>     struct qpskParameters myQpskParams;
>         unsigned long wantedFreq;
>         unsigned long wantedSr;
>     struct dmxPesFilterParams myDmxPesFilterParams;
>     char buffer[BUFFSIZE];
>     int retValue;
>     int readCount;
>     int writtenCount;
>
>
>     if (argc != 2) {
>         printf("usage: %s <filename> \n", *(argv + 0));
>         return -1;
>     }
>     else { file = *(argv + 1); }
>
>     fprintf(stderr, " \n");
>
> // file
>     if ((fileFd = open(file, O_WRONLY)) < 0) {
>         perror("File open O_WRONLY error");
>         return -1;
>     }
>     else { fprintf(stderr, "%s file opened for O_WRONLY, fileFd = %d \n", file, fileFd); }
>
> // SET CHANNEL:
> // VOX - HOTBIRD D 127 11.054 H W DEUTSCHE TELEKOM DIGITAL PLATF DVB 5/6 27.5 CLEAR GERMAN 24
> //
> // Channel: VOX
> // Frequency: 11054
> // CBHC: 255 0 0 255
> // NI: -1 0
> // SAT: 1 27500 4 500 501 1 1 0
>
> // /dev/ost/sec ( for 22khz, voltage )
> // /dev/ost/qpskfe ( for frequency, symbolrate, fec )
> // /dev/ost/demux (for vpid, apid)
>
> // sec
>     if ((secDevFd = open(secDev, O_RDWR)) < 0) {
>         perror("Sec device open O_RDWR error");
>         return -1;
>     }
>     else { fprintf(stderr, "%s sec device opened for O_RDWR, secDevFd = %d \n", secDev, secDevFd); }
>
>     mySecToneMode = SEC_TONE_OFF; // 22KHz (ttk) (freq < 118000UL) ? 0 : 1
>     if (ioctl(secDevFd, SEC_SET_TONE, mySecToneMode) < 0) {
>         perror("SEC_SET_TONE");
>         return -1;
>     }
>     else { fprintf(stderr, "SEC_SET_TONE set \n"); }
>     mySecVoltage = SEC_VOLTAGE_18; // 14V/18V (V=0/H=1)
>     if (ioctl(secDevFd, SEC_SET_VOLTAGE, mySecVoltage) < 0) {
>         perror("SEC_SET_VOLTAGE");
>         return -1;
>     }
>     else { fprintf(stderr, "SEC_SET_VOLTAGE set \n"); }
>
> // frontend
>     if ((frontendDevFd = open(frontendDev, O_RDWR)) < 0) {
>         perror("Frontend device open O_RDWR error");
>         return -1;
>     }
>     else { fprintf(stderr, "%s frontend device opened for O_RDWR, frontendDevFd = %d \n", frontendDev, frontendDevFd); }
>
>     wantedFreq  = 11054;
>     wantedSr    = 27500;
>
>     myQpskParams.iFrequency     = convertFreq(wantedFreq);
>     myQpskParams.SymbolRate     = convertSr(wantedSr);
>     myQpskParams.FEC_inner      = 4;
>     if (ioctl(frontendDevFd, QPSK_TUNE, &myQpskParams) < 0) {
>         perror("QPSK_TUNE");
>         return -1;
>     }
>     else { fprintf(stderr, "QPSK_TUNE set \n"); }
>
> // demux
>     if ((demuxDevFd = open(demuxDev, O_RDWR | O_NONBLOCK)) < 0) {
>         perror("Demux device open O_RDWR | O_NONBLOCK error");
>         return -1;
>     }
>     else { fprintf(stderr, "%s demux device opened for O_RDWR | O_NONBLOCK, demuxDevFd = %d \n", demuxDev, demuxDevFd); }
>
>     myDmxPesFilterParams.pid            = 500; // VOX video_pes_pid
>     myDmxPesFilterParams.input          = DMX_IN_FRONTEND;
>     myDmxPesFilterParams.output         = DMX_OUT_TAP;
>     myDmxPesFilterParams.pesType        = DMX_PES_VIDEO;
>     myDmxPesFilterParams.flags          = DMX_IMMEDIATE_START;
>     if (ioctl(demuxDevFd, DMX_SET_PES_FILTER, &myDmxPesFilterParams) < 0) {
>         perror("DMX_SET_PES_FILTER");
>         return -1;
>     }
>     else { fprintf(stderr, "DMX_SET_PES_FILTER set \n"); }
>
> // the motor
>     while (TRUE) {
>         readCount = 0;
>         while (readCount < BUFFSIZE) {
>             retValue =  read(demuxDevFd, buffer, BUFFSIZE - readCount);
>             if (retValue < 0) {
>         	perror("Demux device read error");
> 		return -1;
>             }
>             else
>             {
>         	readCount += retValue;
> #if defined WE_WANT_DEBUG
>                 fprintf(stderr, "%d Bytes read \n", retValue);
> 		fprintf(stderr, "%d Bytes read \n", readCount);
> #endif
>             }
> 	}
>         writtenCount = 0;
>         while (writtenCount < BUFFSIZE) {
>             retValue =  write(fileFd, buffer, BUFFSIZE);
> 	    if (retValue < 0) {
>     	        perror("File write error");
> 		return -1;
>             }
> 	    else
> 	    {
>         	writtenCount += retValue;
> #if defined WE_WANT_DEBUG
>         	fprintf(stderr, "%d Bytes read \n", retValue);
>         	fprintf(stderr, "%d Bytes read \n", writtenCount);
> #endif
> 	    }
> 	}
>     }
>
>     close(demuxDevFd);
>     close(frontendDevFd);
>     close(secDevFd);
>     close(fileFd);
>
>     fprintf(stderr, "\n");
>     fprintf(stderr, "end of the demux capture \n");
>
>     return 0;
> }
>
> ---
>
> Sorry to the lot of text and my bad grammar.
>
> I have setted the sec (/dev/ost/sec - for 22khz, voltage), the frontend
> (/dev/ost/qpskfe - for frequency, symbolrate, fec) and the demux
> (/dev/ost/demux - for vpid, apid) devices properly, but I can nothing data
> read from /dev/ost/demux device. I have tried it to read also with poll()
> on /dev/ost/demux ( if (pfd[0].revents & POLLIN) { ... ), but the device
> is never ready for reading. What kind of mistake have I made or how can I
> read a wanted VIDEO_PES from the satellit TS via DVB card, must I use the
> old API (v4l)? Can I both PES simultaneously read (e.g. DMX_PES_AUDIO and
> DMX_PES_VIDEO)?
>
>
> Thanks,
> Peter
>
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
> Peter Varga Zsager
> Phone:  +36-72-253947 (weekend)
> Mobile: +36-30-2950386
> E-mail: jagger@sch.bme.hu
>
>
>
> ---
> Info:
> To unsubscribe send a mail to listar@linuxtv.org with "unsubscribe linux-dvb" as subject.
>



--- 
Info:
To unsubscribe send a mail to listar@linuxtv.org with "unsubscribe linux-dvb" as subject.



Home | Main Index | Thread Index