source: titan/plugins/tsSchnitt/tsSchnitt.c @ 25450

Last change on this file since 25450 was 25450, checked in by gost, 9 years ago

[plugins] add tsSchnitt step 1

  • Property svn:executable set to *
File size: 8.2 KB
Line 
1#include "../../titan/struct.h"
2#include "../../titan/debug.h"
3#include "../../titan/header.h"
4
5char pluginname[] = "Record cut";
6char plugindesc[] = "Extensions";
7char pluginpic[] = "%pluginpath%/tsSchnitt/plugin.png";
8
9int pluginaktiv = 0;
10int pluginversion = 999999;
11
12int imarker, iindex, ischnitt;
13char* recfile = NULL;
14char* recname = NULL;
15char* cutfile = NULL;
16
17struct stimerthread* tsSchnittThread = NULL;
18struct stimerthread* tsSchnittThreadKill = NULL;
19
20void tsSchnitt_thread_kill()
21{
22        while (tsSchnittThread->aktion != STOP && tsSchnittThreadKill->aktion != STOP)
23        {       
24                sleep(2);
25        }
26        if(tsSchnittThread->aktion == STOP)
27        {
28                system("killall -9 avconv");
29        }
30        tsSchnittThreadKill = NULL;
31}
32
33
34void tsSchnitt_thread()
35{
36        char* tmpstr = NULL;
37        char* tmpstr2 = NULL;
38        char* tmpstr3 = NULL;
39        int z = 0;
40        int rc;
41        unsigned int buf[3];
42
43        tsSchnittThreadKill = addtimer(&tsSchnitt_thread_kill, START, 10000, 1, NULL, NULL, NULL);
44       
45        if(ischnitt == 0  || ischnitt == 3)
46        {
47               
48               
49                off64_t pos;
50                off64_t time;
51                off64_t mtime;
52                tmpstr2 = changefilenameext(recfile, ".ma");
53                //tmpstr2 = ostrcat("\"",tmpstr2, 0, 0);
54                //tmpstr2 = ostrcat(tmpstr2, "\"", 0, 0);
55                printf("----> %s\n",tmpstr2);
56                FILE* datei = fopen(tmpstr2, "r");
57                z = 0;
58                if(datei!= NULL)                       
59                {
60                        while(!feof(datei) && z < 2)
61                        {
62                                fscanf(datei, "%lld,%lld", &pos, &time);
63
64                                if(z == 0)
65                                {       
66                                        tmpstr = createpluginpath("/tsSchnitt/avconv", 0);
67                                        //tmpstr = ostrcat("/mnt/swapextensions/usr/local/share/titan/plugins/tsSchnitt/avconv", " -ss ", 0, 0);
68                                        tmpstr = ostrcat(tmpstr, " -ss ", 0, 0);
69                                        tmpstr = ostrcat(tmpstr, convert_timesec(time), 0, 0);
70
71                                        tmpstr = ostrcat(tmpstr, " -i \"",0, 0);
72                                        tmpstr = ostrcat(tmpstr, recfile, 0, 0);
73                                        tmpstr = ostrcat(tmpstr, "\"",0, 0);
74                                        //tmpstr = ostrcat(tmpstr, " -vcodec copy -map 0:v -acodec copy -map 0:a -scodec copy -map 0:s",0, 0);
75                                        tmpstr = ostrcat(tmpstr, " -vcodec copy -map 0:v -acodec copy -map 0:a",0, 0);
76                                        mtime = time;
77                                }
78                                if(z == 1)
79                                {
80                                        tmpstr = ostrcat(tmpstr, " -t ", 0, 0);
81                                        tmpstr = ostrcat(tmpstr, convert_timesec(time - mtime), 0, 0);
82                                        tmpstr = ostrcat(tmpstr, " \"", 0, 0);
83                                        tmpstr = ostrcat(tmpstr, cutfile, 0, 0);
84                                        tmpstr = ostrcat(tmpstr, "\"",0, 0);
85                                }
86                                z = z + 1;
87                        }       
88                        fclose(datei); 
89                        free(tmpstr2); tmpstr2 = NULL;                                                                                                 
90                }
91                if(z < 2)
92                        ischnitt = 3;
93                else
94                        ischnitt = 1;   
95
96                if(ischnitt == 1)
97                {
98                        printf(" +++ %s +++\n",tmpstr);
99                        rc = system(tmpstr);
100                        free(tmpstr);tmpstr= NULL;
101                        if(rc == 0)
102                        {
103                                ischnitt = 2;
104                                textbox(_("INFO"), _("cut ended with RC 0"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
105                        }
106                        else
107                        {
108                                remove(cutfile);
109                                ischnitt = 3;
110                                textbox(_("ERROR"), _("cut ended with ERROR !!!!!"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
111                        }
112                }
113                free(tmpstr); tmpstr = NULL;
114        }
115
116        if(tsSchnittThreadKill != NULL)
117        {       
118                tsSchnittThreadKill->aktion = STOP;
119                sleep(2);
120        }
121        tsSchnittThread = NULL;
122        printf("ischnitt:--> %i\n",ischnitt);
123  return;
124}
125
126                       
127//wird beim laden ausgefuehrt
128void init(void)
129{
130        char* tmpstr = NULL;
131        pluginaktiv = 1;
132        tmpstr = createpluginpath("/tsSchnitt/skin.xml", 0);
133        readscreen(tmpstr, 122, 1);
134        free(tmpstr); tmpstr = NULL;
135               
136        debug(10, "Record cut Plugin loadet !!!");
137}
138
139//wird beim entladen ausgefuehrt
140void deinit(void)
141{
142        if(tsSchnittThread != NULL)
143        {
144                tsSchnittThread->aktion = STOP;
145                sleep(2);
146        }
147        free(cutfile); cutfile=NULL;
148        free(recfile); recfile=NULL;
149        free(recname); recname=NULL;
150        delmarkedscreen(122);
151        pluginaktiv = 0;
152        debug(10, "Record cut Plugin loadet !!!");
153}
154
155//wird in der Pluginverwaltung bzw Menue ausfeguehrt
156void start(void)
157{
158        char* tmpstr = NULL;
159        char* tmpstr2 = NULL;
160        int rcret;
161        int help;
162        struct stat64 rdat;
163        struct stat64 cdat;
164       
165        struct skin* tsschnitt = getscreen("tsSchnitt");
166        struct skin* listbox = getscreennode(tsschnitt, "listbox");
167        struct skin* film = getscreennode(tsschnitt, "film");
168        struct skin* marker = getscreennode(tsschnitt, "marker");
169        struct skin* schnitt = getscreennode(tsschnitt, "schnitt");
170        struct skin* schnittprog = getscreennode(tsschnitt, "schnittprog");
171        struct skin* tmp = NULL;
172       
173        while(1)
174        {
175
176                if(recfile == NULL)
177                        recfile = ostrcat(recfile, getconfig("tsSchnitt_recfile", NULL), 0, 0);
178                if(recfile == NULL && tsSchnittThread == NULL)
179                {
180                        imarker = 0;
181                        ischnitt = 0;
182                }
183                else if(tsSchnittThread == NULL)
184                {
185                  tmpstr = changefilenameext(recfile, ".ma");
186                  if(isfile(tmpstr) == 0)
187                        imarker = 0;
188                  else
189                        imarker = 2;
190                        free(tmpstr); tmpstr=NULL;     
191                tmpstr = changefilenameext(recfile, ".cut");
192                cutfile = ostrcat(tmpstr, ".ts", 0, 0);
193                free(tmpstr); tmpstr=NULL;
194                if(isfile(cutfile) == 1 && tsSchnittThread == NULL)
195                        ischnitt = 2;
196                else if(tsSchnittThread == NULL && ischnitt != 3)
197                        ischnitt = 0;
198                }
199       
200                if(recname == NULL && recfile != NULL)
201                {
202                        tmpstr2 = strrchr(recfile, '/');
203                        if(tmpstr2 != NULL)
204                        {
205                                recname = ostrcat(tmpstr2+1,"" ,0, 0);
206                                changetext(film, recname);
207                                tmpstr2 = NULL;
208                        }
209                        else
210                                changetext(film, recfile);
211                }
212                else if(recfile == NULL)
213                        changetext(film, recfile);
214               
215                if(imarker == 0)
216                        changetext(marker, "no");
217                else if(imarker == 2)
218                        changetext(marker, "yes");
219       
220                schnittprog->progresssize = 0;
221                if(ischnitt == 0)
222                {
223                        changetext(schnitt, "no");
224                        changetext(schnittprog, "0.0%");
225                        schnittprog->progresssize = 0;
226                }
227                else if(ischnitt == 1)
228                {
229                        changetext(schnittprog, "0.0%");
230                        changetext(schnitt, "progress");
231                        if(stat64(cutfile, &cdat) == 0)
232                        {
233                                if(stat64(recfile, &rdat) == 0)
234                                {
235                                        help = (100 * cdat.st_size) / rdat.st_size;
236                                                schnittprog->progresssize = help;
237                                                tmpstr2 = ostrcat(oitoa(help),"." ,0, 0);
238                                                help = ((100 * cdat.st_size) % rdat.st_size) * 10 / rdat.st_size;
239                                                tmpstr2 = ostrcat(tmpstr2, oitoa(help),0, 0);
240                                                tmpstr2 = ostrcat(tmpstr2,"%" ,0, 0);
241                                                changetext(schnittprog, tmpstr2);
242                                                free(tmpstr2); tmpstr2=NULL;
243                                }
244                        }
245                }
246                else if(ischnitt == 2)
247                        changetext(schnitt, "yes");     
248                else if(ischnitt == 3)
249                {
250                        changetext(schnitt, "error");   
251                        changetext(schnittprog, "0.0%");
252                        schnittprog->progresssize = 0;
253                }       
254               
255                drawscreen(tsschnitt, 0, 0);
256                addscreenrc(tsschnitt, listbox);
257                tmp = listbox->select;
258       
259                while(1)
260                {
261                        addscreenrc(tsschnitt, tmp);
262                        rcret = waitrc(tsschnitt, 2000, 0);
263                        tmp = listbox->select; 
264               
265                        if (rcret == getrcconfigint("rcexit", NULL)) break;
266                        if (rcret == getrcconfigint("rcgreen", NULL))
267                        {
268                                if(tsSchnittThread == NULL)
269                                {
270                                        recfile = screendir("/var/media/hdd/movie", "*.ts", NULL, NULL, NULL, NULL, 0, "SELECT", 0, NULL, 0, NULL, 0, 1200, 0, 600, 0, 0);
271                                        addconfig("tsSchnitt_recfile", recfile);
272                                        free(recfile);recfile=NULL;
273                                        free(recname);recname=NULL;
274                                        break;
275                                }
276                                else
277                                {
278                                        textbox(_("ERROR"), _("cut is running"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
279                                }
280                        }
281                        if (rcret == getrcconfigint("rcblue", NULL))
282                        {
283                                if(tsSchnittThread == NULL)
284                                {
285                                        tsSchnittThread = addtimer(&tsSchnitt_thread, START, 10000, 1, NULL, NULL, NULL);
286                                        sleep(1);
287                                        break;
288                                }
289                                else
290                                {
291                                        textbox(_("ERROR"), _("cut is running"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
292                                }
293                        }
294                        if (rcret == getrcconfigint("rcred", NULL) && tsSchnittThread != NULL)
295                        {
296                                tsSchnittThread->aktion = STOP;
297                                sleep(2);
298                                break;
299                        }
300                        if(ischnitt == 1)
301                        {
302                                changetext(schnitt, "progress");
303                                if(stat64(cutfile, &cdat) == 0)
304                                {
305                                        if(stat64(recfile, &rdat) == 0)
306                                        {
307                                        help = (100 * cdat.st_size) / rdat.st_size;
308                                                schnittprog->progresssize = help;
309                                                tmpstr2 = ostrcat(oitoa(help),"." ,0, 0);
310                                                help = ((100 * cdat.st_size) % rdat.st_size) * 10 / rdat.st_size;
311                                                tmpstr2 = ostrcat(tmpstr2, oitoa(help),0, 0);
312                                                tmpstr2 = ostrcat(tmpstr2,"%" ,0, 0);
313                                                changetext(schnittprog, tmpstr2);
314                                                free(tmpstr2); tmpstr2=NULL;
315                                        }
316                                }
317                        }
318                        drawscreen(tsschnitt, 0, 0);                   
319                }
320                if (rcret == getrcconfigint("rcexit", NULL)) break;
321        }
322        delownerrc(tsschnitt);
323        clearscreen(tsschnitt);
324                                 
325                       
326
327
328}
Note: See TracBrowser for help on using the repository browser.