Mailing List archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[linux-dvb] Re: ntuxplayer hangs appending "&" :(
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 ecartis@linuxtv.org with "unsubscribe linux-dvb" as subject.
Home |
Main Index |
Thread Index