Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Aug 2013 16:44:20 GMT
From:      Jan Beich <jbeich@tormail.org>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/181655: [patch] multimedia/gstreamer1-plugins-good: add more sample formats to oss plugin
Message-ID:  <201308291644.r7TGiKWu083145@oldred.freebsd.org>
Resent-Message-ID: <201308291650.r7TGo0DG066906@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         181655
>Category:       ports
>Synopsis:       [patch] multimedia/gstreamer1-plugins-good: add more sample formats to oss plugin
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Thu Aug 29 16:50:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator:     Jan Beich
>Release:        
>Organization:
>Environment:
static noise when playing .mp3 with 'playbin' or having
'audioresample' in the filter chain

>Description:

>How-To-Repeat:

>Fix:
--- oss_formats.diff begins here ---
--- sys/oss/gstosshelper.c~
+++ sys/oss/gstosshelper.c
@@ -95,9 +95,13 @@ gst_oss_helper_probe_caps (gint fd)
   format_mask = AFMT_U8 | AFMT_S8;
 
   if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
-    format_mask |= AFMT_S16_LE | AFMT_U16_LE;
+    format_mask |= AFMT_S16_LE | AFMT_U16_LE
+      | AFMT_S24_LE | AFMT_U24_LE
+      | AFMT_S32_LE | AFMT_U32_LE;
   else
-    format_mask |= AFMT_S16_BE | AFMT_U16_BE;
+    format_mask |= AFMT_S16_BE | AFMT_U16_BE
+      | AFMT_S24_BE | AFMT_U24_BE
+      | AFMT_S32_BE | AFMT_U32_BE;
 
   caps = gst_caps_new_empty ();
 
