diff options
-rw-r--r-- | HISTORY | 4 | ||||
-rw-r--r-- | dxr3audiodecoder.c | 17 | ||||
-rw-r--r-- | dxr3audiodecoder.h | 1 | ||||
-rw-r--r-- | dxr3colormanager.c | 1 | ||||
-rw-r--r-- | dxr3configdata.c | 3 | ||||
-rw-r--r-- | dxr3configdata.h | 43 | ||||
-rw-r--r-- | dxr3cpu.c | 6 | ||||
-rw-r--r-- | dxr3demuxdevice.c | 2 | ||||
-rw-r--r-- | dxr3device.c | 22 | ||||
-rw-r--r-- | dxr3device.h | 4 | ||||
-rw-r--r-- | dxr3ffmpeg.c | 7 | ||||
-rw-r--r-- | dxr3ffmpeg.h | 17 | ||||
-rw-r--r-- | dxr3interface.c | 42 | ||||
-rw-r--r-- | dxr3interface.h | 42 | ||||
-rw-r--r-- | dxr3interface_spu_encoder.c | 426 | ||||
-rw-r--r-- | dxr3interface_spu_encoder.h | 56 | ||||
-rw-r--r-- | dxr3log.c | 2 | ||||
-rw-r--r-- | dxr3log.h | 10 | ||||
-rw-r--r-- | dxr3memcpy.c | 5 | ||||
-rw-r--r-- | dxr3memcpy.h | 10 | ||||
-rw-r--r-- | dxr3osd.h | 2 | ||||
-rw-r--r-- | dxr3osd_subpicture.c | 4 | ||||
-rw-r--r-- | dxr3osd_subpicture.h | 4 | ||||
-rw-r--r-- | dxr3outputthread.c | 2 | ||||
-rw-r--r-- | dxr3palettemanager.c | 1 | ||||
-rw-r--r-- | dxr3spudecoder.c | 1 | ||||
-rw-r--r-- | dxr3spudecoder.h | 1 | ||||
-rw-r--r-- | dxr3syncbuffer.c | 2 | ||||
-rw-r--r-- | dxr3unixserversocket.c | 1 |
29 files changed, 227 insertions, 511 deletions
@@ -237,4 +237,6 @@ NOTE: I havent found time to include all of the languages, will be done in pre2 - rewrote i18n support - fixed void cDxr3Interface::SetAudioDigitalPCM() - thanks to Stephan Skrodzki <skrodzki@contcast.de> for patch - dxr3memcpy.c/h: fix to support older compilers like gcc-2.95 -- dxr3memcpy.c/h: should now compile on alpha and powerpc
\ No newline at end of file +- dxr3memcpy.c/h: should now compile on alpha and powerpc +- added many comments into source +- using doxygen for docs
\ No newline at end of file diff --git a/dxr3audiodecoder.c b/dxr3audiodecoder.c index c7fb3a7..3c05bd5 100644 --- a/dxr3audiodecoder.c +++ b/dxr3audiodecoder.c @@ -35,7 +35,7 @@ ToDo: const int LPCM_HEADER_LENGTH = 7; // ================================== -// constr. +//! constructor cDxr3AudioDecoder::cDxr3AudioDecoder() : rbuf(50000), ac3dtsDecoder(&rbuf) { decoderOpened = false; @@ -50,7 +50,7 @@ cDxr3AudioDecoder::cDxr3AudioDecoder() : rbuf(50000), ac3dtsDecoder(&rbuf) }; // ================================== -// deconst. +//! deconst. cDxr3AudioDecoder::~cDxr3AudioDecoder() { // close codec, if it is open @@ -58,7 +58,7 @@ cDxr3AudioDecoder::~cDxr3AudioDecoder() }; // ================================== -// (re)init ffmpeg codec +//! (re)init ffmpeg codec void cDxr3AudioDecoder::Init() { // (re)init codec @@ -71,9 +71,6 @@ void cDxr3AudioDecoder::Init() decoderOpened = true; foundHeader = false; decodeAudio = true; - - //lastHeader[0] = 0xFF; - //lastHeader[1] = lastHeader[2] = lastHeader[3] = 0; } else { @@ -82,7 +79,7 @@ void cDxr3AudioDecoder::Init() } // ================================== -// decode given buffer +//! decode given buffer void cDxr3AudioDecoder::Decode(const uint8_t* buf, int length, uint32_t pts, cDxr3SyncBuffer &aBuf) { if (!decoderOpened) @@ -189,7 +186,7 @@ void cDxr3AudioDecoder::Decode(const uint8_t* buf, int length, uint32_t pts, cDx } // ================================== -// decode lpcm +//! decode lpcm void cDxr3AudioDecoder::DecodeLpcm(const uint8_t* buf, int length, uint32_t pts, cDxr3SyncBuffer &aBuf) { if (length > (LPCM_HEADER_LENGTH + 2)) @@ -234,7 +231,7 @@ void cDxr3AudioDecoder::DecodeLpcm(const uint8_t* buf, int length, uint32_t pts, } // ================================== -// decode ac3 +//! decode ac3 void cDxr3AudioDecoder::DecodeAc3Dts(const uint8_t* pPes, const uint8_t* buf, int length, uint32_t pts, cDxr3SyncBuffer &aBuf) { int headerLength = (int) (buf - pPes); @@ -265,7 +262,7 @@ void cDxr3AudioDecoder::DecodeAc3Dts(const uint8_t* pPes, const uint8_t* buf, in } // ================================== -// checking routine +//! checking routine bool cDxr3AudioDecoder::HeadCheck(unsigned long head) { bool retval = false; diff --git a/dxr3audiodecoder.h b/dxr3audiodecoder.h index 32467e4..5f79a2b 100644 --- a/dxr3audiodecoder.h +++ b/dxr3audiodecoder.h @@ -11,6 +11,7 @@ // ================================== // decode audio to mp2 or use DD :) + class cDxr3AudioDecoder { public: diff --git a/dxr3colormanager.c b/dxr3colormanager.c index 50e3877..2e94720 100644 --- a/dxr3colormanager.c +++ b/dxr3colormanager.c @@ -56,6 +56,7 @@ #include <string.h> // ================================== +//! constructor cColorManager::cColorManager() { NrOfRegions = 0; diff --git a/dxr3configdata.c b/dxr3configdata.c index c48dd10..a1b6fd4 100644 --- a/dxr3configdata.c +++ b/dxr3configdata.c @@ -23,9 +23,10 @@ #include "dxr3configdata.h" // ================================== -// constr. +//! constructor cDxr3ConfigData::cDxr3ConfigData() { + // set default values m_digitaloutput = 0; m_ac3output = 0; m_card = 0; diff --git a/dxr3configdata.h b/dxr3configdata.h index 3d671bc..80072d6 100644 --- a/dxr3configdata.h +++ b/dxr3configdata.h @@ -26,12 +26,12 @@ #include "dxr3singleton.h" // ================================== -// possible video modes +//! possible video modes enum eVideoMode { - PAL = 0, - PAL60, - NTSC + PAL = 0, ///< use PAL as videomode + PAL60, ///< use PAL60 as videomode + NTSC ///< use NTSC as videomode }; // ================================== @@ -43,16 +43,19 @@ enum eMenuMode }; // ================================== -// possible debug levels +//! possible debug levels enum eDebugLevel { - LOW = 0, - EVERYTHING + LOW = 0, ///< only log basic warings and errors + EVERYTHING ///< log everything - note logfile can become very big }; // ================================== -// global interface to access all config -// datas of this plugin +//! global interface to access all config datas of this plugin +/* + With this singleton you can access very easy all possible + config settings of the plugin. +*/ class cDxr3ConfigData : public Singleton<cDxr3ConfigData> { public: @@ -90,18 +93,18 @@ public: int SetSaturation(int value) { return m_saturation = value; } protected: - eVideoMode m_videomode; - eMenuMode m_menumode; + eVideoMode m_videomode;///< videomode value + eMenuMode m_menumode; ///< menumode value - int m_digitaloutput; - int m_ac3output; - int m_card; - int m_forceletterbox; - int m_debug; - int m_debuglevel; - int m_brightness; - int m_contrast; - int m_saturation; + int m_digitaloutput; ///< digitaloutput value + int m_ac3output; ///< ac3output value + int m_card; ///< card value + int m_forceletterbox; ///< forcebox value + int m_debug; ///< debug value + int m_debuglevel; ///< debug level value + int m_brightness; ///< brightness value + int m_contrast; ///< contrast value + int m_saturation; ///< saturation value }; #endif /*_DXR3_CONFIGDATA_H_*/ @@ -26,7 +26,7 @@ #include "dxr3memcpy.h" // ================================== -// const. +//! constructor cDxr3CPU::cDxr3CPU() { unsigned long eax,ebx,edx,unused; @@ -111,7 +111,7 @@ cDxr3CPU::cDxr3CPU() } // ================================== -// does the cpu support cpuid instructions +//! does the cpu support cpuid instructions bool cDxr3CPU::CheckCPUIDPresence() { // todo @@ -119,7 +119,7 @@ bool cDxr3CPU::CheckCPUIDPresence() } // ================================== -// cpuid function +//! cpuid function bool cDxr3CPU::cpuid(unsigned long function, unsigned long& out_eax, unsigned long& out_ebx, unsigned long& out_ecx, unsigned long& out_edx) { asm("cpuid": "=a" (out_eax), "=b" (out_ebx), "=c" (out_ecx), "=d" (out_edx) : "a" (function)); diff --git a/dxr3demuxdevice.c b/dxr3demuxdevice.c index d39b07b..37a8434 100644 --- a/dxr3demuxdevice.c +++ b/dxr3demuxdevice.c @@ -18,7 +18,7 @@ #include "dxr3log.h" // ================================== -// constr. +//! constructor cDxr3DemuxDevice::cDxr3DemuxDevice(cDxr3Interface& dxr3Device) : m_dxr3Device(dxr3Device), m_aBuf(AUDIO_MAX_BUFFER_SIZE, AUIDO_MAX_FRAME_SIZE, m_dxr3Device), diff --git a/dxr3device.c b/dxr3device.c index 9fdeba8..397560c 100644 --- a/dxr3device.c +++ b/dxr3device.c @@ -10,6 +10,7 @@ extern "C" } // ================================== +//! constructor cDxr3Device::cDxr3Device() : m_DemuxDevice(cDxr3Interface::Instance()) { m_Offset = 0; @@ -38,6 +39,7 @@ void cDxr3Device::MakePrimaryDevice(bool On) // replaying // ================================== +//! does we have an mpeg2 devocer? bool cDxr3Device::HasDecoder() const { // sure we have one ;) @@ -45,6 +47,7 @@ bool cDxr3Device::HasDecoder() const } // ================================== +//! can we replay vdr recordings? bool cDxr3Device::CanReplay() const { // also sure... @@ -209,7 +212,7 @@ void cDxr3Device::TrickSpeed(int Speed) } // ================================== -// clear our demux buffer +//! clear our demux buffer void cDxr3Device::Clear() { m_DemuxDevice.Clear(); @@ -218,16 +221,17 @@ void cDxr3Device::Clear() } // ================================== -// play a recording +//! play a recording void cDxr3Device::Play() { m_DemuxDevice.SetReplayMode(); m_Offset = 0; + ///< free buffer m_strBuf.erase(m_strBuf.begin(), m_strBuf.end()); } // ================================== -// puts the device into "freeze frame" mode +//! puts the device into "freeze frame" mode void cDxr3Device::Freeze() { m_DemuxDevice.SetTrickMode(DXR3_FREEZE); @@ -240,7 +244,7 @@ void cDxr3Device::Mute() } // ================================== -// displays the given I-frame as a still picture. +//! displays the given I-frame as a still picture. void cDxr3Device::StillPicture(const uchar *Data, int Length) { m_DemuxDevice.StillPicture(Data, Length); @@ -253,7 +257,7 @@ bool cDxr3Device::Poll(cPoller &Poller, int TimeoutMs) } // ================================== -// actually plays the given data block as video +//! actually plays the given data block as video int cDxr3Device::PlayVideo(const uchar *Data, int Length) { int retLength = 0; @@ -358,7 +362,7 @@ void cDxr3Device::PlayAudio(const uchar *Data, int Length) // addition functions // ================================== -// capture a single frame as an image +//! capture a single frame as an image bool cDxr3Device::GrabImage(const char *FileName, bool Jpeg, int Quality, int SizeX, int SizeY) { int w = SizeX; @@ -375,7 +379,7 @@ bool cDxr3Device::GrabImage(const char *FileName, bool Jpeg, int Quality, int Si { if (Jpeg) { - // write JPEG file: + ///< write JPEG file: struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; cinfo.err = jpeg_std_error(&jerr); @@ -403,7 +407,7 @@ bool cDxr3Device::GrabImage(const char *FileName, bool Jpeg, int Quality, int Si } else { - // write PNM file: + ///< write PNM file: if (fprintf(f, "P6\n%d\n%d\n255\n", w, h) < 0 || fwrite(Data, w * h * 3, 1, f) < 0) { LOG_ERROR_STR(FileName); @@ -431,7 +435,7 @@ void cDxr3Device::SetVideoFormat(bool VideoFormat16_9) } // ================================== -// sets volume for audio output +//! sets volume for audio output void cDxr3Device::SetVolumeDevice(int Volume) { if (cDxr3ConfigData::Instance().GetDebug()) diff --git a/dxr3device.h b/dxr3device.h index 69ad28d..606b89d 100644 --- a/dxr3device.h +++ b/dxr3device.h @@ -10,6 +10,10 @@ using namespace std; // ================================== // our device :) +/*! + cDxr3Device is the interface for VDR devices. + Is is the part, which VDR "talks" with our plugin. +*/ class cDxr3Device : public cDevice, public Singleton<cDxr3Device> { public: diff --git a/dxr3ffmpeg.c b/dxr3ffmpeg.c index 286b2f3..dabd793 100644 --- a/dxr3ffmpeg.c +++ b/dxr3ffmpeg.c @@ -20,11 +20,11 @@ */ #include "dxr3ffmpeg.h" - #include "dxr3configdata.h" #include "dxr3log.h" // ================================== +//! constructor cDxr3Ffmepg::cDxr3Ffmepg() { avcodec_init(); @@ -32,6 +32,7 @@ cDxr3Ffmepg::cDxr3Ffmepg() } // ================================== +//! look if Codec is supported by ffmpeg bool cDxr3Ffmepg::FindCodec(struct Dxr3Codec& Codec) { // find codec @@ -39,6 +40,7 @@ bool cDxr3Ffmepg::FindCodec(struct Dxr3Codec& Codec) if (!Codec.codec) { + // codec is't supported by ffmpeg if (cDxr3ConfigData::Instance().GetDebug()) { cLog::Instance() << "cDxr3Ffmepg::OpenCodec(struct Dxr3Codec& Codec) codec not found (" << Codec.id << ")\n"; @@ -53,6 +55,7 @@ bool cDxr3Ffmepg::FindCodec(struct Dxr3Codec& Codec) } // ================================== +//! try to open Codec bool cDxr3Ffmepg::OpenCodec(struct Dxr3Codec& Codec) { // try to open codec @@ -60,6 +63,7 @@ bool cDxr3Ffmepg::OpenCodec(struct Dxr3Codec& Codec) if (result < 0) { + // we could not open codec if (cDxr3ConfigData::Instance().GetDebug()) { cLog::Instance() << "cDxr3Ffmepg::OpenCodec(struct Dxr3Codec& Codec) coudnt open codec (" << Codec.id << ")\n"; @@ -75,6 +79,7 @@ bool cDxr3Ffmepg::OpenCodec(struct Dxr3Codec& Codec) } // ================================== +// close codec void cDxr3Ffmepg::CloseCodec(struct Dxr3Codec& Codec) { if (Codec.Open) diff --git a/dxr3ffmpeg.h b/dxr3ffmpeg.h index a96c553..740315a 100644 --- a/dxr3ffmpeg.h +++ b/dxr3ffmpeg.h @@ -31,19 +31,26 @@ extern "C" #include "dxr3singleton.h" // ================================== -// a codec used by this plugin +//! a codec used by this plugin struct Dxr3Codec { Dxr3Codec() : Open(false) {} - AVCodec* codec; - AVCodecContext codec_context; - enum CodecID id; - bool Open; + AVCodec* codec; ///< ffmpeg's AVCodec + AVCodecContext codec_context; ///< ffmpeg's AVCodecContext + enum CodecID id; ///< id's from ffmpeg - like CODEC_ID_MP2 + bool Open; ///< is codec open? }; // ================================== // class to work with ffmpeg +/*! + With cDxr3Ffmepg you can easily handle as many + codecs as you want. + At the moment we need this only for + the audiodecoder, but in future i want to use + it for ohter nice stuff :) +*/ class cDxr3Ffmepg : public Singleton<cDxr3Ffmepg> { public: diff --git a/dxr3interface.c b/dxr3interface.c index f32c3cf..90cd990 100644 --- a/dxr3interface.c +++ b/dxr3interface.c @@ -58,10 +58,10 @@ static int Dxr3Open(const char *Name, int n, int Mode) } // ================================== -//! constr. +//! constructor cDxr3Interface::cDxr3Interface() { - ///< open control stream + // open control stream m_fdControl = Dxr3Open("", cDxr3ConfigData::Instance().GetDxr3Card(), O_WRONLY | O_SYNC); if (!m_fdControl) { @@ -69,7 +69,7 @@ cDxr3Interface::cDxr3Interface() cLog::Instance() << "Please check if the dxr3 modules are loaded!\n"; } - ///< upload microcode to dxr3 + // upload microcode to dxr3 UploadMicroCode(); ///< open 'multimedia' streams @@ -77,24 +77,24 @@ cDxr3Interface::cDxr3Interface() m_fdAudio = Dxr3Open("_ma", cDxr3ConfigData::Instance().GetDxr3Card(), O_WRONLY | O_SYNC); m_fdSpu = Dxr3Open("_sp", cDxr3ConfigData::Instance().GetDxr3Card(), O_WRONLY | O_SYNC); - ///< everything ok? + // everything ok? if (!m_fdVideo || !m_fdAudio || !m_fdSpu) { cLog::Instance() << "Unable to open one of the 'mulitmedia' streams!\n"; exit(1); } - ///< create clock + // create clock m_pClock = new cDxr3SysClock(m_fdControl, m_fdVideo, m_fdSpu); - ///< everything ok? + // everything ok? if (!m_pClock) { cLog::Instance() << "Unable to allocate memory for m_pClock in cDxr3Interface\n"; exit(1); } - ///< set default values + // set default values m_AudioActive = false; m_VideoActive = false; m_OverlayActive = false; @@ -105,15 +105,15 @@ cDxr3Interface::cDxr3Interface() m_audioDataRate = 0; m_audioSampleSize = 0; - ///< default value 9 = unused value + // default value 9 = unused value m_audioMode = 9; m_aspectRatio = UNKNOWN_ASPECT_RATIO; m_spuMode = EM8300_SPUMODE_OFF; - ///< configure device based on settings + // configure device based on settings ConfigureDevice(); - ///< get bcs values from driver + // get bcs values from driver ioctl(m_fdControl, EM8300_IOCTL_GETBCS, &m_bcs); if (cDxr3ConfigData::Instance().GetDebug()) @@ -130,7 +130,7 @@ cDxr3Interface::cDxr3Interface() // ================================== cDxr3Interface::~cDxr3Interface() { - ///< close filehandles + // close filehandles if (m_fdControl) { close(m_fdControl); @@ -148,7 +148,7 @@ cDxr3Interface::~cDxr3Interface() close(m_fdAudio); } - ///< free some memory + // free some memory if (m_pClock) { delete m_pClock; @@ -862,7 +862,7 @@ void cDxr3Interface::UploadMicroCode() const char* MICRO_CODE_FILE = "/usr/share/misc/em8300.uc"; struct stat s; - ///< try to open it + // try to open it int UCODE = open(MICRO_CODE_FILE, O_RDONLY); if (UCODE <0) @@ -877,7 +877,7 @@ void cDxr3Interface::UploadMicroCode() exit(1); } - ///< read microcode + // read microcode em8300_microcode.ucode = new char[s.st_size]; if (em8300_microcode.ucode == NULL) { @@ -888,7 +888,7 @@ void cDxr3Interface::UploadMicroCode() if (read(UCODE,em8300_microcode.ucode,s.st_size) < 1) { cLog::Instance() << "Unable to read data from microcode file\n"; - ///< free memory to avoid memory leak + // free memory to avoid memory leak delete [] (char*) em8300_microcode.ucode; exit(1); } @@ -897,14 +897,16 @@ void cDxr3Interface::UploadMicroCode() em8300_microcode.ucode_size = s.st_size; - ///< upload it + // upload it if( ioctl(m_fdControl, EM8300_IOCTL_INIT, &em8300_microcode) == -1) { cLog::Instance() << "Microcode upload to failed!! \n"; - ///< free memory to avoid memory leak + // free memory to avoid memory leak delete [] (char*) em8300_microcode.ucode; exit(1); } + + // free memory to avoid memory leak delete [] (char*) em8300_microcode.ucode; if (cDxr3ConfigData::Instance().GetDebug()) @@ -919,7 +921,7 @@ void cDxr3Interface::ConfigureDevice() { uint32_t videomode = 0; - ///< set video mode + // set video mode if (cDxr3ConfigData::Instance().GetVideoMode() == PAL) { videomode = EM8300_VIDEOMODE_PAL; @@ -945,14 +947,14 @@ void cDxr3Interface::ConfigureDevice() } } - ///< make ioctl + // make ioctl if (ioctl(m_fdControl, EM8300_IOCTL_SET_VIDEOMODE, &videomode) == -1) { cLog::Instance() << "Unable to set videomode\n"; exit(1); } - ///< set audio mode + // set audio mode if (!cDxr3ConfigData::Instance().GetUseDigitalOut()) { SetAudioAnalog(); diff --git a/dxr3interface.h b/dxr3interface.h index 0735bb6..6c592dd 100644 --- a/dxr3interface.h +++ b/dxr3interface.h @@ -106,30 +106,30 @@ public: private: // file handles - int m_fdControl; - int m_fdVideo; - int m_fdSpu; - int m_fdAudio; + int m_fdControl; ///< filehandle for contol fifo of dxr3 card + int m_fdVideo; ///< filehandle for video fifo of dxr3 card + int m_fdAudio; ///< filehandle for audio fifo of dxr3 card + int m_fdSpu; ///< filehandle for spu fifo of dxr3 card // dxr3 clock - cDxr3SysClock* m_pClock; - - uint32_t m_audioChannelCount; - uint32_t m_audioDataRate; - int m_aspectDelayCounter; - uint32_t m_aspectRatio; - uint32_t m_horizontal; - uint32_t m_audioSampleSize; - uint32_t m_audioMode; - uint32_t m_spuMode; - bool m_ExternalReleased; // is dxr3 used by e.g. mplayer? - int m_volume; - bool m_AudioActive; - bool m_VideoActive; - bool m_OverlayActive; + cDxr3SysClock* m_pClock; ///< clock used for sync + + uint32_t m_audioMode; ///< current used audiomode like analog or digital-PCM + uint32_t m_audioChannelCount; ///< how many channles has the current audiostream + uint32_t m_audioDataRate; ///< which rate is used for the current audiostream + uint32_t m_audioSampleSize; ///< how big is the sample size for the current audiostream + //int m_aspectDelayCounter; + uint32_t m_aspectRatio; ///< current used aspect ratio + uint32_t m_horizontal; ///< horizontal size of current videostream + bool m_ExternalReleased; ///< is dxr3 used by e.g. mplayer? + int m_volume; ///< volumevalue (0...255) + uint32_t m_spuMode; ///< is spu enabled or disabled? + bool m_AudioActive; ///< is audio active? + bool m_VideoActive; ///< is video active? + bool m_OverlayActive; ///< is overlay active? // bcs - em8300_bcs_t m_bcs; + em8300_bcs_t m_bcs; ///< BrightnessContrastSaturation values void UploadMicroCode(); void ConfigureDevice(); @@ -137,7 +137,7 @@ private: void Resuscitation(); protected: - static cMutex* m_pMutex; + static cMutex* m_pMutex; ///< mutex for dxr3interface static void Lock() { cDxr3Interface::m_pMutex->Lock(); } static void Unlock() { cDxr3Interface::m_pMutex->Unlock(); } diff --git a/dxr3interface_spu_encoder.c b/dxr3interface_spu_encoder.c index 59b1a33..e47a2c1 100644 --- a/dxr3interface_spu_encoder.c +++ b/dxr3interface_spu_encoder.c @@ -28,12 +28,6 @@ #include "dxr3interface_spu_encoder.h" -/* -ToDo: - - cSPUEncoder::encode_do_row: FIXME: watch this space for EOL -*/ - - // ================================== // dec. cSpuData::~cSpuData() @@ -75,18 +69,13 @@ void cSpuData::WriteRle(int *higher_nibble, int length, int color) } - - // ================================== -cSPUEncoder::cSPUEncoder() +cSPUEncoder::cSPUEncoder() { - // clear osd - memset(OSD_Screen, 0x00 ,OSDWIDTH * OSDHEIGHT); - memset(OSD_Screen2, 0x00 ,OSDWIDTH * OSDHEIGHT); - memset(OSD_Screen3, 0x00 ,OSDWIDTH * OSDHEIGHT); + m_lastwindow = 0; - // set active area to 0 - //m_x0 = m_x1 = m_y0 = m_y1 = 0; + // clear osd + memset(m_OSD, 0x00 ,OSDWIDTH * OSDHEIGHT); } // ================================== @@ -94,15 +83,6 @@ cSPUEncoder::cSPUEncoder() // makes life nicer :) int cSPUEncoder::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1, const void *data) { - u_char *cp; - unsigned char idx = 0; - int opacity = 0; -#if VDRVERSNUM >= 10307 - const tColor *col; -#else - eDvbColor *col; -#endif - switch (cmd) { case OSD_SetWindow: @@ -125,6 +105,9 @@ int cSPUEncoder::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1, m_windows[m_lastwindow].x1 = x1; m_windows[m_lastwindow].y1 = y1; + // calculate new active osd area + CalculateActiveOsdArea(); + return 0; break; @@ -136,31 +119,6 @@ int cSPUEncoder::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1, // data has 4 byte for each color: // R,G,B, and a opacity value: 0->transparent, 1..254->mix, 255->pixel - #if VDRVERSNUM >= 10307 - col = (tColor*)data; - #else - eDvbColor *col; - col = (eDvbColor*)data; - #endif - - m_windows[m_lastwindow].NumColors = x0; - - for (int x = color, i = 0; x <= x0; x++,i++) - { - m_palManager.AddColor((int)*col & 0xFFFFFF); - - idx = m_palManager.GetIndex((int)*col & 0xFFFFFF); - if (m_palManager.HasChanged()) - { - cDxr3Interface::Instance().SetPalette(m_palManager.GetPalette()); - } - - opacity = ((*col & 0xFF000000) >> 24) * 0xF / 0xFF; - m_windows[m_lastwindow].colors[i] = (opacity << 4) | idx; - m_windows[m_lastwindow].opacity[i] = opacity; - col++; - } - return 0; break; @@ -171,93 +129,20 @@ int cSPUEncoder::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1, // inc<=0 uses blockwidth as linewidth // returns 0 on success, -1 on clipping all pixel - CopyBlockIntoOSD - ( - color, - m_windows[m_lastwindow].x0 + x0, - m_windows[m_lastwindow].y0 + y0, - m_windows[m_lastwindow].x0 + x1, - m_windows[m_lastwindow].y0 + y1, - (u_char *)data - ); - - // calculate osd size - CalculateActiveOsdArea(); - - //cLog::Instance() << "(" << m_x0 << ", " << m_x1 << ") - (" << m_y0 << ", " << m_y1 << ")"; - - m_encodeddata.count = 0; - EncodePixelbufRle(0,0, OSDWIDTH, OSDHEIGHT-1, OSD_Screen, 0, &m_encodeddata); - - if (cDxr3ConfigData::Instance().GetDebug()) - { - cLog::Instance() << "OSD Datasize: " << m_encodeddata.count << "\n"; - } - - if (m_encodeddata.count <= DATASIZE) - { - cDxr3Interface::Instance().WriteSpu((uint8_t*) &m_encodeddata, m_encodeddata.count); - return 0; - } - else - { - cLog::Instance() << "Waring: SPU data (" << m_encodeddata.count << ") size exceeds limit\n"; - return -1; - } + return 0; break; case OSD_Close: // clear colors from plattemanager - #if VDRVERSNUM >= 10307 - if ((col = (tColor*)m_windows[m_lastwindow].colors) != NULL) - #else - if ((col = (eDvbColor*)m_windows[m_lastwindow].colors) != NULL) - #endif - { - for (int i = 0; i < m_windows[m_lastwindow].NumColors; ++i) - { - m_palManager.RemoveColor((int)(col[i]) & 0xFFFFFF); - } - } - - // clear osd - for (int i = m_windows[m_lastwindow].y0; i <= m_windows[m_lastwindow].y1; ++i) - { - cp = &OSD_Screen[i*OSDWIDTH + m_windows[m_lastwindow].x0]; - if ((cp+m_windows[m_lastwindow].x1-m_windows[m_lastwindow].x0+1) < &OSD_Screen[OSDWIDTH * OSDHEIGHT-1]) - { - for (int xx=0; xx <= (m_windows[m_lastwindow].x1-m_windows[m_lastwindow].x0); xx++) - { - *(cp+xx) = 0x00; - } - } - else - { - continue; - } - } - - // encode rle - m_encodeddata.count = 0; - EncodePixelbufRle(0,0, OSDWIDTH, OSDHEIGHT-1, OSD_Screen, 0, &m_encodeddata); - // set windows position to 0 m_windows[m_lastwindow].x0 = 0; m_windows[m_lastwindow].y0 = 0; m_windows[m_lastwindow].x1 = 0; m_windows[m_lastwindow].y1 = 0; - if (m_encodeddata.count <= DATASIZE) - { - cDxr3Interface::Instance().WriteSpu((uint8_t*) &m_encodeddata, m_encodeddata.count); - return 0; - } - else - { - cLog::Instance() << "Waring: SPU data (" << m_encodeddata.count << ") size exceeds limit\n"; - return -1; - } + // calculate new active osd area + CalculateActiveOsdArea(); return 0; break; @@ -316,8 +201,8 @@ void cSPUEncoder::CopyBlockIntoOSD(int linewidth, int x0, int y0, int x1, int y1 for (i = y0; i <= y1; ++i) { - cp = &OSD_Screen[i*OSDWIDTH + x0]; - if ((cp+x1-x0+1) < &OSD_Screen[OSDWIDTH * OSDHEIGHT-1]) + cp = &m_OSD[i*OSDWIDTH + x0]; + if ((cp+x1-x0+1) < &m_OSD[OSDWIDTH * OSDHEIGHT-1]) { for (int xx=0; xx <= (x1-x0); xx++) { @@ -333,288 +218,23 @@ void cSPUEncoder::CopyBlockIntoOSD(int linewidth, int x0, int y0, int x1, int y1 } // ================================== -// taken from mplayer (spuenc.c) -void cSPUEncoder::EncodePixelbufRle(int x, int y, int w, int h, u_char *inbuf, int stride, encodedata *ed) -{ - pixbuf pb; - int i, row; - pb.x = w; - pb.y = h; - - if (cDxr3Interface::Instance().GetHorizontalSize() < 700) - { - double fac = (double)OSDWIDTH / (double)OSDWIDTH2; - ScaleOSD(fac, inbuf,10); - inbuf = OSD_Screen2; - } - - m_ColorManager = new cColorManager(); - - // Encode colors into highlight regions - m_ColorManager->EncodeColors(w, h, inbuf, OSD_Screen3); - inbuf = OSD_Screen3; - - pb.pixels = inbuf; - ed->count= 4; - ed->nibblewaiting= 0; - - row= 0; - for (i= 0; i < pb.y; i++) - { - encode_do_row(ed, &pb, row); - row+= 2; - if (row > pb.y) - { - row= 1; - ed->oddstart= ed->count; - } - } - encode_do_control(x,y, ed, &pb); - - delete m_ColorManager; -} - -// ================================== -void cSPUEncoder::ScaleOSD(double fac, unsigned char* buf, unsigned char NumColors) -{ - int y,x,s,d; - unsigned char dline[2 * OSDWIDTH + 10]; - - memset(OSD_Screen2, 0x00 ,OSDWIDTH * OSDHEIGHT); - - for (y = 0; y < OSDHEIGHT; y++) - { - memset(dline,0,2*OSDWIDTH+10); - - for (s=0,d=0; s < OSDWIDTH; s++,d+=2) - { - // stretch line to double width to 1440 - dline[d] = buf[y*OSDWIDTH + s]; - } - - for (d=1; d < (2*OSDWIDTH); d+=2) - { - #if VDRVERSNUM <= 10307 - // 'interpolate' values - if ((dline[d-1] == BLACK) || (dline[d+1] == BLACK)) - { - dline[d] = BLACK; - } - else if ((dline[d-1] == WHITE) || (dline[d+1] == WHITE)) - { - dline[d] = WHITE; - } - else if ((dline[d-1] == CYAN) || (dline[d+1] == CYAN)) - { - dline[d] = CYAN; - } - else - { - dline[d] = dline[d+1]; - } - #else /*VDRVERSNUM*/ - dline[d] = dline[d+1]; - #endif /*VDRVERSNUM*/ - } - - for (s=0, x = 0; x < OSDWIDTH2; x++,s+=3) - { - // now take every third pixel (1440/3=480) - OSD_Screen2[y * OSDWIDTH + x] = dline[s]; - } - } -} - -// ================================== -// taken from mplayer (spuenc.c) -void cSPUEncoder::encode_put_nibble(encodedata* ed, u_char nibble) -{ - if (ed->nibblewaiting) - { - ed->data[ed->count++]|= nibble; - ed->nibblewaiting= 0; - } - else - { - ed->data[ed->count]= nibble<<4; - ed->nibblewaiting= 1; - } -} - -// ================================== -// taken from mplayer (spuenc.c) -void cSPUEncoder::encode_pixels(encodedata* ed, int color, int number) -{ - if (number > 3) - { - if (number > 15) - { - encode_put_nibble(ed, 0); - if (number > 63) - { - encode_put_nibble(ed, (number & 0xC0)>>6); - } - } - encode_put_nibble(ed, (number & 0x3C)>>2); - } - encode_put_nibble(ed, ((number & 0xF)<<2) | color); -} - -// ================================== -// taken from mplayer (spuenc.c) -void cSPUEncoder::encode_eol(encodedata* ed) -{ - if (ed->nibblewaiting) - { - ed->count++; - ed->nibblewaiting= 0; - } - ed->data[ed->count++]= 0x00; - ed->data[ed->count++]= 0x00; -} - -// ================================== -// taken from mplayer (spuenc.c) -void cSPUEncoder::encode_do_row(encodedata* ed, pixbuf* pb, int row) -{ - int i= 0; - u_char* pix= pb->pixels + row * pb->x; - int color= *pix & 0x03; - int n= 0; /* the number of pixels of this color */ - - while (i++ < pb->x) - { - /* FIXME: watch this space for EOL */ - if ((*pix & 0x03) != color || n == 255 ) - { - encode_pixels( ed, color, n ); - color= *pix & 0x03; - n= 1; - } - else - { - n++; - } - pix++; - } - - /* this small optimization: (n>63) can save up to two bytes per line - * I wonder if this is compatible with all the hardware... */ - if (color == 0 && n > 63) - { - encode_eol( ed ); - } - else - { - encode_pixels( ed, color, n ); - } - - if (ed->nibblewaiting) - { - ed->count++; - ed->nibblewaiting= 0; - } -} - -// ================================== -// taken from mplayer (spuenc.c) -void cSPUEncoder::encode_do_control(int x,int y, encodedata* ed, pixbuf* pb) -{ - int controlstart= ed->count; - int x1; - int i; - u_int top, left, bottom, right; - - top= y; //this forces the first bit to be visible on a TV - left= x; //you could actually pass in x/y and do some nice - - bottom= top + pb->y - 1; - right= left + pb->x - 1; - - /* start at x0+2*/ - i= controlstart; - - x1= (i); //marker for last command block address - - /* display duration... */ - ed->data[i++]= 0x00; - ed->data[i++]= 0x00; //duration before turn on command occurs (will not be used) - - /* x1 */ - ed->data[i++]= x1 >> 8; //since this is the last command block, this - ed->data[i++]= x1 & 0xff;//points back to itself - - /* 0x00: force displaying */ - ed->data[i++]= 0x00; - - /* 0x03: palette info */ - ed->data[i++]= 0x03; - ed->data[i++]= 0x01; - ed->data[i++]= 0x23; - - /* 0x04: transparency info (reversed) */ - ed->data[i++]= 0x04; // SET_CONTR - ed->data[i++]= 0xFF; - ed->data[i++]= 0x70; - - /* 0x05: coordinates */ - ed->data[i++]= 0x05; // SET_DAREA - ed->data[i++]= left >> 4; - ed->data[i++]= ((left&0xf)<<4)+(right>>8); - ed->data[i++]= (right&0xff); - ed->data[i++]= top >> 4; - ed->data[i++]= ((top&0xf)<<4)+(bottom>>8); - ed->data[i++]= (bottom&0xff); - - /* 0x06: both fields' offsets */ - ed->data[i++]= 0x06; // SET_DSPXA - ed->data[i++]= 0x00; - ed->data[i++]= 0x04; - ed->data[i++]= ed->oddstart >> 8; - ed->data[i++]= ed->oddstart & 0xff; - - int len; - unsigned char *spudata; - - spudata = m_ColorManager->GetSpuData(len); - - for (int si= 0; si < len; si++) - { - ed->data[i++] = *(spudata + si); - } - - /* 0xFF: end sequence */ - ed->data[i++]= 0xFF; - if (! i&1 ) - { - ed->data[i++]= 0xff; - } - - /* x0 */ - ed->data[2]= (controlstart) >> 8; - ed->data[3]= (controlstart) & 0xff; - - /* packet size */ - ed->data[0]= i >> 8; - ed->data[1]= i & 0xff; - - ed->count= i; -} - -// ================================== // we _only_ write usefull data void cSPUEncoder::CalculateActiveOsdArea() { // reset - //m_x0 = m_x1 = m_y0 = m_y1 = 0; + m_active_osd.Reset(); // calculate -/* for (int i = 1; i < 8; i++) + for (int i = 0; i < 8; i++) { - m_x0 = max(m_x0, m_windows[i].x0); - m_x1 = max(m_x1, m_windows[i].y0); - m_y0 = max(m_y0, m_windows[i].x1); - m_y1 = max(m_y1, m_windows[i].y1); + m_active_osd.x0 = max(m_active_osd.x0, m_windows[i].x0); + m_active_osd.x1 = max(m_active_osd.x1, m_windows[i].y0); + m_active_osd.y0 = max(m_active_osd.y0, m_windows[i].x1); + m_active_osd.y1 = max(m_active_osd.y1, m_windows[i].y1); } -*/ + + cLog::Instance() << "OSD x0: " << m_active_osd.x0 << "\n"; + cLog::Instance() << "OSD y0: " << m_active_osd.y0 << "\n"; + cLog::Instance() << "OSD x1: " << m_active_osd.x1 << "\n"; + cLog::Instance() << "OSD y1: " << m_active_osd.y1 << "\n"; } diff --git a/dxr3interface_spu_encoder.h b/dxr3interface_spu_encoder.h index bee994b..be67d1c 100644 --- a/dxr3interface_spu_encoder.h +++ b/dxr3interface_spu_encoder.h @@ -64,7 +64,13 @@ struct sOSD_Window // used to get active osd area struct sRectal { - sRectal() : x0(0), x1(0), y0(0), y1(0) {} + sRectal() { Reset(); } + + void Reset() + { + x0 = x1 = y0 = y1 = 0; + } + size_t x0; size_t x1; @@ -95,14 +101,56 @@ private: }; // ================================== +class cSPUEncoder : public Singleton<cSPUEncoder> +{ +public: + cSPUEncoder(); + ~cSPUEncoder() {} + + int Cmd(OSD_Command cmd, int color = 0, int x0 = 0, int y0 = 0, int x1 = 0, int y1 = 0, const void *data = 0); + +private: + void CopyBlockIntoOSD(int linewidth, int x0,int y0, int x1, int y1, u_char *data); + + void CalculateActiveOsdArea(); + + + sOSD_Window m_windows[8]; + size_t m_lastwindow; + + // 'active' osd area + sRectal m_active_osd; + + // our osd :) + u_char m_OSD[OSDWIDTH * OSDHEIGHT]; +}; + +/* + +// ================================== struct pixbuf { int x, y; u_int rgb[4]; u_char* pixels; }; - +*/ // ================================== +/* + +dxr3interface.c: In member function `void cDxr3Interface::ClearOsd()': +dxr3interface.c:984: error: `encodedata' undeclared (first use this function) +dxr3interface.c:984: error: (Each undeclared identifier is reported only once + for each function it appears in.) +dxr3interface.c:984: error: parse error before `;' token +dxr3interface.c:987: error: `ed' undeclared (first use this function) +make: *** [dxr3interface.o] Error 1 + + + !!Fix this!! + +*/ + struct encodedata { u_char data[DATASIZE]; @@ -110,7 +158,7 @@ struct encodedata int oddstart; int nibblewaiting; }; - +/* // ================================== class cSPUEncoder : public Singleton<cSPUEncoder> { @@ -150,4 +198,6 @@ private: sRectal m_active_osd; }; +*/ + #endif /*_DXR3_INTERFACE_SPU_ENCODER_*/ @@ -22,6 +22,7 @@ #include "dxr3log.h" // ================================== +//! constructor cLog::cLog() { m_LogOpen = false; @@ -31,6 +32,7 @@ cLog::cLog() } // ================================== +//! constructor with filename cLog::cLog(std::string Filename) { m_LogOpen = false; @@ -82,12 +82,12 @@ public: } private: - std::ofstream m_LogStream; - bool m_LogOpen; - bool m_ForeFlush; - + std::ofstream m_LogStream; ///< Our logstream + bool m_LogOpen; ///< Is log open? + bool m_ForeFlush; ///< Do we want to flush log everytime? + void Open(std::string Filename); // with this function we open our logfile - void Close(); // with this function we close our logfile + void Close(); // with this function we close our logfile }; diff --git a/dxr3memcpy.c b/dxr3memcpy.c index b274bab..06dd134 100644 --- a/dxr3memcpy.c +++ b/dxr3memcpy.c @@ -40,6 +40,9 @@ void *(* dxr3_memcpy)(void *to, const void *from, size_t len); #if defined(ARCH_X86) || defined(ARCH_X86_64) // ================================== // for small memory blocks (<256 bytes) this version is faster +#define small_memcpy(to,from,n) { register unsigned long int dummy; __asm__ __volatile__("rep; movsb":"=&D"(to), "=&S"(from), "=&c"(dummy) :"0" (to), "1" (from),"2" (n) : "memory"); } +/* +// -- dosn't compile with 2.95 gcc -- #define small_memcpy(to,from,n)\ {\ register unsigned long int dummy;\ @@ -49,7 +52,7 @@ __asm__ __volatile__(\ :"0" (to), "1" (from),"2" (n)\ : "memory");\ } - +*/ // ================================== // linux kernel __memcpy (from: /include/asm/string.h) static __inline__ void * __memcpy ( diff --git a/dxr3memcpy.h b/dxr3memcpy.h index b0f8c14..6308532 100644 --- a/dxr3memcpy.h +++ b/dxr3memcpy.h @@ -54,7 +54,9 @@ #include "dxr3vdrincludes.h" // ================================== -// size of buffer for benchmark +/*! \def BUFSIZE + \brief size of buffers for benchmark :) +*/ #define BUFSIZE 1024*1024 enum { @@ -76,7 +78,11 @@ struct memcpy_routine }; // ================================== -// little class to to a nice benchmark +//! little class to to a nice benchmark +/* + Whith this class we can get the fastest memcyp + methode for target computer. +*/ class cDxr3MemcpyBench { public: @@ -22,7 +22,7 @@ public: class cDxr3Osd : public cOsdBase { private: - cSPUEncoder* Spu; + cSPUEncoder* Spu; ///< interface to cSPUEncoder bool SetWindow(cWindow*); diff --git a/dxr3osd_subpicture.c b/dxr3osd_subpicture.c index e6dc154..bc49086 100644 --- a/dxr3osd_subpicture.c +++ b/dxr3osd_subpicture.c @@ -5,6 +5,7 @@ #define MAXNUMWINDOWS 7 // OSD windows are counted 1...7 // ================================== +//! constructor cDxr3SubpictureOsd::cDxr3SubpictureOsd(int Left, int Top) : cOsd(Left, Top) { shown = false; @@ -48,7 +49,8 @@ eOsdError cDxr3SubpictureOsd::CanHandleAreas(const tArea *Areas, int NumAreas) for (int i = 0; i < NumAreas; i++) { - if (Areas[i].bpp != 1 && Areas[i].bpp != 2 && Areas[i].bpp != 4 && Areas[i].bpp != 8) + // at the moment we dont support 256 color palette + if (Areas[i].bpp != 1 && Areas[i].bpp != 2 && Areas[i].bpp != 4/* && Areas[i].bpp != 8*/) { return oeBppNotSupported; } diff --git a/dxr3osd_subpicture.h b/dxr3osd_subpicture.h index 6806c90..27d3f59 100644 --- a/dxr3osd_subpicture.h +++ b/dxr3osd_subpicture.h @@ -11,8 +11,8 @@ class cDxr3SubpictureOsd : public cOsd { private: - cSPUEncoder* Spu; - bool shown; + cSPUEncoder* Spu; ///< interface to cSPUEncoder + bool shown; ///< is the osd shown? public: cDxr3SubpictureOsd(int Left, int Top/*, int SpuDev*/); diff --git a/dxr3outputthread.c b/dxr3outputthread.c index d4a4a8e..7859c93 100644 --- a/dxr3outputthread.c +++ b/dxr3outputthread.c @@ -19,7 +19,7 @@ const int AUDIO_OFFSET = 4500; // ================================== // ================================== -// constr. +//! constructor cDxr3OutputThread::cDxr3OutputThread(cDxr3Interface& dxr3Device, cDxr3SyncBuffer& buffer) : cThread(), m_dxr3Device(dxr3Device), m_buffer(buffer), m_bStopThread(false), m_bNeedResync(false) { diff --git a/dxr3palettemanager.c b/dxr3palettemanager.c index 0769722..745e030 100644 --- a/dxr3palettemanager.c +++ b/dxr3palettemanager.c @@ -16,6 +16,7 @@ #include "dxr3tools.h" // ================================== +//! constructor cDxr3PaletteManager::cDxr3PaletteManager() { memset(m_colors, 0, sizeof(int) * MAX_COLORS); diff --git a/dxr3spudecoder.c b/dxr3spudecoder.c index 7e56219..1336483 100644 --- a/dxr3spudecoder.c +++ b/dxr3spudecoder.c @@ -84,6 +84,7 @@ void cDxr3SpuPalette::setPalette(const uint32_t * pal) #define revRect(r1, r2) { r1.x1 = r2.x2; r1.y1 = r2.y2; r1.x2 = r2.x1; r1.y2 = r2.y1; } // ================================== +//! constructor cDxr3SpuBitmap::cDxr3SpuBitmap(sDxr3SpuRect size, uint8_t * fodd, uint8_t * eodd, uint8_t * feven, uint8_t * eeven) { if (size.x1 < 0 || size.y1 < 0 || size.x2 >= spuXres diff --git a/dxr3spudecoder.h b/dxr3spudecoder.h index adaed7f..1ffe194 100644 --- a/dxr3spudecoder.h +++ b/dxr3spudecoder.h @@ -16,6 +16,7 @@ typedef struct sDxr3SpuPalDescr } aDxr3SpuPalDescr[4]; // ================================== +//! describes a rectal struct sDxr3SpuRect { int x1, y1; diff --git a/dxr3syncbuffer.c b/dxr3syncbuffer.c index 8ea8ccd..e7128ef 100644 --- a/dxr3syncbuffer.c +++ b/dxr3syncbuffer.c @@ -32,6 +32,7 @@ const int DXR3_MAX_VIDEO_FRAME_LENGTH = 4096; const int DXR3_MAX_AUDIO_FRAME_LENGTH = 4096; // ================================== +//! constructor cFixedLengthFrame::cFixedLengthFrame(uint32_t length) : m_count(0), m_length(length), m_pts(0), m_type(ftUnknown) { @@ -103,6 +104,7 @@ uint32_t cFixedLengthFrame::m_staticAudioDataRate = 0; // ================================== +//! constructor cDxr3SyncBuffer::cDxr3SyncBuffer(int frameCount, int frameLength, cDxr3Interface& dxr3Device) : cRingBuffer(frameCount, true), m_dxr3Device(dxr3Device) { m_pBuffer = new cFixedLengthFrame[frameCount](frameLength); diff --git a/dxr3unixserversocket.c b/dxr3unixserversocket.c index e418503..0a0324b 100644 --- a/dxr3unixserversocket.c +++ b/dxr3unixserversocket.c @@ -18,6 +18,7 @@ using namespace std; #endif // ================================== +//! constructor cDxr3UnixServerSocket::cDxr3UnixServerSocket(const char* pFileName, int backlog) { m_bConnected = false; |