mozilla-esd.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Wed, 28 Jul 2010 07:36:02 +0200
branchmozilla-1.9.2
changeset 112 22a2c93a47ee
permissions -rw-r--r--
libesd fix (bmo#579877)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
112
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     1
# HG changeset patch
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     2
# User Wolfgang Rosenauer <wr@rosenauer.org>
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     3
# Parent a93100d87cc9841c6e3e4b29a47bb7b91f23415f
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
Bug 579877 - sound output via libesd broken if no esound daemon running. r=karlt
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     6
diff --git a/widget/src/gtk2/nsSound.cpp b/widget/src/gtk2/nsSound.cpp
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     7
--- a/widget/src/gtk2/nsSound.cpp
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     8
+++ b/widget/src/gtk2/nsSound.cpp
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     9
@@ -52,36 +52,31 @@
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    10
 #include "nsCOMPtr.h"
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    11
 #include "nsAutoPtr.h"
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    12
 #include "nsString.h"
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    13
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    14
 #include <stdio.h>
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    15
 #include <unistd.h>
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    16
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    17
 #include <gtk/gtk.h>
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    18
-/* used with esd_open_sound */
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    19
-static int esdref = -1;
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    20
 static PRLibrary *elib = nsnull;
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    21
 static PRLibrary *libcanberra = nsnull;
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    22
 static PRLibrary* libasound = nsnull;
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    23
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
 // the following from esd.h
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    25
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    26
 #define ESD_BITS8  (0x0000)
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
 #define ESD_BITS16 (0x0001) 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    28
 #define ESD_MONO (0x0010)
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    29
 #define ESD_STEREO (0x0020) 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    30
 #define ESD_STREAM (0x0000)
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
 #define ESD_PLAY (0x1000)
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    32
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    33
 #define WAV_MIN_LENGTH 44
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    34
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
-typedef int (*EsdOpenSoundType)(const char *host);
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
-typedef int (*EsdCloseType)(int);
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    37
-
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    38
 /* used to play the sounds from the find symbol call */
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
 typedef int  (*EsdPlayStreamType) (int, int, const char *, const char *);
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
 typedef int  (*EsdAudioOpenType)  (void);
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
 typedef int  (*EsdAudioWriteType) (const void *, int);
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    42
 typedef void (*EsdAudioCloseType) (void);
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    44
 /* used to find and play common system event sounds.
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
    this interfaces with libcanberra.
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46
@@ -126,50 +121,30 @@ NS_IMPL_ISUPPORTS2(nsSound, nsISound, ns
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    47
 ////////////////////////////////////////////////////////////////////////
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    48
 nsSound::nsSound()
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    49
 {
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    50
     mInited = PR_FALSE;
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    51
 }
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    52
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    53
 nsSound::~nsSound()
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    54
 {
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    55
-    if (esdref >= 0) {
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    56
-        EsdCloseType EsdClose = (EsdCloseType) PR_FindFunctionSymbol(elib, "esd_close");
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    57
-        if (EsdClose)
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    58
-            (*EsdClose)(esdref);
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    59
-        esdref = -1;
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    60
-    }
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    61
 }
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    62
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    63
 NS_IMETHODIMP
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    64
 nsSound::Init()
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    65
 {
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    66
     // This function is designed so that no library is compulsory, and
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    67
     // one library missing doesn't cause the other(s) to not be used.
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    68
     if (mInited) 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    69
         return NS_OK;
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    70
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    71
     mInited = PR_TRUE;
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    72
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    73
     if (!elib) {
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    74
         elib = PR_LoadLibrary("libesd.so.0");
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    75
-        if (elib) {
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    76
-            EsdOpenSoundType EsdOpenSound =
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    77
-                (EsdOpenSoundType) PR_FindFunctionSymbol(elib, "esd_open_sound");
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    78
-            if (!EsdOpenSound) {
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    79
-                PR_UnloadLibrary(elib);
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    80
-                elib = nsnull;
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    81
-            } else {
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    82
-                esdref = (*EsdOpenSound)("localhost");
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    83
-                if (esdref < 0) {
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    84
-                    PR_UnloadLibrary(elib);
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    85
-                    elib = nsnull;
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    86
-                }
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    87
-            }
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    88
-        }
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    89
     }
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    90
 
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    91
     if (!libasound) {
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    92
         PRFuncPtr func = PR_FindFunctionSymbolAndLibrary("snd_lib_error_set_handler",
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    93
                                                          &libasound);
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    94
         if (libasound) {
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    95
             snd_lib_error_set_handler_fn snd_lib_error_set_handler =
22a2c93a47ee libesd fix (bmo#579877)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    96
                  (snd_lib_error_set_handler_fn) func;