summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY4
-rw-r--r--dxr3audiodecoder.c17
-rw-r--r--dxr3audiodecoder.h1
-rw-r--r--dxr3colormanager.c1
-rw-r--r--dxr3configdata.c3
-rw-r--r--dxr3configdata.h43
-rw-r--r--dxr3cpu.c6
-rw-r--r--dxr3demuxdevice.c2
-rw-r--r--dxr3device.c22
-rw-r--r--dxr3device.h4
-rw-r--r--dxr3ffmpeg.c7
-rw-r--r--dxr3ffmpeg.h17
-rw-r--r--dxr3interface.c42
-rw-r--r--dxr3interface.h42
-rw-r--r--dxr3interface_spu_encoder.c426
-rw-r--r--dxr3interface_spu_encoder.h56
-rw-r--r--dxr3log.c2
-rw-r--r--dxr3log.h10
-rw-r--r--dxr3memcpy.c5
-rw-r--r--dxr3memcpy.h10
-rw-r--r--dxr3osd.h2
-rw-r--r--dxr3osd_subpicture.c4
-rw-r--r--dxr3osd_subpicture.h4
-rw-r--r--dxr3outputthread.c2
-rw-r--r--dxr3palettemanager.c1
-rw-r--r--dxr3spudecoder.c1
-rw-r--r--dxr3spudecoder.h1
-rw-r--r--dxr3syncbuffer.c2
-rw-r--r--dxr3unixserversocket.c1
29 files changed, 227 insertions, 511 deletions
diff --git a/HISTORY b/HISTORY
index 5be5576..f8ff2f1 100644
--- a/HISTORY
+++ b/HISTORY
@@ -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_*/
diff --git a/dxr3cpu.c b/dxr3cpu.c
index 4666e89..4186013 100644
--- a/dxr3cpu.c
+++ b/dxr3cpu.c
@@ -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_*/
diff --git a/dxr3log.c b/dxr3log.c
index e2e5d30..c795a05 100644
--- a/dxr3log.c
+++ b/dxr3log.c
@@ -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;
diff --git a/dxr3log.h b/dxr3log.h
index b09e86e..bfabfe6 100644
--- a/dxr3log.h
+++ b/dxr3log.h
@@ -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:
diff --git a/dxr3osd.h b/dxr3osd.h
index 234689e..37901b4 100644
--- a/dxr3osd.h
+++ b/dxr3osd.h
@@ -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;