13 #include <sys/ioctl.h> 64 #define MIN_PRE_1_3_19_PRIVATESTREAM 10 112 esyslog(
"ERROR: too many devices!");
128 for (time_t t0 = time(NULL); time(NULL) - t0 < Timeout; ) {
156 esyslog(
"ERROR: invalid value in nextCardIndex(%d)", n);
191 isyslog(
"setting primary device to %d", n + 1);
201 esyslog(
"ERROR: invalid primary device number: %d", n + 1);
230 int MaxNumProvidedSystems = (1 << AvailableBits) - 1;
232 if (NumProvidedSystems > MaxNumProvidedSystems) {
233 esyslog(
"ERROR: device %d supports %d modulation systems but cDevice::GetDevice() currently only supports %d delivery systems which should be fixed", Device->
CardIndex() + 1, NumProvidedSystems, MaxNumProvidedSystems);
234 NumProvidedSystems = MaxNumProvidedSystems;
236 else if (NumProvidedSystems <= 0) {
237 esyslog(
"ERROR: device %d reported an invalid number (%d) of supported delivery systems - assuming 1", Device->
CardIndex() + 1, NumProvidedSystems);
238 NumProvidedSystems = 1;
240 return NumProvidedSystems;
247 int SlotPriority[NumCamSlots];
248 int NumUsableSlots = 0;
249 bool InternalCamNeeded =
false;
263 InternalCamNeeded =
true;
266 bool NeedsDetachReceivers =
false;
270 uint32_t Impact = 0xFFFFFFFF;
271 for (
int j = 0; j < NumCamSlots || !NumUsableSlots; j++) {
272 if (NumUsableSlots && SlotPriority[j] >
MAXPRIORITY)
287 if ((csj->
MtdActive() ? csi->MasterSlot() : csi) != csj)
306 imp <<= 1; imp |= ndr;
307 imp <<= 1; imp |= (NumUsableSlots || InternalCamNeeded) ? 0 :
device[i]->
HasCi();
315 NeedsDetachReceivers = ndr;
325 if (!Query && NeedsDetachReceivers)
420 if (d->IsTunedToTransponder(Channel))
422 if (d->ProvidesTransponder(Channel)) {
423 if (d->MaySwitchTransponder(Channel))
425 else if (!d->Occupied() && d->MaySwitchTransponder(Channel)) {
463 int fd = open(FileName, O_WRONLY | O_CREAT | O_NOFOLLOW | O_TRUNC, DEFFILEMODE);
468 if (
safe_write(fd, Image, ImageSize) == ImageSize)
469 isyslog(
"grabbed image to %s", FileName);
494 switch (VideoDisplayFormat) {
504 default:
esyslog(
"ERROR: invalid value for VideoDisplayFormat '%d'", VideoDisplayFormat);
544 if (Pid || PidType ==
ptPcr) {
547 if (PidType !=
ptPcr) {
584 esyslog(
"ERROR: no free slot for PID %d on device %d", Pid,
CardIndex() + 1);
609 if (Pid || PidType ==
ptPcr) {
611 if (PidType ==
ptPcr)
685 return safe_read(Handle, Buffer, Length);
755 bool cDevice::SignalStats(
int &Valid,
double *Strength,
double *Cnr,
double *BerPre,
double *BerPost,
double *Per,
int *Status)
const 791 for (
int i = 3; i--;) {
793 case scrOk:
return true;
799 default:
esyslog(
"ERROR: invalid return value from SetChannel");
809 Direction =
sgn(Direction);
816 while ((Channel = Channels->GetByNumber(n, Direction)) != NULL) {
820 n = Channel->
Number() + Direction;
825 dsyslog(
"skipped channel %d", first);
827 dsyslog(
"skipped channels %d..%d", first, n -
sgn(d));
850 bool NeedsTransferMode = LiveView && Device !=
PrimaryDevice();
853 NeedsTransferMode =
true;
860 if (NeedsTransferMode) {
896 if (Result ==
scrOk) {
909 if (!NeedsTransferMode)
931 return Seconds > 0 ? Seconds : 0;
1001 return (0 <= c && c <= 2) ? c : 0;
1006 if (0 <= AudioChannel && AudioChannel <= 2)
1029 if (DescriptionsOnly) {
1073 esyslog(
"ERROR: SetAvailableTrack called with invalid Type/Index (%d/%d)", Type, Index);
1085 for (
int i = FirstTrack; i <= LastTrack; i++) {
1138 if (TrackId && TrackId->
id) {
1154 int PreferredAudioChannel = 0;
1155 int LanguagePreference = -1;
1158 for (
int i = StartCheck; i <= EndCheck; i++) {
1163 PreferredAudioChannel = pos;
1174 dsyslog(
"setting audio track to %d (%d)", PreferredTrack, PreferredAudioChannel);
1187 int LanguagePreference = INT_MAX;
1250 if (Data[0] == 0x47) {
1256 int Pid =
TsPid(Data);
1266 int NewSize = Size + l;
1267 if (
uchar *NewBuffer = (
uchar *)realloc(buf, NewSize)) {
1270 memcpy(buf + Offset, p, l);
1288 int NewSize = Size + l;
1289 if (
uchar *NewBuffer = (
uchar *)realloc(buf, NewSize)) {
1292 memcpy(buf + Offset, p, l);
1295 esyslog(
"ERROR: out of memory");
1338 if (Player &&
player == Player) {
1393 bool FirstLoop =
true;
1397 while (
Start < End) {
1398 int d = End -
Start;
1415 int PayloadOffset = Data[8] + 9;
1418 if ((Data[7] & 0x01) && (Data[PayloadOffset - 3] & 0x81) == 0x01 && Data[PayloadOffset - 2] == 0x81)
1421 uchar SubStreamId = Data[PayloadOffset];
1422 uchar SubStreamType = SubStreamId & 0xF0;
1423 uchar SubStreamIndex = SubStreamId & 0x1F;
1426 pre_1_3_19_PrivateStreamDetected:
1429 SubStreamType = 0x80;
1434 switch (SubStreamType) {
1465 dsyslog(
"switching to pre 1.3.19 Dolby Digital compatibility mode - substream id = %02X", SubStreamId);
1468 goto pre_1_3_19_PrivateStreamDetected;
1481 esyslog(
"ERROR: incomplete PES packet write!");
1497 while (i <= Length - 6) {
1498 if (Data[i] == 0x00 && Data[i + 1] == 0x00 && Data[i + 2] == 0x01) {
1500 if (i + l > Length) {
1501 esyslog(
"ERROR: incomplete PES packet!");
1508 return i == 0 ? w : i;
1514 esyslog(
"ERROR: leftover PES data!");
1576 esyslog(
"ERROR: skipped %d bytes of TS fragment", Length);
1581 if (
int Skipped =
TS_SYNC(Data, Length))
1582 return Played + Skipped;
1583 int Pid =
TsPid(Data);
1586 if (PayloadOffset <
TS_SIZE) {
1595 return Played ? Played : w;
1603 return Played ? Played : w;
1618 return Played ? Played : w;
1658 #define TS_SCRAMBLING_TIMEOUT 3 // seconds to wait until a TS becomes unscrambled 1659 #define TS_SCRAMBLING_TIME_OK 3 // seconds before a Channel/CAM combination is marked as known to decrypt 1660 #define EIT_INJECTION_TIME 10 // seconds for which to inject EIT event 1680 if (Receiver && Receiver->
WantsPid(Pid)) {
1688 time_t Now = time(NULL);
1712 time_t Now = time(NULL);
1752 if (Receiver->
device ==
this)
1756 #ifdef WAIT_FOR_TUNER_LOCK 1757 #define TUNER_LOCK_TIMEOUT 5000 // ms 1758 if (!
HasLock(TUNER_LOCK_TIMEOUT)) {
1759 esyslog(
"ERROR: device %d has no lock, can't attach receiver!",
CardIndex() + 1);
1766 for (
int n = 0; n < Receiver->
numPids; n++) {
1796 esyslog(
"ERROR: no free receiver slot!");
1802 if (!Receiver || Receiver->
device !=
this)
1804 bool receiversLeft =
false;
1811 for (
int n = 0; n < Receiver->
numPids; n++)
1815 receiversLeft =
true;
1835 if (Receiver && Receiver->
WantsPid(Pid))
1871 bool firstRead =
true;
1874 if (firstRead || Poller.
Poll(100)) {
1878 if (errno == EOVERFLOW)
1903 for (
int i = 1; i < Count; i++) {
1910 esyslog(
"ERROR: skipped %d bytes to sync on TS packet on device %d", Count,
cardIndex);
static int GetClippedNumProvidedSystems(int AvailableBits, cDevice *Device)
cPatPmtParser patPmtParser
void ParsePat(const uchar *Data, int Length)
Parses the PAT data from the single TS packet in Data.
int NumTracks(eTrackType FirstTrack, eTrackType LastTrack) const
Returns the number of tracks in the given range that are currently available.
virtual void setScaleMode(cSpuDecoder::eScaleMode ScaleMode)=0
virtual bool HasLock(int TimeoutMs=0) const
Returns true if the device has a lock on the requested transponder.
cCamSlot * MtdSpawn(void)
If this CAM slot can do MTD ("Multi Transponder Decryption"), a call to this function returns a cMtdC...
virtual bool MaySwitchTransponder(const cChannel *Channel) const
Returns true if it is ok to switch to the Channel's transponder on this device, without disturbing an...
void SetOccupied(int Seconds)
Sets the occupied timeout for this device to the given number of Seconds, This can be used to tune a ...
const T * Get(int Index) const
Returns the list element at the given Index, or NULL if no such element exists.
bool ToggleMute(void)
Turns the volume off or on and returns the new mute state.
#define TS_SCRAMBLING_TIMEOUT
cCamSlot * CamSlot(void) const
Returns the CAM slot that is currently used with this device, or NULL if no CAM slot is in use.
bool GrabImageFile(const char *FileName, bool Jpeg=true, int Quality=-1, int SizeX=-1, int SizeY=-1)
Calls GrabImage() and stores the resulting image in a file with the given name.
int MasterSlotNumber(void)
Returns the number of this CAM's master slot within the whole system.
virtual bool ProvidesCa(const int *CaSystemIds)
Returns true if the CAM in this slot provides one of the given CaSystemIds.
const int * Caids(void) const
cRingBufferLinear * ringBuffer
static cDevice * ReceiverDevice(void)
void DetachAll(int Pid)
Detaches all receivers from this device for this pid.
void ParsePmt(const uchar *Data, int Length)
Parses the PMT data from the single TS packet in Data.
void SetDescription(const char *Description,...) __attribute__((format(printf
friend class cLiveSubtitle
void Add(cListObject *Object, cListObject *After=NULL)
int Convert(const uchar *Data, int Length)
virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask)
Opens a file handle for the given filter data.
virtual void InjectEit(int Sid)
Injects a generated EIT with a "present event" for the given Sid into the TS data stream sent to the ...
virtual bool SetPlayMode(ePlayMode PlayMode)
Sets the device into the given play mode.
virtual void StartDecrypting(void)
Sends all CA_PMT entries to the CAM that have been modified since the last call to this function.
bool IsPrimaryDevice(void) const
bool TsPayloadStart(const uchar *p)
void PlayAudio(const uchar *Data, int Length, uchar Id)
cReceiver * receiver[MAXRECEIVERS]
virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect)
Returns the Width, Height and VideoAspect ratio of the currently displayed video material.
virtual bool HasProgramme(void) const
Returns true if the device is currently showing any programme to the user, either through replaying o...
bool IsPmtPid(int Pid) const
Returns true if Pid the one of the PMT pids as defined by the current PAT.
virtual bool TsPostProcess(uchar *Data)
If there is a cCiSession that needs to do additional processing on TS packets (after the CAM has done...
virtual int ReadFilter(int Handle, void *Buffer, size_t Length)
Reads data from a handle for the given filter.
virtual bool AvoidRecording(void) const
Returns true if this device should only be used for recording if no other device is available.
int NumReadyMasterSlots(void)
Returns the number of master CAM slots in the system that are ready to decrypt.
void SetCamSlot(cCamSlot *CamSlot)
Sets the given CamSlot to be used with this device.
bool TsHasPayload(const uchar *p)
virtual void MakePrimaryDevice(bool On)
Informs a device that it will be the primary device.
virtual bool ProvidesChannel(const cChannel *Channel, int Priority=IDLEPRIORITY, bool *NeedsDetachReceivers=NULL) const
Returns true if this device can provide the given channel.
const char * Alang(int i) const
virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat)
Sets the video display format to the given one (only useful if this device has an MPEG decoder).
void Detach(cFilter *Filter)
void Detach(cFilter *Filter)
Detaches the given filter from this device.
static cDevice * GetDevice(int Index)
Gets the device with the given Index.
void DelPid(int Pid, ePidType PidType=ptOther)
Deletes a PID from the set of PIDs this device shall receive.
bool AttachReceiver(cReceiver *Receiver)
Attaches the given receiver to this device.
static int currentChannel
int Ppid(void) const
Returns the PCR pid as defined by the current PMT, or 0 if no PCR pid has been detected,...
bool SetAvailableTrack(eTrackType Type, int Index, uint16_t Id, const char *Language=NULL, const char *Description=NULL)
Sets the track of the given Type and Index to the given values.
virtual void Play(void)
Sets the device into play mode (after a previous trick mode).
bool autoSelectPreferredSubtitleLanguage
const char * Slang(int i) const
static int NumDevices(void)
Returns the total number of devices.
virtual void Action(void)
A derived cThread class must implement the code it wants to execute as a separate thread in this func...
virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect)
Returns the Width, Height and PixelAspect ratio the OSD should use to best fit the resolution of the ...
virtual void Receive(const uchar *Data, int Length)
This function is called from the cDevice we are attached to, and delivers one TS packet from the set ...
virtual void Clear(void)
Clears all video and audio data from the device.
virtual int PlayTsAudio(const uchar *Data, int Length)
Plays the given data block as audio.
void DelLivePids(void)
Deletes the live viewing PIDs.
virtual bool SignalStats(int &Valid, double *Strength=NULL, double *Cnr=NULL, double *BerPre=NULL, double *BerPost=NULL, double *Per=NULL, int *Status=NULL) const
Returns statistics about the currently received signal (if available).
virtual bool DeviceProvidesTransponder(const cDevice *Device, const cChannel *Channel) const
Returns true if the given Device can provide the given Channel's transponder.
void AttachFilter(cFilter *Filter)
Attaches the given filter to this device.
const char * Dlang(int i) const
virtual bool HasIBPTrickSpeed(void)
Returns true if this device can handle all frames in 'fast forward' trick speeds.
virtual void SetVideoFormat(bool VideoFormat16_9)
Sets the output video format to either 16:9 or 4:3 (only useful if this device has an MPEG decoder).
int NumSubtitleTracks(void) const
Returns the number of subtitle tracks that are currently available.
virtual int PlayPesPacket(const uchar *Data, int Length, bool VideoOnly=false)
Plays the single PES packet in Data with the given Length.
int Ca(int Index=0) const
eTrackType currentSubtitleTrack
eTrackType GetCurrentAudioTrack(void) const
virtual bool ProvidesSource(int Source) const
Returns true if this device can provide the given source.
virtual int GetAudioChannelDevice(void)
Gets the current audio channel, which is stereo (0), mono left (1) or mono right (2).
virtual int NumProvidedSystems(void) const
Returns the number of individual "delivery systems" this device provides.
bool Poll(int TimeoutMs=0)
virtual eModuleStatus ModuleStatus(void)
Returns the status of the CAM in this slot.
#define EIT_INJECTION_TIME
virtual void Mute(void)
Turns off audio while replaying.
virtual void AddChannel(const cChannel *Channel)
Adds all PIDs of the given Channel to the current list of PIDs.
cTSBuffer(int File, int Size, int CardIndex)
bool SetCurrentAudioTrack(eTrackType Type)
Sets the current audio track to the given Type.
int TsPid(const uchar *p)
virtual bool ProvidesEIT(void) const
Returns true if this device provides EIT data and thus wants to be tuned to the channels it can recei...
virtual cString DeviceName(void) const
Returns a string identifying the name of this device.
static int NextCardIndex(int n=0)
Calculates the next card index.
bool DeviceHooksProvidesTransponder(const cChannel *Channel) const
bool Receiving(bool Dummy=false) const
Returns true if we are currently receiving. The parameter has no meaning (for backwards compatibility...
void SetChannel(const cChannel *Channel)
virtual bool Ready(void)
Returns true if this device is ready.
A steerable satellite dish generally points to the south on the northern hemisphere,...
void EnsureSubtitleTrack(void)
Makes sure one of the preferred language subtitle tracks is selected.
time_t startScrambleDetection
virtual void SetAudioTrack(eTrackType Type, const tTrackId *TrackId)
int PesLength(const uchar *p)
cDeviceHook(void)
Creates a new device hook object.
tChannelID ChannelID(void)
virtual void Freeze(void)
Puts the device into "freeze frame" mode.
int pre_1_3_19_PrivateStream
virtual void Activate(bool On)
tTrackId availableTracks[ttMaxTrackTypes]
static int CurrentChannel(void)
Returns the number of the current channel on the primary device.
void StartSectionHandler(void)
A derived device that provides section data must call this function (typically in its constructor) to...
void Reset(void)
Resets the converter.
int Read(int FileHandle, int Max=0)
Reads at most Max bytes from FileHandle and stores them in the ring buffer.
virtual void SetVolumeDevice(int Volume)
Sets the audio volume on this device (Volume = 0...255).
void StopSectionHandler(void)
A device that has called StartSectionHandler() must call this function (typically in its destructor) ...
void SetVolume(int Volume, bool Absolute=false)
Sets the volume to the given value, either absolutely or relative to the current volume.
virtual cSpuDecoder * GetSpuDecoder(void)
Returns a pointer to the device's SPU decoder (or NULL, if this device doesn't have an SPU decoder).
cMutex mutexCurrentSubtitleTrack
cString ToString(void) const
void SetDecrypt(tChannelID ChannelID, int CamSlotNumber)
virtual const cChannel * GetCurrentlyTunedTransponder(void) const
Returns a pointer to the currently tuned transponder.
#define MAXOCCUPIEDTIMEOUT
bool SwitchChannel(const cChannel *Channel, bool LiveView)
Switches the device to the given Channel, initiating transfer mode if necessary.
#define TS_SCRAMBLING_TIME_OK
virtual int SignalStrength(void) const
Returns the "strength" of the currently received signal.
#define LOCK_CHANNELS_READ
virtual int SignalQuality(void) const
Returns the "quality" of the currently received signal.
virtual void CloseDvr(void)
Shuts down the DVR.
virtual bool CanReplay(void) const
Returns true if this device can currently start a replay session.
static void SleepMs(int TimeoutMs)
Creates a cCondWait object and uses it to sleep for TimeoutMs milliseconds, immediately giving up the...
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView)
Sets the device to the given channel (actual physical setup).
void bool Start(void)
Sets the description of this thread, which will be used when logging starting or stopping of the thre...
void PutTs(const uchar *Data, int Length)
Puts the payload data of the single TS packet at Data into the converter.
void ClrAvailableTracks(bool DescriptionsOnly=false, bool IdsOnly=false)
Clears the list of currently available tracks.
#define IS_AUDIO_TRACK(t)
bool WantsTsData(void) const
Returns true if this CAM slot wants to receive the TS data through its Decrypt() function.
int SubtitleLanguages[I18N_MAX_LANGUAGES+1]
int Occupied(void) const
Returns the number of seconds this device is still occupied for.
bool CamDecrypt(tChannelID ChannelID, int CamSlotNumber)
virtual bool ProvidesTransponderExclusively(const cChannel *Channel) const
Returns true if this is the only device that is able to provide the given channel's transponder.
virtual uchar * GrabImage(int &Size, bool Jpeg=true, int Quality=-1, int SizeX=-1, int SizeY=-1)
Grabs the currently visible screen image.
static cDevice * primaryDevice
virtual void DetachAllReceivers(void)
Detaches all receivers from this device.
virtual void SetAudioChannelDevice(int AudioChannel)
Sets the audio channel to stereo (0), mono left (1) or mono right (2).
virtual bool SetPid(cPidHandle *Handle, int Type, bool On)
Does the actual PID setting on this device.
cSectionHandler * sectionHandler
bool Running(void)
Returns false if a derived cThread object shall leave its Action() function.
eTrackType currentAudioTrack
static bool WaitForAllDevicesReady(int Timeout=0)
Waits until all devices have become ready, or the given Timeout (seconds) has expired.
virtual int PlayPes(const uchar *Data, int Length, bool VideoOnly=false)
Plays all valid PES packets in Data with the given Length.
void Skip(int Count)
If after a call to Get() more or less than TS_SIZE of the available data has been processed,...
int CardIndex(void) const
Returns the card index of this device (0 ... MAXDEVICES - 1).
bool AddPid(int Pid)
Adds the given Pid to the list of PIDs of this receiver.
void Del(int Count)
Deletes at most Count bytes from the ring buffer.
cCamSlot * MasterSlot(void)
Returns this CAM slot's master slot, or a pointer to itself if it is a master slot.
static void Launch(cControl *Control)
virtual bool HasDecoder(void) const
Tells whether this device has an MPEG decoder.
eKeys Message(eMessageType Type, const char *s, int Seconds=0)
Displays the given message, either through a currently visible display object that is capable of doin...
#define IS_SUBTITLE_TRACK(t)
const T * First(void) const
Returns the first element in this list, or NULL if the list is empty.
virtual void Action(void)
A derived cThread class must implement the code it wants to execute as a separate thread in this func...
virtual void CloseFilter(int Handle)
Closes a file handle that has previously been opened by OpenFilter().
virtual bool OpenDvr(void)
Opens the DVR of this device and prepares it to deliver a Transport Stream for use in a cReceiver.
virtual bool Flush(int TimeoutMs=0)
Returns true if the device's output buffers are empty, i.
const char * Name(void) const
virtual bool IsDecrypting(void)
Returns true if the CAM in this slot is currently used for decrypting.
virtual int PlayTsVideo(const uchar *Data, int Length)
Plays the given data block as video.
static cDevice * GetDeviceForTransponder(const cChannel *Channel, int Priority)
Returns a device that is not currently "occupied" and can be tuned to the transponder of the given Ch...
virtual int PlayAudio(const uchar *Data, int Length, uchar Id)
Plays the given data block as audio.
time_t lastScrambledPacket
virtual void SetPid(int Pid, bool Active)
Sets the given Pid (which has previously been added through a call to AddPid()) to Active.
virtual void SetSubtitleTrack(eTrackType Type, const tTrackId *TrackId)
virtual cString DeviceType(void) const
Returns a string identifying the type of this device (like "DVB-S").
virtual int PlayTs(const uchar *Data, int Length, bool VideoOnly=false)
Plays the given TS packet.
bool I18nIsPreferredLanguage(int *PreferredLanguages, const char *LanguageCode, int &OldPreference, int *Position)
Checks the given LanguageCode (which may be something like "eng" or "eng+deu") against the PreferredL...
uchar * Get(int *Available=NULL, bool CheckAvailable=false)
Returns a pointer to the first TS packet in the buffer.
int Vpid(void) const
Returns the video pid as defined by the current PMT, or 0 if no video pid has been detected,...
virtual void SetSubtitleTrackDevice(eTrackType Type)
Sets the current subtitle track to the given value.
static void MsgChannelSwitch(const cDevice *Device, int ChannelNumber, bool LiveView)
virtual void Receive(const uchar *Data, int Length)=0
This function is called from the cDevice we are attached to, and delivers one TS packet from the set ...
int DeviceNumber(void) const
Returns the number of this device (0 ... numDevices - 1).
void EnsureAudioTrack(bool Force=false)
Makes sure an audio track is selected that is actually available.
int AudioLanguages[I18N_MAX_LANGUAGES+1]
static cDevice * PrimaryDevice(void)
Returns the primary device.
tChannelID GetChannelID(void) const
virtual bool GetTSPacket(uchar *&Data)
Gets exactly one TS packet from the DVR of this device and returns a pointer to it in Data.
cLiveSubtitle * liveSubtitle
eSetChannelResult SetChannel(const cChannel *Channel, bool LiveView)
Sets the device to the given channel (general setup).
void SetChecked(tChannelID ChannelID, int CamSlotNumber)
static bool SetPrimaryDevice(int n)
Sets the primary device to 'n'.
#define TS_SYNC(Data, Length)
virtual const cPositioner * Positioner(void) const
Returns a pointer to the positioner (if any) this device has used to move the satellite dish to the r...
bool MtdActive(void)
Returns true if MTD is currently active.
void StopReplay(void)
Stops the current replay session (if any).
const tTrackId * GetTrack(eTrackType Type)
Returns a pointer to the given track id, or NULL if Type is not less than ttMaxTrackTypes.
bool TsIsScrambled(const uchar *p)
bool HasPid(int Pid) const
Returns true if this device is currently receiving the given PID.
cChannelCamRelations ChannelCamRelations
int GetAudioChannel(void)
Gets the current audio channel, which is stereo (0), mono left (1) or mono right (2).
bool Transferring(void) const
Returns true if we are currently in Transfer Mode.
static cList< cDeviceHook > deviceHooks
uchar * Get(int &Count)
Gets data from the ring buffer.
virtual bool Poll(cPoller &Poller, int TimeoutMs=0)
Returns true if the device itself or any of the file handles in Poller is ready for further action.
virtual int64_t GetSTC(void)
Gets the current System Time Counter, which can be used to synchronize audio, video and subtitles.
int currentAudioTrackMissingCount
void Attach(cFilter *Filter)
bool AttachPlayer(cPlayer *Player)
Attaches the given player to this device.
static void Shutdown(void)
Closes down all devices.
cMutex mutexCurrentAudioTrack
static cDevice * ActualDevice(void)
Returns the actual receiving device in case of Transfer Mode, or the primary device otherwise.
int Priority(void)
Returns the priority of the device this slot is currently assigned to, or IDLEPRIORITY if it is not a...
static void MsgSetVolume(int Volume, bool Absolute)
bool CamChecked(tChannelID ChannelID, int CamSlotNumber)
virtual bool IsTunedToTransponder(const cChannel *Channel) const
Returns true if this device is currently tuned to the given Channel's transponder.
char language[MAXLANGCODE2]
virtual void TrickSpeed(int Speed, bool Forward)
Sets the device into a mode where replay is done slower.
virtual int PlayTsSubtitle(const uchar *Data, int Length)
Plays the given data block as a subtitle.
const uchar * GetPes(int &Length)
Gets a pointer to the complete PES packet, or NULL if the packet is not complete yet.
void SetAudioChannel(int AudioChannel)
Sets the audio channel to stereo (0), mono left (1) or mono right (2).
virtual int PlaySubtitle(const uchar *Data, int Length)
Plays the given data block as a subtitle.
void ForceTransferMode(void)
Forces the device into transfermode for the current channel.
#define IS_DOLBY_TRACK(t)
int TsPayloadOffset(const uchar *p)
bool SetCurrentSubtitleTrack(eTrackType Type, bool Manual=false)
Sets the current subtitle track to the given Type.
void SetRepeatLast(void)
Makes the next call to GetPes() return exactly the same data as the last one (provided there was no c...
virtual bool Assign(cDevice *Device, bool Query=false)
Assigns this CAM slot to the given Device, if this is possible.
virtual void StillPicture(const uchar *Data, int Length)
Displays the given I-frame as a still picture.
virtual bool IsActivating(void)
Returns true if this CAM slot is currently activating a smart card.
cDvbSubtitleConverter * dvbSubtitleConverter
void Cancel(int WaitSeconds=0)
Cancels the thread by first setting 'running' to false, so that the Action() loop can finish in an or...
virtual int PlayVideo(const uchar *Data, int Length)
Plays the given data block as video.
static void Shutdown(void)
#define MIN_PRE_1_3_19_PRIVATESTREAM
void Reset(void)
Resets the parser.
int ConvertFragments(const uchar *Data, int Length)
cPidHandle pidHandles[MAXPIDHANDLES]
virtual void SetDigitalAudioDevice(bool On)
Tells the output device that the current audio track is Dolby Digital.
bool Replaying(void) const
Returns true if we are currently replaying.
void SetTimeouts(int PutTimeout, int GetTimeout)
int NumAudioTracks(void) const
Returns the number of audio tracks that are currently available.
static void SetUseDevice(int n)
Sets the 'useDevice' flag of the given device.
virtual bool HasCi(void)
Returns true if this device has a Common Interface.
bool AddPid(int Pid, ePidType PidType=ptOther, int StreamType=0)
Adds a PID to the set of PIDs this device shall receive.
virtual bool ProvidesTransponder(const cChannel *Channel) const
Returns true if this device can provide the transponder of the given Channel (which implies that it c...
int Priority(void) const
Returns the priority of the current receiving session (-MAXPRIORITY..MAXPRIORITY),...
void PlayTsAudio(const uchar *Data, int Length)
virtual void Activate(bool On)
This function is called just before the cReceiver gets attached to (On == true) and right after it ge...
virtual bool HasInternalCam(void)
Returns true if this device handles encrypted channels itself without VDR assistance.
virtual void SetAudioTrackDevice(eTrackType Type)
Sets the current audio track to the given value.
static cDevice * device[MAXDEVICES]
cDevice * Device(void)
Returns the device this CAM slot is currently assigned to.
virtual int Available(void)
const T * Next(const T *Object) const
< Returns the element immediately before Object in this list, or NULL if Object is the first element ...
eTrackType GetCurrentSubtitleTrack(void) const