spark: add volume control for alsa mixer

Origin commit data
------------------
Branch: master
Commit: 7cd67c9fad
Author: martii <you@example.com>
Date: 2012-09-05 (Wed, 05 Sep 2012)


------------------
No further description and justification available within origin commit message!

------------------
This commit was generated by Migit
This commit is contained in:
martii
2012-09-05 19:08:45 +02:00
parent b4ac2ad25e
commit e0c90be5e7
5 changed files with 114 additions and 1 deletions

View File

@@ -43,9 +43,11 @@ libstb_hal_a_LIBADD += \
azbox/video.o azbox/video.o
endif endif
if BOXTYPE_SPARK if BOXTYPE_SPARK
libstb_hal_test_LDADD += -lasound
SUBDIRS += libspark libeplayer3 SUBDIRS += libspark libeplayer3
libstb_hal_a_LIBADD += \ libstb_hal_a_LIBADD += \
libspark/audio.o \ libspark/audio.o \
libspark/audio_mixer.o \
libspark/dmx.o \ libspark/dmx.o \
libspark/init.o \ libspark/init.o \
libspark/irmp.o \ libspark/irmp.o \

View File

@@ -3,6 +3,9 @@
#include "../libtriple/audio_td.h" #include "../libtriple/audio_td.h"
#elif HAVE_SPARK_HARDWARE #elif HAVE_SPARK_HARDWARE
#include "../libspark/audio_lib.h" #include "../libspark/audio_lib.h"
#ifdef MARTII
#include "../libspark/audio_mixer.h"
#endif
#elif HAVE_AZBOX_HARDWARE #elif HAVE_AZBOX_HARDWARE
#include "../azbox/audio_lib.h" #include "../azbox/audio_lib.h"
#else #else

View File

@@ -5,7 +5,7 @@ INCLUDES = \
noinst_LIBRARIES = libspark.a noinst_LIBRARIES = libspark.a
AM_CXXFLAGS = -fno-rtti -fno-exceptions -fno-strict-aliasing AM_CXXFLAGS = -fno-rtti -fno-exceptions -fno-strict-aliasing
AM_LDFLAGS = -lpthread AM_LDFLAGS = -lpthread -lasound
libspark_a_SOURCES = \ libspark_a_SOURCES = \
irmp.c \ irmp.c \
@@ -13,6 +13,7 @@ libspark_a_SOURCES = \
dmx.cpp \ dmx.cpp \
video.cpp \ video.cpp \
audio.cpp \ audio.cpp \
audio_mixer.cpp \
init.cpp \ init.cpp \
playback_libeplayer3.cpp \ playback_libeplayer3.cpp \
pwrmngr.cpp \ pwrmngr.cpp \

70
libspark/audio_mixer.cpp Normal file
View File

@@ -0,0 +1,70 @@
/*
* audio_mixer.c
*
* (C) 2012 martii
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <audio_mixer.h>
mixerVolume::mixerVolume(const char *name, const char *card, long volume) {
sid = NULL;
elem = NULL;
handle = NULL;
min = 0;
max = 100;
char cardId[10];
if (!name || !card)
return;
int cx = snd_card_get_index(card);
if (cx < 0 || cx > 31)
return;
snprintf(cardId, sizeof(cardId), "hw:%i", cx);
if (0 > snd_mixer_open(&handle, 0))
return;
if (0 > snd_mixer_attach(handle, cardId))
return;
if (0 > snd_mixer_selem_register(handle, NULL, NULL))
return;
if (0 > snd_mixer_load(handle))
return;
snd_mixer_selem_id_alloca(&sid);
if (!sid)
return;
snd_mixer_selem_id_set_index(sid, 0);
snd_mixer_selem_id_set_name(sid, name);
elem = snd_mixer_find_selem(handle, sid);
if (elem) {
snd_mixer_selem_get_playback_volume_range(elem, &min, &max);
setVolume(volume);
}
}
mixerVolume::~mixerVolume()
{
if (handle)
snd_mixer_close(handle);
if (sid)
snd_mixer_selem_id_free(sid);
}
bool mixerVolume::setVolume(long volume) {
return elem
&& (volume > -1)
&& (volume < 101)
&& !snd_mixer_selem_set_playback_volume_all(elem, min + volume * (max - min)/101);
}

37
libspark/audio_mixer.h Normal file
View File

@@ -0,0 +1,37 @@
/*
* audio_mixer.h
*
* (C) 2012 martii
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __AUDIO_MIXER_H__
#define __AUDIO_MIXER_H__
#include <alsa/asoundlib.h>
class mixerVolume
{
private:
long min, max;
snd_mixer_t *handle;
snd_mixer_elem_t* elem;
snd_mixer_selem_id_t *sid;
public:
mixerVolume(const char *selem_name, const char *Card, long volume = -1);
~mixerVolume(void);
bool setVolume(long volume);
};
#endif