summaryrefslogtreecommitdiff
path: root/src/rhd_audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rhd_audio.c')
-rw-r--r--src/rhd_audio.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/rhd_audio.c b/src/rhd_audio.c
index de5f5ce..5e3c4e2 100644
--- a/src/rhd_audio.c
+++ b/src/rhd_audio.c
@@ -90,14 +90,16 @@ AudioRate(struct rhdAudio* Audio)
return result;
}
+#if 0
/*
- * something playing ?
+ * something playing ? (not used anymore)
*/
static Bool
AudioPlaying(struct rhdAudio* Audio)
{
return (RHDRegRead(Audio, AUDIO_PLAYING) >> 4) & 1;
}
+#endif
/*
* iec 60958 status bits
@@ -124,35 +126,36 @@ static CARD32
AudioUpdateHdmi(OsTimerPtr timer, CARD32 time, pointer ptr)
{
struct rhdAudio *Audio = (struct rhdAudio*)ptr;
- Bool playing = AudioPlaying(Audio);
int channels = AudioChannels(Audio);
int rate = AudioRate(Audio);
int bps = AudioBitsPerSample(Audio);
CARD8 status_bits = AudioStatusBits(Audio);
CARD8 category_code = AudioCategoryCode(Audio);
+ Bool changes = FALSE;
+
struct rhdHdmi* hdmi;
- if(playing != Audio->SavedPlaying ||
- channels != Audio->SavedChannels ||
- rate != Audio->SavedRate ||
- bps != Audio->SavedBitsPerSample ||
- status_bits != Audio->SavedStatusBits ||
- category_code != Audio->SavedCategoryCode) {
+ changes |= channels != Audio->SavedChannels;
+ changes |= rate != Audio->SavedRate;
+ changes |= bps != Audio->SavedBitsPerSample;
+ changes |= status_bits != Audio->SavedStatusBits;
+ changes |= category_code != Audio->SavedCategoryCode;
- Audio->SavedPlaying = playing;
+ if(changes) {
Audio->SavedChannels = channels;
Audio->SavedRate = rate;
Audio->SavedBitsPerSample = bps;
Audio->SavedStatusBits = status_bits;
Audio->SavedCategoryCode = category_code;
+ }
for(hdmi=Audio->Registered; hdmi != NULL; hdmi=hdmi->Next)
+ if(changes || RHDHdmiBufferStatusChanged(hdmi))
RHDHdmiUpdateAudioSettings(
- hdmi, playing, channels,
+ hdmi, channels,
rate, bps, status_bits,
category_code);
- }
return AUDIO_TIMER_INTERVALL;
}
@@ -303,6 +306,9 @@ RHDAudioRegisterHdmi(RHDPtr rhdPtr, struct rhdHdmi* rhdHdmi)
if(!rhdHdmi)
return;
+ /* make shure the HDMI interface is not registered */
+ RHDAudioUnregisterHdmi(rhdPtr, rhdHdmi);
+
rhdHdmi->Next = Audio->Registered;
Audio->Registered = rhdHdmi;
}
@@ -318,7 +324,7 @@ void RHDAudioUnregisterHdmi(RHDPtr rhdPtr, struct rhdHdmi* rhdHdmi)
if (!Audio) return;
RHDFUNC(Audio);
- for(hdmiPtr=&Audio->Registered; hdmiPtr!=NULL;hdmiPtr=&(*hdmiPtr)->Next)
+ for(hdmiPtr=&Audio->Registered; *hdmiPtr!=NULL;hdmiPtr=&(*hdmiPtr)->Next)
if(*hdmiPtr == rhdHdmi) {
*hdmiPtr = rhdHdmi->Next;
rhdHdmi->Next = NULL;