ports/90001: mplayer bsdbt848 does not handle SECAM norm

Vladimir Kushnir vkushnir at i.kiev.ua
Mon Dec 5 23:30:04 UTC 2005


>Number:         90001
>Category:       ports
>Synopsis:       mplayer bsdbt848 does not handle SECAM norm
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Dec 05 23:30:02 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Vladimir Kushnir
>Release:        -CURRENT
>Organization:
BITP
>Environment:
FreeBSD kushnir1.kiev.ua 7.0-CURRENT FreeBSD 7.0-CURRENT #0: Mon Dec  5 04:07:02 EET 2005     root at kushnir1.kiev.ua:/usr/obj/usr/src/sys/KUSHNIR  amd64
>Description:
MPlayer (multimedia/mplayer) cannot change TV norm to SCAM but uses PAL instead
>How-To-Repeat:
Run mplayer with "-v -tv norm=SECAM" or "-v -tv norm=2". It doesn't change norm and reports of 
 tv.c: norm_from_string(SECAM): Bogus norm parameter, setting PAL.
The reason: mplayer's tvi_bsdbt848.c uses ioctl METEORSFMT which doe nothing for METEOR_FMT_SECAM
>Fix:
Use ioctl BT848SFMT instead:

*** libmpdemux/tvi_bsdbt848.c.orig	Tue Dec  6 01:11:38 2005
--- libmpdemux/tvi_bsdbt848.c	Mon Dec  5 20:12:28 2005
***************
*** 299,309 ****
          int req_mode = (int)*(void **)arg;
  	u_short tmp_fps;
  
!         priv->iformat = METEOR_FMT_AUTOMODE;
  
          if(req_mode == TV_NORM_PAL) 
              {
!             priv->iformat = METEOR_FMT_PAL;
              priv->maxheight = PAL_HEIGHT;
              priv->maxwidth = PAL_WIDTH;
              priv->maxfps = PAL_FPS;
--- 299,309 ----
          int req_mode = (int)*(void **)arg;
  	u_short tmp_fps;
  
!         priv->iformat = BT848_IFORM_F_AUTO;
  
          if(req_mode == TV_NORM_PAL) 
              {
!             priv->iformat = BT848_IFORM_F_PALBDGHI;
              priv->maxheight = PAL_HEIGHT;
              priv->maxwidth = PAL_WIDTH;
              priv->maxfps = PAL_FPS;
***************
*** 324,330 ****
  
          if(req_mode == TV_NORM_NTSC) 
              {
!             priv->iformat = METEOR_FMT_NTSC;
              priv->maxheight = NTSC_HEIGHT;
              priv->maxwidth = NTSC_WIDTH;
              priv->maxfps = NTSC_FPS;
--- 324,330 ----
  
          if(req_mode == TV_NORM_NTSC) 
              {
!             priv->iformat = BT848_IFORM_F_NTSCM;
              priv->maxheight = NTSC_HEIGHT;
              priv->maxwidth = NTSC_WIDTH;
              priv->maxfps = NTSC_FPS;
***************
*** 348,356 ****
                  }
              }
  
!         if(req_mode == TV_NORM_SECAM) priv->iformat = METEOR_FMT_SECAM;
  
!         if(ioctl(priv->btfd, METEORSFMT, &priv->iformat) < 0) 
              {
              perror("format:ioctl");
              return(TVI_CONTROL_FALSE);
--- 348,375 ----
                  }
              }
  
!         if(req_mode == TV_NORM_SECAM)
!             {
!             priv->iformat = BT848_IFORM_F_SECAM;
!             priv->maxheight = PAL_HEIGHT;
!             priv->maxwidth = PAL_WIDTH;
!             priv->maxfps = PAL_FPS;
!             priv->fps = PAL_FPS;
! 
!             if(priv->fps > priv->maxfps) priv->fps = priv->maxfps;
! 
!             if(priv->geom.rows > priv->maxheight)
!                 {
!                 priv->geom.rows = priv->maxheight;
!                 }
! 
!             if(priv->geom.columns > priv->maxwidth)
!                 {
!                 priv->geom.columns = priv->maxwidth;
!                 }
!             }
  
!         if(ioctl(priv->btfd, BT848SFMT, &priv->iformat) < 0) 
              {
              perror("format:ioctl");
              return(TVI_CONTROL_FALSE);
***************
*** 481,487 ****
  priv->videoready = TRUE;
  priv->btdev = strdup("/dev/bktr0");
  priv->immediatemode = FALSE;
! priv->iformat = METEOR_FMT_PAL;
  priv->maxheight = PAL_HEIGHT;
  priv->maxwidth = PAL_WIDTH;
  priv->maxfps = PAL_FPS;
--- 500,506 ----
  priv->videoready = TRUE;
  priv->btdev = strdup("/dev/bktr0");
  priv->immediatemode = FALSE;
! priv->iformat = BT848_IFORM_F_PALBDGHI;
  priv->maxheight = PAL_HEIGHT;
  priv->maxwidth = PAL_WIDTH;
  priv->maxfps = PAL_FPS;
***************
*** 506,512 ****
      }
  
  if(priv->videoready == TRUE && 
!    ioctl(priv->btfd, METEORSFMT, &priv->iformat) < 0) 
      {
      perror("FMT:ioctl");
      }
--- 525,531 ----
      }
  
  if(priv->videoready == TRUE && 
!    ioctl(priv->btfd, BT848SFMT, &priv->iformat) < 0) 
      {
      perror("FMT:ioctl");
      }

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list