Alexandre CONRAD writes:
 > > I can't (won't) help you, but what sense does it make to start
 > > an ncurses application in the background?
 > > (hint: you might have to rip out ncurses)
 > 
 > ncurses makes this happend ? But when it's not in the background, it's okay.
 > 
 > This would mean I have to rewrite the program differently without using 
 > ncurses ? :(((
 > 
 > I guess I'll have to try something else than ntuxplayer. Or try to find 
 > someone to write it for me. Maybe somebody already did a similar 
 > application ?
 > 
 > I just tryied with DVB/apps/test/test_av_play, but I get the same 
 > results. Worse, I don't get the prompt back after a video was read.
 > 
 >  > Good luck.
 >  >
 >  > Johannes
 > 
 > Thanks. :/
 > 

Try this patch on the latest ntuxplayer.c and use the -c option:

--- ntuxplayer.c        Sun Nov 30 19:11:55 2003
+++ ntuxplayer.c.new    Thu Jan 22 20:09:04 2004
@@ -40,6 +40,7 @@
 #define MAXAPIDS 32
 int yskip = 0;
 int loop=0;
+int ncur=1;
 
 static inline ssize_t my_read(int fd, void *buf, size_t count)
 {
@@ -73,6 +74,7 @@
 }
 
 static void sw_mess(int cc, av_settings *av){
+       if (!ncur) return;
        switch(cc){
        case 'z':
                mvprintw(yskip+1,30,
@@ -171,18 +173,22 @@
        ipack pack;
        uint64_t l = 0;
        switch_t sw;
-       int fl_skip;
+       int fl_skip=0;
        uint32_t t,startt=0;
        uint32_t lastt=0;
        int hour=0, min=0, sec=0;
+       int nfd = NFD-1;
 
        sw.stop = NULL;
 
-       pfd[0].fd = STDIN_FILENO;
-       pfd[0].events = POLLIN;
-       
-       pfd[1].fd = fd;
-       pfd[1].events = POLLOUT;
+       if (ncur){
+               pfd[1].fd = STDIN_FILENO;
+               pfd[1].events = POLLIN;
+               nfd++;
+       }
+
+       pfd[0].fd = fd;
+       pfd[0].events = POLLOUT;
 
        if (fda) audioSetAVSync(fda, 1);
        if (!next){
@@ -202,9 +208,11 @@
 
        length = current_file_length(filefd);
 
-       fl_skip = yskip;
-       mvprintw(fl_skip,0,"File length: %2.2f MB                      ",
-                (double)length/1024/1024);
+       if (ncur){
+               fl_skip = yskip;
+               mvprintw(fl_skip,0,"File length: %2.2f MB                      ",
+                        (double)length/1024/1024);
+       }
        count = my_read(filefd,buf,BUFFY);
        if ( find_time_stamp(buf, count, &t)) startt = t;
 
@@ -212,10 +220,12 @@
        if (count > 0)  l+= count;
        
        set_volume(fda, av->volume, av);
-       mvprintw(yskip+2,30,
-                "Volume: %d",av->volume);
-       mvprintw(yskip+1,30, "playback started  ");
-       refresh();
+       if (ncur){
+               mvprintw(yskip+2,30,
+                        "Volume: %d",av->volume);
+               mvprintw(yskip+1,30, "playback started  ");
+               refresh();
+       }
 
        sw.fdv = fd;
        sw.fda = fda;
@@ -236,11 +246,13 @@
 
                if (count > 0) l+= count;
                length = current_file_length(filefd);
-               mvprintw(fl_skip,0,"File length: %2.2f MB                      ",
-                        (double)length/1024/1024);
-               mvprintw(yskip+2,0,"read %03.2f%%",100.0*l/length);
-               mvprintw(yskip+3,0,"time %02d:%02d:%02d",hour, min, sec);
-               refresh();
+               if (ncur){
+                       mvprintw(fl_skip,0,"File length: %2.2f MB                      
",
+                                (double)length/1024/1024);
+                       mvprintw(yskip+2,0,"read %03.2f%%",100.0*l/length);
+                       mvprintw(yskip+3,0,"time %02d:%02d:%02d",hour, min, sec);
+                       refresh();
+               }
 
                written = 0;
                while(count >0 && written < count){
@@ -248,19 +260,19 @@
                                instant_repack((uint8_t *)buf, count, &pack);
                                written = count;
 #ifdef HAVE_LIBA52
-                               if (av->soft_ac3)
+                               if (av->soft_ac3 && ncur)
                                        mvprintw(yskip+4,0,"a52_track: 0x%02x",
                                                 av->a52_track);
 #endif
                        }
-                       if ((p=poll(pfd,NFD,100))>0){
+                       if ((p=poll(pfd,nfd,100))>0){
                                if (!av->needs_demux && 
-                                   pfd[1].revents & POLLOUT){
+                                   pfd[0].revents & POLLOUT){
                                        c = my_write(fd,(uint8_t *)(buf+written),
                                                        count-written);
                                        if (c > 0) written += c;
                                }
-                               if (pfd[0].revents & POLLIN){
+                               if (ncur && pfd[1].revents & POLLIN){
                                        int cc = getch();
                                        sw_mess(cc, av);
                                        cc = av_switches(cc,&sw,&l); 
@@ -342,8 +354,9 @@
        uint16_t apids[MAXAPIDS];
        int napid=0, a;
        switch_t sw;
-       int fl_skip;
-               
+       int fl_skip=0;
+       int nfd2 = NFD2;
+
        sw.stop = NULL;
        
        sprintf(devnamed,DEMUX_DEV,dev, devnb);
@@ -358,9 +371,11 @@
        
        if (av->nopat) find_avpids(filefd, &vpid, &apid);
        length = current_file_length(filefd);
-       fl_skip = yskip-2;
-       mvprintw(fl_skip,0,"File length: %2.2f MB               ",
-                (double)length/(1024*1024));
+       if (ncur){
+               fl_skip = yskip-2;
+               mvprintw(fl_skip,0,"File length: %2.2f MB               ",
+                        (double)length/(1024*1024));
+       }
 
        if (apid && vpid) ppid = 1;
        else {
@@ -382,18 +397,21 @@
        set_pat_filt(fd);
 
        if (vpid && apid) set_av_filts(fd_vdemux, fd_ademux, vpid, apid);
-       mvprintw(yskip+2,0,
-                "apid %d (0x%02x)   ",apid,apid);
-       mvprintw(yskip+3,0,
-                "vpid %d (0x%02x)   ",vpid,vpid);
-
+       if (ncur){
+               mvprintw(yskip+2,0,
+                        "apid %d (0x%02x)   ",apid,apid);
+               mvprintw(yskip+3,0,
+                        "vpid %d (0x%02x)   ",vpid,vpid);
+       }
        
        set_volume(fda, av->volume, av);
-       mvprintw(yskip+1,30,
-                "Volume: %d",av->volume);
+       if (ncur){
+               mvprintw(yskip+1,30,
+                        "Volume: %d",av->volume);
 
-       mvprintw(yskip,30, "playback started  ");
-       refresh();
+               mvprintw(yskip,30, "playback started  ");
+               refresh();
+       }
 
        sw.fdv = fdv;
        sw.fda = fda;
@@ -442,7 +460,7 @@
                                             count-written);
                                if (c>0) written += c;
                        }
-                       if (poll(pfd,NFD2,100)){
+                       if (ncur && poll(pfd,nfd2,100)){
                                
                                if (pfd[0].revents & POLLIN){
                                        int cc = getch();
@@ -497,20 +515,23 @@
        int filefd = p->ffd;
        switch_t sw;
        av_settings *av;
+       int nfd=1;
 
        sw.stop = NULL;
 
        if (fd <0 ) return;
 
-       pfd[1].fd = fd;
-       pfd[1].events = POLLOUT;
-       pfd[0].fd = STDIN_FILENO;
-       pfd[0].events = POLLIN;
-
+       pfd[0].fd = fd;
+       pfd[0].events = POLLOUT;
+       if (ncur){
+               pfd[1].fd = STDIN_FILENO;
+               pfd[1].events = POLLIN;
+               nfd++;
+       }
        
        av = (av_settings *)p->data2;
        set_volume(p->fd2, av->volume, av);
-       mvprintw(yskip+2,30,"Volume: %d", av->volume);
+       if (ncur) mvprintw(yskip+2,30,"Volume: %d", av->volume);
 
        if(p->playing < 4 && p->fd == p->fd1){
                videoPlay(p->fd1);
@@ -527,8 +548,8 @@
 
        written = 0;
        while(written < count){
-               if (poll(pfd,2,100)){
-                       if (pfd[1].revents & POLLOUT){
+               if (poll(pfd,nfd,100)){
+                       if (pfd[0].revents & POLLOUT){
                                if (av->needs_demux){
                                        c = write_demux(fd,buf+written,
                                                        count-written, av,
@@ -540,7 +561,7 @@
                                        if (c>0) written += c;
                                }
                        }
-                       if (pfd[0].revents & POLLIN){
+                       if (ncur && pfd[1].revents & POLLIN){
 
                                        int cc = getch();
                                        sw_mess(cc, av);
@@ -579,7 +600,7 @@
        uint16_t pid;
        ipack pa, pv;
        ipack *p;
-       int fl_skip;
+       int fl_skip=0;
 
        videoSetBlank(fd, 0);
        audioSelectSource(fda,AUDIO_SOURCE_MEMORY);
@@ -592,10 +613,12 @@
        init_ipack(&pa, IPACKS, write_out,0);
        init_ipack(&pv, IPACKS, write_out,0);
        length = current_file_length(filefd);
-       fl_skip = yskip-1;
-       mvprintw(fl_skip,0,"File length: %2.2f MB           ",
-                (double)length/(1024*1024));
-       refresh();
+       if (ncur){
+               fl_skip = yskip-1;
+               mvprintw(fl_skip,0,"File length: %2.2f MB           ",
+                        (double)length/(1024*1024));
+               refresh();
+       }
 
        pa.data = (void *)&pa;
        pv.data = (void *)&pv;
@@ -622,9 +645,11 @@
 
 
        if ( i == 188){
-               mvprintw(yskip+1,0,"Not a TS\n");
-               yskip++;
-               refresh();
+               if (ncur){
+                       mvprintw(yskip+1,0,"Not a TS\n");
+                       yskip++;
+                       refresh();
+               }
        } else {
                memcpy(buf,mbuf+i,TS_SIZE-i);
                count = my_read(filefd,mbuf,i);
@@ -633,14 +658,16 @@
                i = 188;
        }
 
-       mvprintw(yskip+3,0,
-                "apid %d (0x%02x)   ",pida,pida);
-       mvprintw(yskip+4,0,
-                "vpid %d (0x%02x)   ",pidv,pidv);
+       if (ncur){
+               mvprintw(yskip+3,0,
+                        "apid %d (0x%02x)   ",pida,pida);
+               mvprintw(yskip+4,0,
+                        "vpid %d (0x%02x)   ",pidv,pidv);
+       }
 
        pv.playing = 1;
        pa.playing = 1;
-       mvprintw(yskip+1,30, "playback started  ");
+       if (ncur) mvprintw(yskip+1,30, "playback started  ");
 
        while ( l < (int64_t)length && pv.playing > 0 && pa.playing > 0){
                if ( ( count = my_read(filefd,buf+i,IN_SIZE-i)+i) < 0){
@@ -652,10 +679,12 @@
                
                l = lseek(filefd, 0, SEEK_CUR);
                length = current_file_length(filefd);
-               mvprintw(fl_skip,0,"File length: %2.2f MB           ",
-                        (double)length/(1024*1024));
-               mvprintw(yskip+1,0,"read %03.2f%%              ",100.0*l/length);
-               refresh();
+               if (ncur){
+                       mvprintw(fl_skip,0,"File length: %2.2f MB           ",
+                                (double)length/(1024*1024));
+                       mvprintw(yskip+1,0,"read %03.2f%%              
",100.0*l/length);
+                       refresh();
+               }
 
                for( i = 0; i < count; i+= TS_SIZE){
                        uint8_t off = 0;
@@ -733,6 +762,7 @@
        fprintf(stderr,"  --softaud,          -l:  decode audio by software\n");
        fprintf(stderr,"  --loop,             -r:  loop files\n");
        fprintf(stderr,"  --nopat,            -s:  try to find apid and vpid without 
PAT\n");
+       fprintf(stderr,"  --nocurses,         -c:  don't use ncurses\n");
        exit(1);
 }
 
@@ -848,11 +878,12 @@
                 {"loop", no_argument, NULL, 'r'},
                 {"a52track", required_argument , NULL, 't'},
                 {"video_id",required_argument , NULL, 'b'},
+                {"nocurses",required_argument , NULL, 'c'},
                 {"help", no_argument , NULL, 'h'},
                 {0, 0, 0, 0}
                };
 
-               c = getopt_long (argc, argv, "li:hv:a:d:noe:st:rp:b:",
+               c = getopt_long (argc, argv, "li:hv:a:d:noe:st:rp:b:c",
                                 long_options, &option_index);
                if (c == -1)
                        break;
@@ -924,6 +955,9 @@
                        video_id = strtol(optarg,(char **)NULL, 0);
                        break;
 
+               case 'c':
+                       ncur=0;
+                       break;
                case 'h':
                case '?':
                default:
@@ -995,32 +1029,33 @@
                if (stin) { 
                        play_file_video_stdin(fdv, fda, &av);
                } else {
-                       curses_init();
-                       mvprintw(yskip++,0,"Welcome to NTuxplayer");
-                       yskip++;
-                       mvprintw(yskip,0,"p : playback");
-                       mvprintw(yskip++,30,"s : stop playback");
-                       mvprintw(yskip,0,"c : continue playback");
-                       mvprintw(yskip++,30,"z : freeze picture");
-                       mvprintw(yskip,0,"f : fast forward");
-                       mvprintw(yskip++,30,"m : slow motion");
-                       mvprintw(yskip,0,"+ : increase volume");
-                       mvprintw(yskip++,30,"- : decrease volume");
-                       mvprintw(yskip,0,"n : skip to next file or end");
-                       mvprintw(yskip++,30,"b : skip to previous file");
-                       mvprintw(yskip,0,"->: skip ahead");
-                       mvprintw(yskip++,30,"^ : big skip ahead");
-                       mvprintw(yskip,0,"<-: skip back");
-                       mvprintw(yskip++,30,"|v:  big skip back");
-                       mvprintw(yskip,0,"l : toggle loop");
-                       mvprintw(yskip++,30,"q : quit");
-                       if (av.aud_ext)
-                               mvprintw(yskip++,0,"1-8: audio track");
-
-                       
-                       yskip+=2;
-                       refresh();
-
+                       if(ncur) {
+                               curses_init();
+                               mvprintw(yskip++,0,"Welcome to NTuxplayer");
+                               yskip++;
+                               mvprintw(yskip,0,"p : playback");
+                               mvprintw(yskip++,30,"s : stop playback");
+                               mvprintw(yskip,0,"c : continue playback");
+                               mvprintw(yskip++,30,"z : freeze picture");
+                               mvprintw(yskip,0,"f : fast forward");
+                               mvprintw(yskip++,30,"m : slow motion");
+                               mvprintw(yskip,0,"+ : increase volume");
+                               mvprintw(yskip++,30,"- : decrease volume");
+                               mvprintw(yskip,0,"n : skip to next file or end");
+                               mvprintw(yskip++,30,"b : skip to previous file");
+                               mvprintw(yskip,0,"->: skip ahead");
+                               mvprintw(yskip++,30,"^ : big skip ahead");
+                               mvprintw(yskip,0,"<-: skip back");
+                               mvprintw(yskip++,30,"|v:  big skip back");
+                               mvprintw(yskip,0,"l : toggle loop");
+                               mvprintw(yskip++,30,"q : quit");
+                               if (av.aud_ext)
+                                       mvprintw(yskip++,0,"1-8: audio track");
+                               
+                               
+                               yskip+=2;
+                               refresh();
+                       }
                        for ( i=optind; i< argc; i++){
                                av.loop = loop;
                                if ( i < optind ) i = optind;
@@ -1033,7 +1068,7 @@
                                        return -1;
                                }
                                mvprintw(yskip-1,0,"Playing %s      ",argv[i]);
-                               refresh();
+                               if(ncur) refresh();
                                if (play_file_video(filefd, 
                                                    fdv, fda, i-optind, &av )
                                    && i>=optind)
@@ -1077,26 +1112,28 @@
                                play_file_dvr_stdin(fd_dvr, fda, fdv, apid, 
                                                    vpid, dev, devnb, &av);
                        } else {
-                               curses_init();
-                               mvprintw(yskip++,0,"Welcome to NTuxplayer");
-                               yskip++;
-                               mvprintw(yskip,0,"c : continue playback");
-                               mvprintw(yskip++,30,"z : freeze picture");
-                               mvprintw(yskip,0,"f : fast forward");
-                               mvprintw(yskip++,30,"m : slow motion");
-                               mvprintw(yskip,0,"+ : increase volume");
-                               mvprintw(yskip++,30,"- : increase volume");
-                               mvprintw(yskip,0,"n : skip to next file or end");
-                               mvprintw(yskip++,30,"b : skip to previous file");
-                               mvprintw(yskip,0,"->: skip ahead");
-                               mvprintw(yskip++,30,"^ : big skip ahead");
-                               mvprintw(yskip,0,"<-: skip back");
-                               mvprintw(yskip++,30,"|v:  big skip back");
-                               mvprintw(yskip,0,"l : toggle loop");
-                               mvprintw(yskip++,30,"q: quit");
-
-                               yskip+=4;
-                               refresh();
+                               if (ncur){
+                                       curses_init();
+                                       mvprintw(yskip++,0,"Welcome to NTuxplayer");
+                                       yskip++;
+                                       mvprintw(yskip,0,"c : continue playback");
+                                       mvprintw(yskip++,30,"z : freeze picture");
+                                       mvprintw(yskip,0,"f : fast forward");
+                                       mvprintw(yskip++,30,"m : slow motion");
+                                       mvprintw(yskip,0,"+ : increase volume");
+                                       mvprintw(yskip++,30,"- : increase volume");
+                                       mvprintw(yskip,0,"n : skip to next file or 
end");
+                                       mvprintw(yskip++,30,"b : skip to previous 
file");
+                                       mvprintw(yskip,0,"->: skip ahead");
+                                       mvprintw(yskip++,30,"^ : big skip ahead");
+                                       mvprintw(yskip,0,"<-: skip back");
+                                       mvprintw(yskip++,30,"|v:  big skip back");
+                                       mvprintw(yskip,0,"l : toggle loop");
+                                       mvprintw(yskip++,30,"q: quit");
+                                       
+                                       yskip+=4;
+                                       refresh();
+                               }
                                do{
                                        for ( i=optind; i< argc; i++){
                                                if ( i < optind ) i = optind;
@@ -1112,7 +1149,7 @@
                                                }
                                                mvprintw(yskip-3,0,"Playing %s        "
                                                         ,argv[i]);
-                                               refresh();
+                                               if(ncur) refresh();
                                                if (play_file_dvr(fd_dvr, fda, fdv, 
                                                                  filefd, apid, 
                                                                  vpid, dev, devnb, 
&av)
@@ -1140,28 +1177,29 @@
                        if (stin) { 
                                play_ts_video_stdin(fdv, fda, apid, vpid,&av);
                        } else {
-                               curses_init();
-                               mvprintw(yskip++,0,"Welcome to NTuxplayer");
-                               yskip++;
-                               mvprintw(yskip,0,"p : playback");
-                               mvprintw(yskip++,30,"s : stop playback");
-                               mvprintw(yskip,0,"c : continue playback");
-                               mvprintw(yskip++,30,"z : freeze picture");
-                               mvprintw(yskip,0,"f : fast forward");
-                               mvprintw(yskip++,30,"m : slow motion");
-                               mvprintw(yskip,0,"+ : increase volume");
-                               mvprintw(yskip++,30,"- : increase volume");
-                               mvprintw(yskip,0,"->: skip ahead");
-                               mvprintw(yskip++,30,"^ : big skip ahead");
-                               mvprintw(yskip,0,"<-: skip back");
-                               mvprintw(yskip++,30,"|v: big skip back");
-                               mvprintw(yskip,0,"n : skip to next file or end");
-                               mvprintw(yskip++,30,"b : skip to previous file");
-                               mvprintw(yskip,0,"l : toggle loop");
-                               mvprintw(yskip++,30,"q: quit");
-                               yskip+=3;
-                               refresh();
-
+                               if (ncur){
+                                       curses_init();
+                                       mvprintw(yskip++,0,"Welcome to NTuxplayer");
+                                       yskip++;
+                                       mvprintw(yskip,0,"p : playback");
+                                       mvprintw(yskip++,30,"s : stop playback");
+                                       mvprintw(yskip,0,"c : continue playback");
+                                       mvprintw(yskip++,30,"z : freeze picture");
+                                       mvprintw(yskip,0,"f : fast forward");
+                                       mvprintw(yskip++,30,"m : slow motion");
+                                       mvprintw(yskip,0,"+ : increase volume");
+                                       mvprintw(yskip++,30,"- : increase volume");
+                                       mvprintw(yskip,0,"->: skip ahead");
+                                       mvprintw(yskip++,30,"^ : big skip ahead");
+                                       mvprintw(yskip,0,"<-: skip back");
+                                       mvprintw(yskip++,30,"|v: big skip back");
+                                       mvprintw(yskip,0,"n : skip to next file or 
end");
+                                       mvprintw(yskip++,30,"b : skip to previous 
file");
+                                       mvprintw(yskip,0,"l : toggle loop");
+                                       mvprintw(yskip++,30,"q: quit");
+                                       yskip+=3;
+                                       refresh();
+                               }
                                do{
                                        for ( i=optind; i< argc; i++){
                                                if ( i < optind ) i = optind;
@@ -1177,7 +1215,7 @@
                                                }
                                                mvprintw(yskip-2,0,"Playing %s        "
                                                 ,argv[i]);
-                                               refresh();
+                                               if (ncur) refresh();
                                                if (play_ts_video(filefd, fdv, fda, 
                                                                  apid, vpid, &av)
                                                    && i>=optind)


-- 
Info:
To unsubscribe send a mail to [EMAIL PROTECTED] with "unsubscribe linux-dvb" as 
subject.

Reply via email to