If a driver doesn't have cdio_get_audio_volume, increase/decrease

volume arbitrarily start off with 50 (midway in range) and we've arranged
that cdda-player will do it's own bookkeeping to figure out what the
current volume level is.
This commit is contained in:
rocky
2006-04-07 02:01:46 +00:00
parent 48d9626a53
commit aca503e166

View File

@@ -1,5 +1,5 @@
/* /*
$Id: cdda-player.c,v 1.45 2006/04/05 11:46:54 rocky Exp $ $Id: cdda-player.c,v 1.46 2006/04/07 02:01:46 rocky Exp $
Copyright (C) 2005, 2006 Rocky Bernstein <rocky@panix.com> Copyright (C) 2005, 2006 Rocky Bernstein <rocky@panix.com>
@@ -347,16 +347,33 @@ set_volume_level(CdIo_t *p_cdio, uint8_t i_level)
{ {
const unsigned int i_new_level= rounded_div(i_level*256, 100); const unsigned int i_new_level= rounded_div(i_level*256, 100);
unsigned int i; unsigned int i;
driver_return_code_t rc;
for (i=0; i<=3; i++) { for (i=0; i<=3; i++) {
audio_volume.level[i] = i_new_level; audio_volume.level[i] = i_new_level;
} }
return DRIVER_OP_SUCCESS == cdio_audio_set_volume(p_cdio, &audio_volume);
cdio_audio_set_volume(p_cdio, &audio_volume);
if ( DRIVER_OP_SUCCESS != rc ) {
/* If we can't do a get volume, audio_volume.level is used as
a second-best guess. But if this set failed restore it to
an invalid value so we don't get confused and think that this
was set. */
for (i=0; i<=3; i++) {
audio_volume.level[i] = 0;
}
} else {
/* Set i_vol_port so volume levels set above will get used. */
i_vol_port=0;
}
return rc;
} }
static bool static bool
decrease_volume_level(CdIo_t *p_cdio) decrease_volume_level(CdIo_t *p_cdio)
{ {
if (i_volume_level == 0) i_volume_level = 50;
if (i_volume_level <= 1) if (i_volume_level <= 1)
return false; return false;
else else
@@ -366,6 +383,7 @@ decrease_volume_level(CdIo_t *p_cdio)
static bool static bool
increase_volume_level(CdIo_t *p_cdio) increase_volume_level(CdIo_t *p_cdio)
{ {
if (i_volume_level == 0) i_volume_level = 50;
if (i_volume_level >= 100) if (i_volume_level >= 100)
return false; return false;
else else
@@ -544,10 +562,9 @@ read_toc(CdIo_t *p_cdio)
i_last_audio_track = i_last_track; i_last_audio_track = i_last_track;
if ( DRIVER_OP_SUCCESS == cdio_audio_get_volume(p_cdio, &audio_volume) ) { cdio_audio_get_volume(p_cdio, &audio_volume);
for (i_vol_port=0; i_vol_port<4; i_vol_port++) { for (i_vol_port=0; i_vol_port<4; i_vol_port++) {
if (audio_volume.level[i_vol_port] > 0) break; if (audio_volume.level[i_vol_port] > 0) break;
}
} }
if ( CDIO_INVALID_TRACK == i_first_track || if ( CDIO_INVALID_TRACK == i_first_track ||
@@ -696,9 +713,8 @@ display_status(bool b_status_only)
} else if (sub.audio_status == CDIO_MMC_READ_SUB_ST_PAUSED || } else if (sub.audio_status == CDIO_MMC_READ_SUB_ST_PAUSED ||
sub.audio_status == CDIO_MMC_READ_SUB_ST_PLAY) { sub.audio_status == CDIO_MMC_READ_SUB_ST_PLAY) {
if (i_vol_port < 4 && cdio_audio_get_volume(p_cdio, &audio_volume);
DRIVER_OP_SUCCESS == cdio_audio_get_volume(p_cdio, &audio_volume) ) if (i_vol_port < 4) {
{
i_volume_level = rounded_div(audio_volume.level[i_vol_port]*100, 256); i_volume_level = rounded_div(audio_volume.level[i_vol_port]*100, 256);
sprintf(line, sprintf(line,
"track %2d - %02x:%02x of %s (%02x:%02x abs) %s volume: %d", "track %2d - %02x:%02x of %s (%02x:%02x abs) %s volume: %d",