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