On Donnerstag 02 November 2006 16:40, Juha Pahkala wrote:
> Stefan Lucke wrote:
> > Quoting Juha Pahkala <[EMAIL PROTECTED]>:
> >
> >   
> >> Just updated my softdevice from 0.2.2 to 0.3.0. Picture-wise, it seems
> >> to be an improvement, I'm not sure whether I'm imagining things but the
> >> picture does seem crispier on the primary head of my g400... although I
> >> also updated dfb so not sure who's to blame ;)
> >>     
> >
> > Can you try:
> > a. unmute main pcm with alsamixer, or
> > b. comment out line 15 of audio_alsa.c: #define NO_MIXER
> >   
> 
> Hi Stefan,
> 
> Option A didn't make a difference but commenting out the NO_MIXER define
> fixed the problem! So thank you for your help (as well as softdevice in
> general ;)

Can you try the following patch which makes use of alsa mixer 
selectable via OSD ?


-- 
Stefan Lucke
Index: audio-alsa.c
===================================================================
RCS file: /cvsroot/softdevice/softdevice/audio-alsa.c,v
retrieving revision 1.2
diff -U3 -r1.2 audio-alsa.c
--- audio-alsa.c        25 Jul 2006 19:45:37 -0000      1.2
+++ audio-alsa.c        3 Nov 2006 22:31:46 -0000
@@ -12,7 +12,6 @@
 #include <alsa/asoundlib.h>
 
 #define PCM_FMT SND_PCM_FORMAT_S16_LE
-#define NO_MIXER
 
 //#define AUDIODEB(out...) {printf("AUDIO-ALSA[%04d]:",(int)(getTimeMilis() % 
10000));printf(out);}
 
@@ -50,6 +49,7 @@
     oldContext.samplerate = currContext.samplerate=48000;
     dsyslog("[softdevice-audio] Device opened! Ready to play");
     scale_Factor=0x7FFF;
+    this->setupStore = setupStore;
 }
 
 /* ----------------------------------------------------------------------------
@@ -80,14 +80,14 @@
              device, snd_strerror(err));
      return false;
    }
-   //force setting of the parameters after resume 
+   //force setting of the parameters after resume
    currContext.channels=0;
    return true;
 };
 
 /* ----------------------------------------------------------------------------
  */
