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