Implemented left/right/stereo selection

This commit is contained in:
Klaus Schmidinger 2005-01-06 13:50:17 +01:00
parent 42ab8c8797
commit b387538887
7 changed files with 104 additions and 21 deletions

View File

@ -3254,7 +3254,7 @@ Video Disk Recorder Revision History
- The new remote control button "Audio" can be used to switch between different
audio tracks. The "Green" button in the "Main" menu has been changed from "Language"
to "Audio", since it now also controls switching between normal and Dolby Digital
audio tracks.
audio tracks (see MANUAL for details).
- The description of the audio tracks is now taken from the "component descriptors"
that are broadcast in the EPG data. However (as no big surprise), not all channels
actually provide useful data here, so there are now some additional EPG bugfixes,
@ -3269,3 +3269,9 @@ Video Disk Recorder Revision History
- The new setup option "DVB/Audio languages" can be used to control which audio
language shall be selected in case a channel broadcasts in different languages
(see MANUAL for details).
- The "Left" and "Right" keys in the "Audio" menu can be used to switch between
the left and right stereo channels in case there are different audio tracks
in these channels (see MANUAL for details).
Currently there is no visual indicator of the audio channel, yet, and it
doesn't work with the selected audio languages. It also doesn't appear to
work with some DVB cards (esp. the Siemens DVB-S Rev 1.3).

34
MANUAL
View File