-  
+
 void cAlsaAudioOut::Write(uchar *Data, int Length)
 {
     int     err;
@@ -111,10 +111,9 @@
   else
     size = Length/(2*currContext.channels);
 
-#ifdef NO_MIXER
-  // change the volume
-  Scale((int16_t*)Data,Length/2,scale_Factor);
-#endif
+  // change the volume without mixer
+  if (!setupStore->useMixer)
+    Scale((int16_t*)Data,Length/2,scale_Factor);
 
   while (size) {
     while (paused) usleep(1000); // block
@@ -225,7 +224,7 @@
           handleMutex.Unlock();
           return 0;
   };
-          
+
   if (!snd_pcm_delay(handle, &r) &&
       currContext.samplerate) {
     // successfully got delay
@@ -278,12 +277,12 @@
     };
     //printf("alsa-audio: SetParams\n");
     currContext=context;
- 
+
     handleMutex.Lock();
-    
-    if (handle) 
+
+    if (handle)
             snd_pcm_close(handle);
-    
+
     if ((err = snd_pcm_open(&handle,
                             device,
                             SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
@@ -410,56 +409,58 @@
  */
 void cAlsaAudioOut::SetVolume (int vol)
 {
-#ifdef NO_MIXER
-  scale_Factor = CalcScaleFactor(vol);
-  //printf("vol %d scale_Factor 0x%04x\n",vol,scale_Factor);
-  //scale_Factor = vol;
-#else
-    int                   err;
-    long                  mixerMin, mixerMax,
-                          setVol;
-    double                mixerRange,
-                          volPercent;
-    char                  *mName = "PCM",
-                          *cardName = "default";
-    snd_mixer_t           *mHandle;
-    snd_mixer_elem_t      *mElem;
-    snd_mixer_selem_id_t  *sId;
-
-  snd_mixer_selem_id_alloca(&sId);
-  snd_mixer_selem_id_set_name(sId, mName);
-  if ((err = snd_mixer_open(&mHandle, 0)) < 0) {
-      static int once = 0;
-    if (!once) {
-      dsyslog("[softdevice-audio]: cannot open mixer: %s (%s)",
-              mName,snd_strerror(err));
-      once = 1;
+  if (!setupStore->useMixer) {
+    scale_Factor = CalcScaleFactor(vol);
+    //printf("vol %d scale_Factor 0x%04x\n",vol,scale_Factor);
+    //scale_Factor = vol;
+  } else {
+      int                   err;
+      long                  mixerMin, mixerMax,
+                            setVol;
+      double                mixerRange,
+                            volPercent;
+      char                  *mName = "PCM",
+                            *cardName = "default";
+      snd_mixer_t           *mHandle;
+      snd_mixer_elem_t      *mElem;
+      snd_mixer_selem_id_t  *sId;
+
+    snd_mixer_selem_id_alloca(&sId);
+    snd_mixer_selem_id_set_name(sId, mName);
+    if ((err = snd_mixer_open(&mHandle, 0)) < 0) {
+        static int once = 0;
+      if (!once) {
+        dsyslog("[softdevice-audio]: cannot open mixer: %s (%s)",
+                mName,snd_strerror(err));
+        once = 1;
+      }
+      return;
     }
-    return;
-  }
 
-  snd_mixer_attach(mHandle, cardName);
-  snd_mixer_selem_register(mHandle, NULL, NULL);
-  snd_mixer_load(mHandle);
-  mElem = snd_mixer_find_selem(mHandle,sId);
-  /* --------------------------------------------------------------------------
-   * some cards don't have any master volume. so check return value
-   */
-  if (mElem)
-  {
-    snd_mixer_selem_get_playback_volume_range(mElem,&mixerMin,&mixerMax);
-    mixerRange = mixerMax - mixerMin;
-    volPercent = (double) vol / 255.0;
-    setVol = (int) (((double)mixerMin+(mixerRange*volPercent))+0.5);
-    
snd_mixer_selem_set_playback_volume(mElem,SND_MIXER_SCHN_FRONT_LEFT,setVol);
-    
snd_mixer_selem_set_playback_volume(mElem,SND_MIXER_SCHN_FRONT_RIGHT,setVol);
-    if (snd_mixer_selem_has_playback_switch(mElem))
-    {
-      snd_mixer_selem_set_playback_switch_all(mElem, (vol) ? 1 : 0);
+    snd_mixer_attach(mHandle, cardName);
+    snd_mixer_selem_register(mHandle, NULL, NULL);
+    snd_mixer_load(mHandle);
+    mElem = snd_mixer_find_selem(mHandle,sId);
+    /* ------------------------------------------------------------------------
+     * some cards don't have any master volume. so check return value
+     */
+    if (mElem) {
+      snd_mixer_selem_get_playback_volume_range(mElem,&mixerMin,&mixerMax);
+      mixerRange = mixerMax - mixerMin;
+      volPercent = (double) vol / 255.0;
+      setVol = (int) (((double)mixerMin+(mixerRange*volPercent))+0.5);
+      snd_mixer_selem_set_playback_volume(mElem,
+                                          SND_MIXER_SCHN_FRONT_LEFT,
+                                          setVol);
+      snd_mixer_selem_set_playback_volume(mElem,
+                                          SND_MIXER_SCHN_FRONT_RIGHT,
+                                          setVol);
+      if (snd_mixer_selem_has_playback_switch(mElem)) {
+        snd_mixer_selem_set_playback_switch_all(mElem, (vol) ? 1 : 0);
+      }
     }
-  }
 
-  snd_mixer_close(mHandle);
-#endif
+    snd_mixer_close(mHandle);
+  }
 }
 
Index: audio-alsa.h
===================================================================
RCS file: /cvsroot/softdevice/softdevice/audio-alsa.h,v
retrieving revision 1.1
diff -U3 -r1.1 audio-alsa.h
--- audio-alsa.h        10 Jul 2006 19:40:25 -0000      1.1
+++ audio-alsa.h        3 Nov 2006 22:31:46 -0000
@@ -29,6 +29,7 @@
                     ac3SpdifPro;
   SampleContext     oldContext;
   cAlsaAC3pt        ac3pt;
+  cSetupStore       *setupStore;
 
   bool  SetAC3PassThroughMode(bool on);
   void  Xrun(void);
@@ -52,4 +53,4 @@
 };
 
 
-#endif 
+#endif
Index: setup-softdevice-menu.c
===================================================================
RCS file: /cvsroot/softdevice/softdevice/setup-softdevice-menu.c,v
retrieving revision 1.8
diff -U3 -r1.8 setup-softdevice-menu.c
--- setup-softdevice-menu.c     9 Sep 2006 10:35:37 -0000       1.8
+++ setup-softdevice-menu.c     3 Nov 2006 22:31:47 -0000
@@ -352,6 +352,9 @@
                             (SETUP_AC3MODENAMES-1),
                             ac3ModeNames));
 
+  Add(new cMenuEditBoolItem(tr("Volume via H/W Mixer"),
+                            &data->useMixer, tr("no"), tr("yes")));
+
   Add(new cMenuEditStraItem(tr("Sync Mode"),
                             &data->syncTimerMode,
                             (SETUP_SYNC_TIMER_NAMES-1),
@@ -462,6 +465,7 @@
   SetupStore ("Suspend",            setupStore.shouldSuspend);
   SetupStore ("OSDalphablend",      setupStore.osdMode);
   SetupStore ("AC3Mode",            setupStore.ac3Mode);
+  SetupStore ("UseMixer",             setupStore.useMixer);
   SetupStore ("bufferMode",           setupStore.bufferMode);
   SetupStore ("mainMenu",             setupStore.mainMenu);
   SetupStore ("syncTimerMode",        setupStore.syncTimerMode);
Index: setup-softdevice.c
===================================================================
RCS file: /cvsroot/softdevice/softdevice/setup-softdevice.c,v
retrieving revision 1.46
diff -U3 -r1.46 setup-softdevice.c
--- setup-softdevice.c  25 Jul 2006 19:58:12 -0000      1.46
+++ setup-softdevice.c  3 Nov 2006 22:31:48 -0000
@@ -109,6 +109,7 @@
   avOffset      = 0;
   shouldSuspend = 0;
   ac3Mode       = 0;
+  useMixer      = 0;
   useMGAtv      = 0;
   viaTv         = 0;
   cle266HWdecode  = 0;
@@ -346,6 +347,10 @@
     ac3Mode = atoi (Value);
     fprintf(stderr, "[setup-softdevice] alsa ac3Mode set to: %d\n", ac3Mode);
     ac3Mode = clamp (0, ac3Mode, 3);
+  } else if (!strcasecmp(Name, "UseMixer")) {
+    useMixer = atoi (Value);
+    useMixer = clamp (0, useMixer, 1);
+    fprintf(stderr, "[setup-softdevice] alsa useMixer set to: %d\n", useMixer);
   } else if (!strcasecmp(Name, "AlsaAC3Device") && strlen(alsaAC3Device) == 0) 
{
     strncpy(alsaAC3Device, Value, ALSA_DEVICE_NAME_LENGTH);
     alsaAC3Device [ALSA_DEVICE_NAME_LENGTH-1] = 0;
Index: setup-softdevice.h
===================================================================
RCS file: /cvsroot/softdevice/softdevice/setup-softdevice.h,v
retrieving revision 1.34
diff -U3 -r1.34 setup-softdevice.h
--- setup-softdevice.h  9 Sep 2006 10:35:37 -0000       1.34
+++ setup-softdevice.h  3 Nov 2006 22:31:49 -0000
@@ -158,6 +158,7 @@
     int   shouldSuspend;
     int   osdMode;
     int   ac3Mode;
+    int   useMixer;
     int   bufferMode;
     int   mainMenu;
     int   syncTimerMode;
_______________________________________________
Softdevice-devel mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/softdevice-devel

Reply via email to