Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 1 May 2011 08:10:11 GMT
From:      Zhihao Yuan <lichray@gmail.com>
To:        freebsd-ports-bugs@FreeBSD.org
Subject:   Re: ports/156747: multimedia/mplayer: fix 24-bits OSS + some improvements
Message-ID:  <201105010810.p418ABiq055682@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR ports/156747; it has been noted by GNATS.

From: Zhihao Yuan <lichray@gmail.com>
To: Pan Tsu <inyaoo@gmail.com>
Cc: bug-followup@freebsd.org
Subject: Re: ports/156747: multimedia/mplayer: fix 24-bits OSS + some improvements
Date: Sun, 1 May 2011 03:07:27 -0500

 On Sun, May 1, 2011 at 2:32 AM, Pan Tsu <inyaoo@gmail.com> wrote:
 > Zhihao Yuan <lichray@gmail.com> writes:
 >
 >> =C2=A0 =C2=A0 =C2=A0 mplayer does not detects 24-bits OSS correctly. It =
 only
 >> detects AFMT_S24_PACKED, which is not available for the OSS on
 >> FreeBSD.
 > [...]
 >> +@@ -72,6 +72,10 @@ static int format2oss(int format)
 >> + =C2=A0 =C2=A0 case AF_FORMAT_S16_BE: return AFMT_S16_BE;
 >> + #ifdef AFMT_S24_PACKED
 >> + =C2=A0 =C2=A0 case AF_FORMAT_S24_LE: return AFMT_S24_PACKED;
 >
 >> ++#elif defined(AFMT_S24_LE) && defined(__FreeBSD__)
 >> ++ =C2=A0 =C2=A0case AF_FORMAT_S24_LE: return AFMT_S24_LE;
 >> ++#elif defined(AFMT_S24_BE) && defined(__FreeBSD__)
 >> ++ =C2=A0 =C2=A0case AF_FORMAT_S24_BE: return AFMT_S24_BE;
 >
 > Only signed 24bit formats? They do not seem to be specific to our OSS
 > implementation.
 >
 > =C2=A0$ cd audio/oss; make extract
 > =C2=A0$ fgrep -lr AFMT_S24_LE $(make -V WRKDIR)
 > =C2=A0[...]
 > =C2=A0WRKDIR/oss-v4.2-build2004-src-bsd/include/soundcard.h
 >
 > Not so for unsigned (*_U24_*) which are supported by libaf, too.
 > But they're similar to AFMT_U32_(LE|BE) that are used by ao_oss
 > *without* __FreeBSD__ ifdef around them.
 >
 > And because AFMT_S24_(LE|BE) are defined unconditionally on both little-
 > and big-endian systems only the first match would be compiled in,
 > i.e. only AFMT_S24_LE. How about below patch?
 >
 >> + #endif
 >> + #ifdef AFMT_U32_LE
 >> + =C2=A0 =C2=A0 case AF_FORMAT_U32_LE: return AFMT_U32_LE;
 >> +@@ -115,6 +119,10 @@ static int oss2format(int format)
 >> + =C2=A0 =C2=A0 case AFMT_S16_BE: return AF_FORMAT_S16_BE;
 >> + #ifdef AFMT_S24_PACKED
 >> + =C2=A0 =C2=A0 case AFMT_S24_PACKED: return AF_FORMAT_S24_LE;
 >> ++#elif defined(AFMT_S24_LE) && defined(__FreeBSD__)
 >> ++ =C2=A0 =C2=A0case AFMT_S24_LE: return AF_FORMAT_S24_LE;
 >> ++#elif defined(AFMT_S24_BE) && defined(__FreeBSD__)
 >> ++ =C2=A0 =C2=A0case AFMT_S24_BE: return AF_FORMAT_S24_BE;
 >> + #endif
 >> + #ifdef AFMT_U32_LE
 >> + =C2=A0 =C2=A0 case AFMT_U32_LE: return AF_FORMAT_U32_LE;
 >> +@@ -448,6 +456,7 @@ static void reset(void){
 >
 > --- a.diff begins here ---
 > Index: multimedia/mplayer/files/patch-libao2-ao_oss.c
 > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
 > RCS file: /a/.cvsup/ports/multimedia/mplayer/files/patch-libao2-ao_oss.c,=
 v
 > retrieving revision 1.4
 > diff -u -p -r1.4 patch-libao2-ao_oss.c
 > --- multimedia/mplayer/files/patch-libao2-ao_oss.c =C2=A0 =C2=A0 =C2=A021=
  Apr 2010 13:07:22 -0000 =C2=A0 =C2=A0 =C2=A01.4
 > +++ multimedia/mplayer/files/patch-libao2-ao_oss.c =C2=A0 =C2=A0 =C2=A01 =
 May 2011 07:26:38 -0000
 > @@ -1,5 +1,43 @@
 > =C2=A0--- libao2/ao_oss.c.orig =C2=A0 =C2=A0 =C2=A0 2009-05-12 21:58:57.0=
 00000000 -0500
 > =C2=A0+++ libao2/ao_oss.c =C2=A0 =C2=A02009-07-23 19:58:44.870097203 -050=
 0
 > +@@ -72,6 +72,18 @@ static int format2oss(int format)
 > + #ifdef AFMT_S24_PACKED
 > + =C2=A0 =C2=A0 case AF_FORMAT_S24_LE: return AFMT_S24_PACKED;
 > + #endif
 > ++#ifdef AFMT_U24_LE
 > ++ =C2=A0 =C2=A0case AF_FORMAT_U24_LE: return AFMT_U24_LE;
 > ++#endif
 > ++#ifdef AFMT_U24_BE
 > ++ =C2=A0 =C2=A0case AF_FORMAT_U24_BE: return AFMT_U24_BE;
 > ++#endif
 > ++#ifdef AFMT_S24_LE
 > ++ =C2=A0 =C2=A0case AF_FORMAT_S24_LE: return AFMT_S24_LE;
 > ++#endif
 > ++#ifdef AFMT_S24_BE
 > ++ =C2=A0 =C2=A0case AF_FORMAT_S24_BE: return AFMT_S24_BE;
 > ++#endif
 > + #ifdef AFMT_U32_LE
 > + =C2=A0 =C2=A0 case AF_FORMAT_U32_LE: return AFMT_U32_LE;
 > + #endif
 > +@@ -115,6 +127,18 @@ static int oss2format(int format)
 > + #ifdef AFMT_S24_PACKED
 > + =C2=A0 =C2=A0 case AFMT_S24_PACKED: return AF_FORMAT_S24_LE;
 > + #endif
 > ++#ifdef AFMT_U24_LE
 > ++ =C2=A0 =C2=A0case AFMT_U24_LE: return AF_FORMAT_U24_LE;
 > ++#endif
 > ++#ifdef AFMT_U24_BE
 > ++ =C2=A0 =C2=A0case AFMT_U24_BE: return AF_FORMAT_U24_BE;
 > ++#endif
 > ++#ifdef AFMT_S24_LE
 > ++ =C2=A0 =C2=A0case AFMT_S24_LE: return AF_FORMAT_S24_LE;
 > ++#endif
 > ++#ifdef AFMT_S24_BE
 > ++ =C2=A0 =C2=A0case AFMT_S24_BE: return AF_FORMAT_S24_BE;
 > ++#endif
 > + #ifdef AFMT_U32_LE
 > + =C2=A0 =C2=A0 case AFMT_U32_LE: return AF_FORMAT_U32_LE;
 > + #endif
 > =C2=A0@@ -453,6 +453,7 @@
 > =C2=A0 =C2=A0fcntl(audio_fd, F_SETFD, FD_CLOEXEC);
 > =C2=A0#endif
 > --- a.diff ends here ---
 >
 
 I checked the 'official' oss header file (on linux/netbsd), and
 AFMT_*24_* exist in both FreeBSD and OSS 4.x. I agree with the new
 patch.
 
 --=20
 Zhihao Yuan
 The best way to predict the future is to invent it.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201105010810.p418ABiq055682>