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

Last change on this file since 25456 was 25456, checked in by gost, 10 years ago

[plugins] tsSchnitt fix

  • Property svn:executable set to *
File size: 8.9 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"), _("Schnitt erfolgreich beendet"), _("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"), _("Schnitt ended mit Fehler !!!!!"), _("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        struct skin* load = getscreen("loading");
173       
174        while(1)
175        {
176
177                if(recfile == NULL)
178                        recfile = ostrcat(recfile, getconfig("tsSchnitt_recfile", NULL), 0, 0);
179                if(recfile == NULL && tsSchnittThread == NULL)
180                {
181                        imarker = 0;
182                        ischnitt = 0;
183                }
184                else if(tsSchnittThread == NULL)
185                {
186                  tmpstr = changefilenameext(recfile, ".ma");
187                  if(isfile(tmpstr) == 0)
188                        imarker = 0;
189                  else
190                        imarker = 2;
191                        free(tmpstr); tmpstr=NULL;     
192                tmpstr = changefilenameext(recfile, ".cut");
193                cutfile = ostrcat(tmpstr, ".ts", 0, 0);
194                free(tmpstr); tmpstr=NULL;
195                if(isfile(cutfile) == 1 && tsSchnittThread == NULL)
196                        ischnitt = 2;
197                else if(tsSchnittThread == NULL && ischnitt != 3)
198                        ischnitt = 0;
199                }
200       
201                if(recname == NULL && recfile != NULL)
202                {
203                        tmpstr2 = strrchr(recfile, '/');
204                        if(tmpstr2 != NULL)
205                        {
206                                recname = ostrcat(tmpstr2+1,"" ,0, 0);
207                                changetext(film, recname);
208                                tmpstr2 = NULL;
209                        }
210                        else
211                                changetext(film, recfile);
212                }
213                else if(recfile == NULL)
214                        changetext(film, recfile);
215               
216                if(imarker == 0)
217                        changetext(marker, "nein");
218                else if(imarker == 2)
219                        changetext(marker, "ja");
220       
221                schnittprog->progresssize = 0;
222                if(ischnitt == 0)
223                {
224                        changetext(schnitt, "gestopt");
225                        changetext(schnittprog, "0.0%");
226                        schnittprog->progresssize = 0;
227                }
228                else if(ischnitt == 1)
229                {
230                        changetext(schnittprog, "0.0%");
231                        changetext(schnitt, "in Arbeit");
232                        if(stat64(cutfile, &cdat) == 0)
233                        {
234                                if(stat64(recfile, &rdat) == 0)
235                                {
236                                        help = (100 * cdat.st_size) / rdat.st_size;
237                                                schnittprog->progresssize = help;
238                                                tmpstr2 = ostrcat(oitoa(help),"." ,0, 0);
239                                                help = ((100 * cdat.st_size) % rdat.st_size) * 10 / rdat.st_size;
240                                                tmpstr2 = ostrcat(tmpstr2, oitoa(help),0, 0);
241                                                tmpstr2 = ostrcat(tmpstr2,"%" ,0, 0);
242                                                changetext(schnittprog, tmpstr2);
243                                                free(tmpstr2); tmpstr2=NULL;
244                                }
245                        }
246                }
247                else if(ischnitt == 2)
248                {
249                        changetext(schnitt, "fertig"); 
250                        changetext(schnittprog, "0.0%");
251                        schnittprog->progresssize = 0;
252                }       
253                else if(ischnitt == 3)
254                {
255                        changetext(schnitt, "fehlerhaft");     
256                        changetext(schnittprog, "0.0%");
257                        schnittprog->progresssize = 0;
258                }       
259               
260                drawscreen(tsschnitt, 0, 0);
261                addscreenrc(tsschnitt, listbox);
262                tmp = listbox->select;
263       
264                while(1)
265                {
266                        addscreenrc(tsschnitt, tmp);
267                        rcret = waitrc(tsschnitt, 2000, 0);
268                        tmp = listbox->select; 
269               
270                        if (rcret == getrcconfigint("rcexit", NULL) && tsSchnittThread == NULL) break;
271                        if (rcret == getrcconfigint("rcyellow", NULL) && tsSchnittThread != NULL) break;
272                        if (rcret == getrcconfigint("rcgreen", NULL))
273                        {
274                                if(tsSchnittThread == NULL)
275                                {
276                                        recfile = screendir("/var/media/hdd/movie", "*.ts", NULL, NULL, NULL, NULL, 0, "SELECT", 0, NULL, 0, NULL, 0, 1200, 0, 600, 0, 0);
277                                        addconfig("tsSchnitt_recfile", recfile);
278                                        free(recfile);recfile=NULL;
279                                        free(recname);recname=NULL;
280                                        break;
281                                }
282                                else
283                                {
284                                        textbox(_("ERROR"), _("cut is running"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
285                                }
286                        }
287                        if (rcret == getrcconfigint("rcblue", NULL))
288                        {
289                                if(tsSchnittThread == NULL)
290                                {
291                                        drawscreen(load, 0, 0);
292                                        tsSchnittThread = addtimer(&tsSchnitt_thread, START, 10000, 1, NULL, NULL, NULL);
293                                        sleep(1);
294                                        clearscreen(load);
295                                        break;
296                                }
297                                else
298                                {
299                                        textbox(_("ERROR"), _("cut is running"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
300                                }
301                        }
302                        if (rcret == getrcconfigint("rcred", NULL) && tsSchnittThread != NULL)
303                        {
304                                drawscreen(load, 0, 0);
305                                tsSchnittThread->aktion = STOP;
306                                sleep(2);
307                                clearscreen(load);
308                                break;
309                        }
310                        if(ischnitt == 1)
311                        {
312                                changetext(schnitt, "in Arbeit");
313                                if(stat64(cutfile, &cdat) == 0)
314                                {
315                                        if(stat64(recfile, &rdat) == 0)
316                                        {
317                                        help = (100 * cdat.st_size) / rdat.st_size;
318                                                schnittprog->progresssize = help;
319                                                tmpstr2 = ostrcat(oitoa(help),"." ,0, 0);
320                                                help = ((100 * cdat.st_size) % rdat.st_size) * 10 / rdat.st_size;
321                                                tmpstr2 = ostrcat(tmpstr2, oitoa(help),0, 0);
322                                                tmpstr2 = ostrcat(tmpstr2,"%" ,0, 0);
323                                                changetext(schnittprog, tmpstr2);
324                                                free(tmpstr2); tmpstr2=NULL;
325                                        }
326                                }
327                        }
328                        else if(ischnitt == 2)
329                        {
330                                changetext(schnitt, "fertig"); 
331                                changetext(schnittprog, "0.0%");
332                                schnittprog->progresssize = 0;
333                        }       
334                        else if(ischnitt == 3)
335                        {
336                                changetext(schnitt, "fehlerhaft");     
337                                changetext(schnittprog, "0.0%");
338                                schnittprog->progresssize = 0;
339                        }       
340                        drawscreen(tsschnitt, 0, 0);                   
341                }
342                if (rcret == getrcconfigint("rcexit", NULL) || rcret == getrcconfigint("rcyellow", NULL)) break;
343        }
344        delownerrc(tsschnitt);
345        clearscreen(tsschnitt);
346                                 
347                       
348
349
350}
Note: See TracBrowser for help on using the repository browser.