source: titan/titan/dvrdev.h @ 15349

Last change on this file since 15349 was 9713, checked in by nit, 13 years ago

[titan] add timeshift width own player

File size: 1.5 KB
Line 
1#ifndef DVRDEV_H
2#define DVRDEV_H
3
4struct dvbdev* dvropen(struct dvbdev* fenode)
5{
6        debug(1000, "in");
7        int fd = -1;
8        struct dvbdev* node = dvbdev;
9
10        if(fenode == NULL) return NULL;
11               
12        while(node != NULL)
13        {
14                if(node->type == DVRDEV && node->adapter == fenode->adapter && node->devnr == fenode->devnr)
15                        break;
16                node = node->next;
17        }
18
19        if(node != NULL)
20        {
21                if((fd = open(node->dev, O_WRONLY)) < 0)
22                {
23                        debug(200, "open dvr failed %s", node->dev);
24                        node = NULL;
25                }
26                else
27                {
28                        fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
29                        node->fd = fd;
30                        closeonexec(fd);
31                }
32        }
33
34        debug(1000, "out");
35        return node;
36}
37
38int dvropendirect(char *dvrdev)
39{
40        debug(1000, "in");
41        int fd = -1;
42
43        if((fd = open(dvrdev, O_WRONLY)) < 0)
44        {
45                debug(200, "open dvr failed %s", dvrdev);
46        }
47
48        closeonexec(fd);
49        debug(1000, "out");
50        return fd;
51}
52
53void dvrclose(struct dvbdev* node, int fd)
54{
55        if(node != NULL)
56        {
57                close(node->fd);
58                node->fd = -1;
59        }
60        else
61                close(fd);
62}
63
64int dvrgetdev()
65{
66        debug(1000, "in");
67        int i, y, fd = -1, count = 0;
68        char *buf = NULL, *dvrdev = NULL;
69
70        dvrdev = getconfig("dvrdev", NULL);
71        if(dvrdev == NULL)
72        {
73                debug(1000, "out -> NULL detect");
74                return count;
75        }
76
77        buf = malloc(MINMALLOC);
78        if(buf == NULL)
79        {
80                err("no memory");
81                return count;
82        }
83
84        for(i = 0; i < MAXDVBADAPTER; i++)
85        {
86                for(y = 0; y < MAXDVRDEV; y++)
87                {
88                        sprintf(buf, dvrdev, i, y);
89                        fd = dvropendirect(buf);
90                        if(fd >= 0)
91                        {
92                                dvrclose(NULL, fd);
93                                count++;
94                                adddvbdev(buf, i, y, -1, DVRDEV, NULL, NULL);
95                        }
96                }
97        }
98
99        free(buf);
100        debug(1000, "out");
101        return count;
102}
103
104#endif
Note: See TracBrowser for help on using the repository browser.