source: titan/titan/encoder.h @ 38580

Last change on this file since 38580 was 31758, checked in by obi, 9 years ago

fix building

  • Property svn:executable set to *
File size: 3.3 KB
Line 
1#ifndef ENCODER_H
2#define ENCODER_H
3
4
5struct dvbdev* encoderopen(int flag)
6{
7        int fd = -1;
8        struct dvbdev* node = dvbdev;
9
10        while(node != NULL)
11        {
12                if(node->fd == -1 && node->type == ENCODERDEV)
13                        break;
14                node = node->next;
15        }
16
17        if(node != NULL)
18        {
19                if(flag == 0) return node;
20                if((fd = open(node->dev, O_RDONLY)) < 0)
21                {
22                        debug(200, "open encoder failed %s", node->dev);
23                        node = NULL;
24                }
25                else
26                {
27                        node->fd = fd;
28                        closeonexec(fd);
29                }
30        }
31        return node;
32}
33
34
35int encoderopendirect(char* encoderdev)
36{
37        int fd = -1;
38
39        if((fd = open(encoderdev, O_RDONLY)) < 0)
40        {
41                debug(200, "open encoder failed %s", encoderdev);
42        }
43
44        closeonexec(fd);
45        return fd;
46}
47
48void encoderclose(struct dvbdev* node, int fd)
49{
50        if(node != NULL)
51        {
52                close(node->fd);
53                node->fd = -1;
54        }
55        else
56                close(fd);
57}
58
59
60int encodergetdev()
61{
62        int i, y, fd = -1, count = 0;
63        char *buf = NULL, *encoderdev = NULL;
64
65        encoderdev = getconfig("encoderdev", NULL);
66        if(encoderdev == NULL)
67        {
68                err("NULL detect");
69                return count;
70        }
71
72        buf = malloc(MINMALLOC);
73        if(buf == NULL)
74        {
75                err("no memory");
76                return count;
77        }
78
79        i = 0;
80        for(y = 0; y < MAXENCODERDEV; y++)
81        {
82                sprintf(buf, encoderdev, y);
83                fd = file_exist(buf);
84                if(fd > 0)
85                {
86                        count++;
87                        adddvbdev(buf, i, y, -1, ENCODERDEV, NULL, NULL, NULL, 0);
88                }
89        }
90        free(buf);
91        return count;
92}
93
94int encodernextdev(int flag)
95{
96        int ret = 0;
97        struct dvbdev* node = encoderopen(flag);
98        if(node == NULL)
99                ret = -1;
100        else
101        {
102                ret = node->devnr;
103                if(flag == 1)
104                        encoderclose(node, 0);
105        }
106        return ret;
107}
108       
109int encoderset(int dev, int flag, int bitrate, int width, int height, int framerate, int interlaced, int aspectratio)
110{
111        char *buf = NULL, *encoderdev = NULL;
112        int nextdev = dev;
113        if (nextdev < 0)
114        {
115                nextdev = encodernextdev(0);
116                if(nextdev < 0)
117                        return -1;
118        }
119        encoderdev = getconfig("enc_all", NULL);
120        if(encoderdev == NULL)
121        {
122                err("NULL detect");
123                return -1;
124        }
125        buf = malloc(MINMALLOC);
126        if(buf == NULL)
127        {
128                err("no memory");
129                return -1;
130        }
131        sprintf(buf, encoderdev, nextdev, "bitrate");
132        writesysint(buf, bitrate, 1);
133        sprintf(buf, encoderdev, nextdev, "width");
134        writesysint(buf, width, 1);
135        sprintf(buf, encoderdev, nextdev, "height");
136        writesysint(buf, height, 1);
137        sprintf(buf, encoderdev, nextdev, "framerate");
138        writesysint(buf, framerate, 1);
139        sprintf(buf, encoderdev, nextdev, "interlaced");
140        writesysint(buf, interlaced, 1);
141        sprintf(buf, encoderdev, nextdev, "aspectratio");
142        writesysint(buf, aspectratio, 1);
143        if(flag == 1)
144        {
145                sprintf(buf, encoderdev, nextdev, "apply");
146                writesysint(buf, 1, 1);
147        }
148        free(buf); buf=NULL;
149        return 0;
150}
151int encodersetweb(int dev, int flag)
152{
153        int bitrate = 1024*1024;
154        int width = 360;
155        int height = 280;
156        int framerate = 25000;
157        int interlaced = 0;
158        int aspectratio = 0;
159        int help = 0;
160        int ret;
161       
162        help = getconfigint("web_trans_bitrate", NULL);
163        if(help != 0)
164                bitrate = help;
165       
166        help = getconfigint("web_trans_resolution", NULL);
167        if(help == 0)
168        {
169                width = 640;
170                height = 480;
171        }
172        else if(help == 1)
173        {
174                width = 720;
175                height = 576;
176        }
177        else if(help == 2)
178        {
179                width = 1280;
180                height = 720;
181        }       
182        else if(help == 3)
183        {
184                width = 320;
185                height = 240;
186        }       
187        else if(help == 4)
188        {
189                width = 160;
190                height = 120;
191        }       
192       
193        aspectratio = getconfigint("web_trans_aspectratio", NULL);
194       
195        ret = encoderset(dev, flag, bitrate, width, height, framerate, interlaced, aspectratio);
196        return ret;
197}
198       
199#endif
Note: See TracBrowser for help on using the repository browser.