[MPlayer-dev-eng] [PATCH] dvdnav

Ötvös Attila oattila at chello.hu
Sat Jan 7 21:17:30 CET 2006


2006. január 6. 15.29 dátummal Diego Biurrun ezt írta:
> Here is some more feedback.
>
> Compilation fails if Live555 (used to be called LIVE.COM) is enabled:
>
> cc -c -I../libvo -I../../libvo -I/usr/X11R6/include -g -O4   -maltivec
> -mabi=altivec -pipe -ffast-math -fomit-frame-pointer -D_REENTRANT
> -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64  -I.. -I../loader
> -I../libavutil -I../libavcodec -I../libavformat
> -I/usr/local/live/liveMedia/include
> -I/usr/local/live/UsageEnvironment/include
> -I/usr/local/live/BasicUsageEnvironment/include
> -I/usr/local/live/groupsock/include -o demux_rtp.o demux_rtp.cpp
> stream_dvdnav.h:1053: error: expected ',' or '...' before 'this'
> stream_dvdnav.h:1062: error: expected ',' or '...' before 'this'
> make[1]: *** [demux_rtp.o] Error 1
> make[1]: Leaving directory `/home/diego/src/mplayer/vanilla/libmpdemux'
> make: *** [libmpdemux/libmpdemux.a] Error 2
>

--- libmpdemux/stream_dvdnav.h	2006-01-06 16:38:19.000000000 +0100
+++ libmpdemux/stream_dvdnav.h	2006-01-06 16:40:05.000000000 +0100
@@ -1050,7 +1050,7 @@
 int8_t dvdnav_get_audio_logical_stream(dvdnav_t *self, uint8_t audio_num);
 
 #ifdef USE_MPDVDNAV
-dvdnav_status_t dvdnav_get_audio_attr(dvdnav_t *this, uint8_t audio_mum, 
audio_attr_t *audio_attr);
+dvdnav_status_t dvdnav_get_audio_attr(dvdnav_t *self, uint8_t audio_mum, 
audio_attr_t *audio_attr);
 #endif
 
 /*
@@ -1059,7 +1059,7 @@
 int8_t dvdnav_get_spu_logical_stream(dvdnav_t *self, uint8_t subp_num);
 
 #ifdef USE_MPDVDNAV
-dvdnav_status_t dvdnav_get_spu_attr(dvdnav_t *this, uint8_t audio_mum, 
subp_attr_t *subp_attr);
+dvdnav_status_t dvdnav_get_spu_attr(dvdnav_t *self, uint8_t audio_mum, 
subp_attr_t *subp_attr);
 #endif
 
 /*

>
> Some more issues:
>
> - Language selection does not appear to work.  When I select a different
>   language in a menu, the movie does not start.

My question: After the selection of the language if the playing didn't start 
automatically or the selection of the language interfered with the playing.

> - Sometimes items in menus are highlighted if the mouse/cursor is above
>   them, sometimes not.
> - With gmplayer in the small movie that is played before the real menu
>   comes up, if I move the mouse I get annoying "Not in a menu." error
>   messages on the console *and* as popups.

--- libmpdemux/stream_dvdnav.c	2006-01-03 23:04:33.000000000 +0100
+++ libmpdemux/stream_dvdnav.c	2006-01-06 18:49:23.000000000 +0100
@@ -6334,8 +6334,9 @@
     dvdnav_mouse_orig_x=dvdnav_mouse_x;
     dvdnav_mouse_orig_y=dvdnav_mouse_y;
     }
+  if (pnavpci->hli.hl_gi.btn_ns) {	/* is buttons */
   dvdnav_mouse_select(dvdnav_priv->dvdnav, pnavpci, dvdnav_mouse_orig_x, 
dvdnav_mouse_orig_y); /* mouse position select */
-  if (dvdnav_mouse_button) dvdnav_menu_action(dvdnav_priv, 
MP_CMD_DVDNAV_SELECT);	/* mouse button event */
+    if (dvdnav_mouse_button) dvdnav_menu_action(dvdnav_priv, 
MP_CMD_DVDNAV_SELECT); }	/* mouse button event */
   dvdnav_mouse_set=0;
   dvdnav_mouse_button=0;
   return;

> - On startup with gmplayer I get the error message "Virtual DVD machine
>   not started" or "Bad VM state." on the console and as popup.

-- libmpdemux/stream_dvdnav.c	2006-01-03 23:04:33.000000000 +0100
+++ libmpdemux/stream_dvdnav.c	2006-01-06 18:44:38.000000000 +0100
@@ -6105,7 +6105,7 @@
   }
 #endif
   dvdnav_priv_t* dvdnav_priv=s->priv;
-  int domain_vts=dvdnav_is_domain_vts(dvdnav_priv->dvdnav);
+  int domain_vts=dvdnav_priv->vts_domain;
   if(newpos!=s->pos) {
     if (!domain_vts)
       mp_msg(MSGT_STREAM,MSGL_V,"Cannot seek in DVDNAV streams yet!\n"); else 
{
@@ -6457,8 +6457,10 @@
 	    dvdnav_priv->vts_domain=dvdnav_is_domain_vts(dvdnav_priv->dvdnav);
 	    dvdnav_get_position(dvdnav_priv->dvdnav, &(dvdnav_priv->tpos), 
&(dvdnav_priv->tlen));
 	    dvdnav_get_number_of_titles(dvdnav_priv->dvdnav, 
&(dvdnav_priv->titles_nr));
-	    dvdnav_current_title_info(dvdnav_priv->dvdnav, &dvdnav_priv->title, 
&dvdnav_priv->part);
+	    dvdnav_priv->part=0;
+	    dvdnav_priv->title=0;
 	    if (!(dvdnav_priv->vts_domain)) dvdnav_priv->chapters_nr=0; else {
+	      dvdnav_current_title_info(dvdnav_priv->dvdnav, &dvdnav_priv->title, 
&dvdnav_priv->part);
 	      dvdnav_get_number_of_parts(dvdnav_priv->dvdnav, dvdnav_priv->title, 
&dvdnav_priv->chapters_nr);
 
 	      uint32_t audio_id;

> - Some menus still fail to work at all.

I think the greatest problem is at the handling of the DVD NAV menu if there 
are few video packet and a large number of audio packet in gicen pgc.
In this case the audio packets determine the playing of the time of pgc. The 
video packet showes up at first frame and then it will be unchanged.
I suspect the demuxer reades the first video and audio packets then it tries 
to read the next video packets but from of this there isn't more therefore 
the demuxers reades the audio packets long before it must be. Therefore the 
mplayer does the processing of the menu in an instant that takes long 
secondes (eg.: 40 sec).
I am trying to find the solution so that the demuxer will be read at stated 
intervals from dvdnav stream if it hasn't any video packets. I hope the 
solution will solve most menu handling problems and the modify of the 
ds_fill_buffer in demuxer.c will be dropped out. The backlink was a faulty 
trial in the stream_dvdnav.c.

> I don't want to sound too negative, this revision is working much better
> than the last one already, keep up the good work!
>
> > (I am sorry to say that my English knowledge isn't good.)
>
> Don't worry, it's perfectly acceptable.
>
> Diego
>

Best regards!

Attila




More information about the MPlayer-dev-eng mailing list