+#include <lib/base/eerror.h>
#include <lib/dvb/volume.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>
-#if HAVE_DVB_API_VERSION < 3
-#define VIDEO_DEV "/dev/dvb/card0/video0"
-#define AUDIO_DEV "/dev/dvb/card0/audio0"
-#include <ost/audio.h>
-#include <ost/video.h>
-#else
#define VIDEO_DEV "/dev/dvb/adapter0/video0"
#define AUDIO_DEV "/dev/dvb/adapter0/audio0"
#include <linux/dvb/audio.h>
#include <linux/dvb/video.h>
-#endif
eDVBVolumecontrol* eDVBVolumecontrol::instance = NULL;
void eDVBVolumecontrol::volumeUp(int left, int right)
{
- printf("[volume.cpp] Volume up\n");
setVolume(leftVol + left, rightVol + right);
}
void eDVBVolumecontrol::volumeDown(int left, int right)
{
- printf("[volume.cpp] Volume down\n");
setVolume(leftVol - left, rightVol - right);
}
void eDVBVolumecontrol::setVolume(int left, int right)
{
+ /* left, right is 0..100 */
leftVol = checkVolume(left);
rightVol = checkVolume(right);
+ /* convert to -1dB steps */
left = 63 - leftVol * 63 / 100;
right = 63 - rightVol * 63 / 100;
-
-#if HAVE_DVB_API_VERSION < 3
- audioMixer_t mixer;
-#else
- audio_mixer_t mixer;
-#endif
-
-#ifdef HAVE_DVB_API_VERSION
- mixer.volume_left = (left * left) / 64;
- mixer.volume_right = (right * right) / 64;
-#endif
-
- int fd = openMixer();
-#ifdef HAVE_DVB_API_VERSION
+ /* now range is 63..0, where 0 is loudest */
+
+ audio_mixer_t mixer;
+
+ mixer.volume_left = left;
+ mixer.volume_right = right;
+
+ eDebug("Setvolume: %d %d (raw)", leftVol, rightVol);
+ eDebug("Setvolume: %d %d (-1db)", left, right);
+
+ int fd = openMixer();
+ if (fd >= 0)
+ {
ioctl(fd, AUDIO_SET_MIXER, &mixer);
-#endif
closeMixer(fd);
-
- printf("Setvolume: %d %d\n", leftVol, rightVol);
- printf("Setvolume: %d %d\n", left, right);
-
+ return;
+ }
+
//HACK?
FILE *f;
if((f = fopen("/proc/stb/avs/0/volume", "wb")) == NULL) {
- printf("cannot open /proc/stb/avs/0/volume\n");
+ eDebug("cannot open /proc/stb/avs/0/volume(%m)");
return;
}
-
- fprintf(f, "%d", left);
+
+ fprintf(f, "%d", left); /* in -1dB */
fclose(f);
}
int eDVBVolumecontrol::getVolume()
{
- if (isMuted())
- return 0;
return leftVol;
}
void eDVBVolumecontrol::volumeMute()
{
int fd = openMixer();
-#ifdef HAVE_DVB_API_VERSION
ioctl(fd, AUDIO_SET_MUTE, true);
-#endif
closeMixer(fd);
muted = true;
//HACK?
FILE *f;
if((f = fopen("/proc/stb/audio/j1_mute", "wb")) == NULL) {
- printf("cannot open /proc/stb/audio/j1_mute\n");
+ eDebug("cannot open /proc/stb/audio/j1_mute(%m)");
return;
}
void eDVBVolumecontrol::volumeUnMute()
{
int fd = openMixer();
-#ifdef HAVE_DVB_API_VERSION
ioctl(fd, AUDIO_SET_MUTE, false);
-#endif
closeMixer(fd);
muted = false;
//HACK?
FILE *f;
if((f = fopen("/proc/stb/audio/j1_mute", "wb")) == NULL) {
- printf("cannot open /proc/stb/audio/j1_mute\n");
+ eDebug("cannot open /proc/stb/audio/j1_mute(%m)");
return;
}