@ -11,20 +11,20 @@ Version 1.2
possible, several keys have different meanings in the various
modes:
Key Normal VDR Channels Timers Edit/New Recordings Replay
Key Normal VDR Channels Timers Edit/New Recordings Replay Audio
Up Ch up Crsr up Crsr up Crsr up Crsr up Crsr up Play
Down Ch down Crsr down Crsr down Crsr down Crsr down Crsr down Pause
Left Prev group - Page up Page up Decrement Page up Search back
Right Next group - Page down Page down Increment Page down Search forward
Ok Ch display Select Switch Edit Accept Play Progress disp.
Menu Menu on Menu off Menu off Menu off Menu off Menu off Menu on
Back - Menu off VDR menu VDR menu Discard VDR menu Recordings menu
Red - Record Edit Edit ABC/abc Play/Commands(2) Jump
Green - Audio New New Ins/Ovr Rewind Skip -60s
Yellow - Pause live Delete Delete Delete Delete Skip +60s
Blue - Stop/Resume Mark On/Off(1) - Summary Stop
0..9 Ch select - Sort(3) Day(4) Numeric inp. Exec cmd(2) Editing
Up Ch up Crsr up Crsr up Crsr up Crsr up Crsr up Play Sel. track
Down Ch down Crsr down Crsr down Crsr down Crsr down Crsr down Pause Sel. track
Left Prev group - Page up Page up Decrement Page up Search back Sel. channel
Right Next group - Page down Page down Increment Page down Search forward Sel. channel
Ok Ch display Select Switch Edit Accept Play Progress disp. Switch & Close
Menu Menu on Menu off Menu off Menu off Menu off Menu off Menu on Menu on
Back - Menu off VDR menu VDR menu Discard VDR menu Recordings menu Close
Red - Record Edit Edit ABC/abc Play/Commands(2) Jump -
Green - Audio New New Ins/Ovr Rewind Skip -60s -
Yellow - Pause live Delete Delete Delete Delete Skip +60s -
Blue - Stop/Resume Mark On/Off(1) - Summary Stop -
0..9 Ch select - Sort(3) Day(4) Numeric inp. Exec cmd(2) Editing -
In a numerical input field (like the response to a CAM enquiry) the keys 0..9
are used to enter the data, and the Left key can be used to delete the last
@ -197,6 +197,14 @@ Version 1.2
keys can be used to switch between the audio tracks. If your remote control has
a dedicated "Audio" button, the first press of that button brings up the "Audio"
menu, and every further press switches to the next available audio track.
The "Left" and "Right" keys can be used to switch between "mono left", "stereo"
and "mono right" for channels that broadcast different audio tracks in the
left and right stereo channels (as was often done in the old analog days).
The "Ok" key explicitly switches to the selected track (in case the device
for some reason doesn't play it) and closes the "Audio" menu.
The "Audio" menu will automatically disappear after 5 seconds of user inactivity,
or if any key other than the ones described above is pressed.

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: device.c 1.67 2005/01/04 15:38:46 kls Exp $
* $Id: device.c 1.68 2005/01/06 13:30:30 kls Exp $
*/
#include "device.h"
@ -582,10 +582,23 @@ bool cDevice::HasProgramme(void)
return Replaying() || pidHandles[ptAudio].pid || pidHandles[ptVideo].pid;
}
int cDevice::GetAudioChannelDevice(void)
{
return 0;
}
void cDevice::SetAudioChannelDevice(int AudioChannel)
{
}
void cDevice::SetVolumeDevice(int Volume)
{
}
void cDevice::SetDigitalAudioDevice(bool On)
{
}
void cDevice::SetAudioTrackDevice(eTrackType Type)
{
}
@ -607,6 +620,18 @@ bool cDevice::ToggleMute(void)
return mute;
}
int cDevice::GetAudioChannel(void)
{
int c = GetAudioChannelDevice();
return (0 <= c && c <= 2) ? c : 0;
}
void cDevice::SetAudioChannel(int AudioChannel)
{
if (0 <= AudioChannel && AudioChannel <= 2)
SetAudioChannelDevice(AudioChannel);
}
void cDevice::SetVolume(int Volume, bool Absolute)
{
volume = min(max(Absolute ? Volume : volume + Volume, 0), MAXVOLUME);

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: device.h 1.49 2005/01/02 14:08:36 kls Exp $
* $Id: device.h 1.50 2005/01/06 13:27:42 kls Exp $
*/
#ifndef __DEVICE_H
@ -345,15 +345,26 @@ private:
bool mute;
int volume;
protected:
virtual int GetAudioChannelDevice(void);
///< Gets the current audio channel, which is stereo (0), mono left (1) or
///< mono right (2).
virtual void SetAudioChannelDevice(int AudioChannel);
///< Sets the audio channel to stereo (0), mono left (1) or mono right (2).
virtual void SetVolumeDevice(int Volume);
///< Sets the audio volume on this device (Volume = 0...255).
virtual void SetDigitalAudioDevice(bool On) {}
virtual void SetDigitalAudioDevice(bool On);
///< Tells the actual device that digital audio output shall be switched
///< on or off.
public:
bool IsMute(void) const { return mute; }
bool ToggleMute(void);
///< Turns the volume off or on and returns the new mute state.
int GetAudioChannel(void);
///< Gets the current audio channel, which is stereo (0), mono left (1) or
///< mono right (2).
void SetAudioChannel(int AudioChannel);
///< Sets the audio channel to stereo (0), mono left (1) or mono right (2).
///< Any other values will be silently ignored.
void SetVolume(int Volume, bool Absolute = false);
///< Sets the volume to the given value, either absolutely or relative to
///< the current volume.

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbdevice.c 1.109 2005/01/04 13:13:32 kls Exp $
* $Id: dvbdevice.c 1.110 2005/01/06 13:32:41 kls Exp $
*/
#include "dvbdevice.h"
@ -823,6 +823,22 @@ bool cDvbDevice::HasLock(int TimeoutMs)
return dvbTuner ? dvbTuner->Locked(TimeoutMs) : false;
}
int cDvbDevice::GetAudioChannelDevice(void)
{
if (HasDecoder()) {
audio_status_t as;
CHECK(ioctl(fd_audio, AUDIO_GET_STATUS, &as));
return as.channel_select;
}
return 0;
}
void cDvbDevice::SetAudioChannelDevice(int AudioChannel)
{
if (HasDecoder())
CHECK(ioctl(fd_audio, AUDIO_CHANNEL_SELECT, AudioChannel));
}
void cDvbDevice::SetVolumeDevice(int Volume)
{
if (HasDecoder()) {

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbdevice.h 1.31 2004/12/17 14:01:31 kls Exp $
* $Id: dvbdevice.h 1.32 2005/01/06 13:30:51 kls Exp $
*/
#ifndef __DVBDEVICE_H
@ -100,6 +100,8 @@ protected:
private:
bool digitalAudio;
protected:
virtual int GetAudioChannelDevice(void);
virtual void SetAudioChannelDevice(int AudioChannel);
virtual void SetVolumeDevice(int Volume);
virtual void SetDigitalAudioDevice(bool On);

19
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.c 1.328 2005/01/05 10:26:59 kls Exp $
* $Id: menu.c 1.329 2005/01/06 13:27:00 kls Exp $
*/
#include "menu.h"
@ -2913,6 +2913,20 @@ eOSState cDisplayTracks::ProcessKey(eKeys Key)
track++;
timeout.Set(TRACKTIMEOUT);
break;
case kLeft|k_Repeat:
case kLeft:
case kRight|k_Repeat:
case kRight: {
static int ac[] = { 1, 0, 2 };
int AudioChannel = ac[cDevice::PrimaryDevice()->GetAudioChannel()];
if (NORMALKEY(Key) == kLeft && AudioChannel > 0)
AudioChannel--;
else if (NORMALKEY(Key) == kRight && AudioChannel < 2)
AudioChannel++;
cDevice::PrimaryDevice()->SetAudioChannel(ac[AudioChannel]);
timeout.Set(TRACKTIMEOUT);
}
break;
case kAudio:
if (++track >= numTracks)
track = 0;
@ -2924,7 +2938,8 @@ eOSState cDisplayTracks::ProcessKey(eKeys Key)
timeout.Set();
break;
case kNone: break;
default: return osEnd;
default: if ((Key & k_Release) == 0)
return osEnd;
}
if (track != oldTrack) {
Show();