@@ -169,6 +173,9 @@ gst_oss_helper_get_format_structure (uns
   const gchar *format;
 
   switch (format_bit) {
+    case AFMT_S8:
+      format = "S8";
+      break;
     case AFMT_U8:
       format = "U8";
       break;
@@ -178,15 +185,36 @@ gst_oss_helper_get_format_structure (uns
     case AFMT_S16_BE:
       format = "S16BE";
       break;
-    case AFMT_S8:
-      format = "S8";
-      break;
     case AFMT_U16_LE:
       format = "U16LE";
       break;
     case AFMT_U16_BE:
       format = "U16BE";
       break;
+    case AFMT_S24_LE:
+      format = "S24LE";
+      break;
+    case AFMT_S24_BE:
+      format = "S24BE";
+      break;
+    case AFMT_U24_LE:
+      format = "U24LE";
+      break;
+    case AFMT_U24_BE:
+      format = "U24BE";
+      break;
+    case AFMT_S32_LE:
+      format = "S32LE";
+      break;
+    case AFMT_S32_BE:
+      format = "S32BE";
+      break;
+    case AFMT_U32_LE:
+      format = "U32LE";
+      break;
+    case AFMT_U32_BE:
+      format = "U32BE";
+      break;
     default:
       g_assert_not_reached ();
       return NULL;
--- sys/oss/gstosssink.c~
+++ sys/oss/gstosssink.c
@@ -106,7 +106,10 @@ enum
   PROP_DEVICE,
 };
 
-#define FORMATS "{" GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)", S8, U8 }"
+#define FORMATS "{" GST_AUDIO_NE(S32)","GST_AUDIO_NE(U32)"," \
+                    GST_AUDIO_NE(S24)","GST_AUDIO_NE(U24)"," \
+                    GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)"," \
+                    "S8, U8 }"
 
 static GstStaticPadTemplate osssink_sink_factory =
     GST_STATIC_PAD_TEMPLATE ("sink",
@@ -321,6 +324,9 @@ gst_oss_sink_get_format (GstAudioRingBuf
     case GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW:
     {
       switch (rfmt) {
+        case GST_AUDIO_FORMAT_S8:
+          result = AFMT_S8;
+          break;
         case GST_AUDIO_FORMAT_U8:
           result = AFMT_U8;
           break;
@@ -330,15 +336,36 @@ gst_oss_sink_get_format (GstAudioRingBuf
         case GST_AUDIO_FORMAT_S16BE:
           result = AFMT_S16_BE;
           break;
-        case GST_AUDIO_FORMAT_S8:
-          result = AFMT_S8;
-          break;
         case GST_AUDIO_FORMAT_U16LE:
           result = AFMT_U16_LE;
           break;
         case GST_AUDIO_FORMAT_U16BE:
           result = AFMT_U16_BE;
           break;
+        case GST_AUDIO_FORMAT_S24LE:
+          result = AFMT_S24_LE;
+          break;
+        case GST_AUDIO_FORMAT_S24BE:
+          result = AFMT_S24_BE;
+          break;
+        case GST_AUDIO_FORMAT_U24LE:
+          result = AFMT_U24_LE;
+          break;
+        case GST_AUDIO_FORMAT_U24BE:
+          result = AFMT_U24_BE;
+          break;
+        case GST_AUDIO_FORMAT_S32LE:
+          result = AFMT_S32_LE;
+          break;
+        case GST_AUDIO_FORMAT_S32BE:
+          result = AFMT_S32_BE;
+          break;
+        case GST_AUDIO_FORMAT_U32LE:
+          result = AFMT_U32_LE;
+          break;
+        case GST_AUDIO_FORMAT_U32BE:
+          result = AFMT_U32_BE;
+          break;
         default:
           result = 0;
           break;
@@ -441,7 +468,7 @@ gst_oss_sink_prepare (GstAudioSink * asi
   rate = GST_AUDIO_INFO_RATE (&spec->info);
   channels = GST_AUDIO_INFO_CHANNELS (&spec->info);
 
-  if (width != 16 && width != 8)
+  if (width != 32 && width != 24 && width != 16 && width != 8)
     goto dodgy_width;
 
   SET_PARAM (oss, SNDCTL_DSP_SETFMT, tmp, "SETFMT");
--- sys/oss/gstosssrc.c~
+++ sys/oss/gstosssrc.c
@@ -100,7 +100,10 @@ static guint gst_oss_src_read (GstAudioS
 static guint gst_oss_src_delay (GstAudioSrc * asrc);
 static void gst_oss_src_reset (GstAudioSrc * asrc);
 
-#define FORMATS "{" GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)", S8, U8 }"
+#define FORMATS "{" GST_AUDIO_NE(S32)","GST_AUDIO_NE(U32)"," \
+                    GST_AUDIO_NE(S24)","GST_AUDIO_NE(U24)"," \
+                    GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)"," \
+                    "S8, U8 }"
 
 static GstStaticPadTemplate osssrc_src_factory = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
@@ -314,6 +317,9 @@ gst_oss_src_get_format (GstAudioRingBuff
     case GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW:
     {
       switch (rfmt) {
+        case GST_AUDIO_FORMAT_S8:
+          result = AFMT_S8;
+          break;
         case GST_AUDIO_FORMAT_U8:
           result = AFMT_U8;
           break;
@@ -323,15 +329,36 @@ gst_oss_src_get_format (GstAudioRingBuff
         case GST_AUDIO_FORMAT_S16BE:
           result = AFMT_S16_BE;
           break;
-        case GST_AUDIO_FORMAT_S8:
-          result = AFMT_S8;
-          break;
         case GST_AUDIO_FORMAT_U16LE:
           result = AFMT_U16_LE;
           break;
         case GST_AUDIO_FORMAT_U16BE:
           result = AFMT_U16_BE;
           break;
+        case GST_AUDIO_FORMAT_S24LE:
+          result = AFMT_S24_LE;
+          break;
+        case GST_AUDIO_FORMAT_S24BE:
+          result = AFMT_S24_BE;
+          break;
+        case GST_AUDIO_FORMAT_U24LE:
+          result = AFMT_U24_LE;
+          break;
+        case GST_AUDIO_FORMAT_U24BE:
+          result = AFMT_U24_BE;
+          break;
+        case GST_AUDIO_FORMAT_S32LE:
+          result = AFMT_S32_LE;
+          break;
+        case GST_AUDIO_FORMAT_S32BE:
+          result = AFMT_S32_BE;
+          break;
+        case GST_AUDIO_FORMAT_U32LE:
+          result = AFMT_U32_LE;
+          break;
+        case GST_AUDIO_FORMAT_U32BE:
+          result = AFMT_U32_BE;
+          break;
         default:
           result = 0;
           break;
@@ -428,7 +455,7 @@ gst_oss_src_prepare (GstAudioSrc * asrc,
   rate = GST_AUDIO_INFO_RATE (&spec->info);
   channels = GST_AUDIO_INFO_CHANNELS (&spec->info);
 
-  if (width != 16 && width != 8)
+  if (width != 32 && width != 24 && width != 16 && width != 8)
     goto dodgy_width;
 
   tmp = ilog2 (spec->segsize);
--- oss_formats.diff ends here ---


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



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