mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 21:20:31 -05:00 
			
		
		
		
	DATV demodulator: improvements
This commit is contained in:
		
							parent
							
								
									a483b58028
								
							
						
					
					
						commit
						1436844fb3
					
				@ -31,31 +31,24 @@ static const int DEFAULT_GUI_DECIMATION = 64;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
template<typename T> struct datvconstellation: runnable
 | 
					template<typename T> struct datvconstellation: runnable
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    T xymin;
 | 
					    T xymin, xymax;
 | 
				
			||||||
    T xymax;
 | 
					 | 
				
			||||||
    unsigned long decimation;
 | 
					    unsigned long decimation;
 | 
				
			||||||
    unsigned long pixels_per_frame;
 | 
					    unsigned long pixels_per_frame;
 | 
				
			||||||
    cstln_lut<256> **cstln;  // Optional ptr to optional constellation
 | 
					    cstln_lut<256> **cstln;  // Optional ptr to optional constellation
 | 
				
			||||||
 | 
					    DATVScreen *m_objDATVScreen;
 | 
				
			||||||
    pipereader<complex<T> > in;
 | 
					    pipereader<complex<T> > in;
 | 
				
			||||||
    unsigned long phase;
 | 
					    unsigned long phase;
 | 
				
			||||||
    DATVScreen *m_objDATVScreen;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    datvconstellation(
 | 
					    datvconstellation(scheduler *sch, pipebuf<complex<T> > &_in, T _xymin, T _xymax, const char *_name = NULL, DATVScreen * objDATVScreen = NULL) :
 | 
				
			||||||
            scheduler *sch,
 | 
					 | 
				
			||||||
            pipebuf<complex<T> > &_in,
 | 
					 | 
				
			||||||
            T _xymin,
 | 
					 | 
				
			||||||
            T _xymax,
 | 
					 | 
				
			||||||
            const char *_name = 0,
 | 
					 | 
				
			||||||
            DATVScreen * objDATVScreen = 0) :
 | 
					 | 
				
			||||||
            runnable(sch, _name ? _name : _in.name),
 | 
					            runnable(sch, _name ? _name : _in.name),
 | 
				
			||||||
            xymin(_xymin),
 | 
					            xymin(_xymin),
 | 
				
			||||||
            xymax(_xymax),
 | 
					            xymax(_xymax),
 | 
				
			||||||
            decimation(DEFAULT_GUI_DECIMATION),
 | 
					            decimation(DEFAULT_GUI_DECIMATION),
 | 
				
			||||||
            pixels_per_frame(1024),
 | 
					            pixels_per_frame(1024),
 | 
				
			||||||
        cstln(0),
 | 
					            cstln(NULL),
 | 
				
			||||||
 | 
					            m_objDATVScreen(objDATVScreen),
 | 
				
			||||||
            in(_in),
 | 
					            in(_in),
 | 
				
			||||||
        phase(0),
 | 
					            phase(0)
 | 
				
			||||||
        m_objDATVScreen(objDATVScreen)
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -76,11 +69,8 @@ template<typename T> struct datvconstellation: runnable
 | 
				
			|||||||
                    if (m_objDATVScreen != NULL)
 | 
					                    if (m_objDATVScreen != NULL)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        m_objDATVScreen->selectRow(
 | 
					                        m_objDATVScreen->selectRow(256 * (p->re - xymin) / (xymax - xymin));
 | 
				
			||||||
                                256 * (p->re - xymin) / (xymax - xymin));
 | 
					                        m_objDATVScreen->setDataColor(256 - 256 * ((p->im - xymin) / (xymax - xymin)), 255, 0, 255);
 | 
				
			||||||
                        m_objDATVScreen->setDataColor(
 | 
					 | 
				
			||||||
                                256 - 256 * ((p->im - xymin) / (xymax - xymin)),
 | 
					 | 
				
			||||||
                                255, 0, 255);
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -106,7 +96,6 @@ template<typename T> struct datvconstellation: runnable
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                m_objDATVScreen->renderImage(NULL);
 | 
					                m_objDATVScreen->renderImage(NULL);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            in.read(pixels_per_frame);
 | 
					            in.read(pixels_per_frame);
 | 
				
			||||||
@ -118,15 +107,8 @@ template<typename T> struct datvconstellation: runnable
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //private:
 | 
					 | 
				
			||||||
    //gfx g;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void draw_begin()
 | 
					    void draw_begin()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        //g.clear();
 | 
					 | 
				
			||||||
        //g.setfg(0, 255, 0);
 | 
					 | 
				
			||||||
        //g.line(g.w/2,0, g.w/2, g.h);
 | 
					 | 
				
			||||||
        //g.line(0,g.h/2, g.w,g.h/2);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -68,24 +68,11 @@ class DownChannelizer;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
using namespace leansdr;
 | 
					using namespace leansdr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum DATVModulation
 | 
					enum DATVModulation { BPSK, QPSK, PSK8, APSK16, APSK32, APSK64E, QAM16, QAM64, QAM256 };
 | 
				
			||||||
{
 | 
					enum dvb_version { DVB_S, DVB_S2 };
 | 
				
			||||||
    BPSK, QPSK, PSK8, APSK16, APSK32, APSK64E, QAM16, QAM64, QAM256
 | 
					enum dvb_sampler { SAMP_NEAREST, SAMP_LINEAR, SAMP_RRC };
 | 
				
			||||||
};
 | 
					 | 
				
			||||||
enum dvb_version
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    DVB_S, DVB_S2
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
enum dvb_sampler
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    SAMP_NEAREST, SAMP_LINEAR, SAMP_RRC
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
inline int decimation(float Fin, float Fout)
 | 
					inline int decimation(float Fin, float Fout) { int d = Fin / Fout; return max(d, 1); }
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    int d = Fin / Fout;
 | 
					 | 
				
			||||||
    return max(d, 1);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct config
 | 
					struct config
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -144,6 +131,7 @@ struct config
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct DATVConfig
 | 
					struct DATVConfig
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int intMsps;
 | 
					    int intMsps;
 | 
				
			||||||
@ -157,10 +145,11 @@ struct DATVConfig
 | 
				
			|||||||
    int intNotchFilters;
 | 
					    int intNotchFilters;
 | 
				
			||||||
    bool blnAllowDrift;
 | 
					    bool blnAllowDrift;
 | 
				
			||||||
    bool blnFastLock;
 | 
					    bool blnFastLock;
 | 
				
			||||||
    bool blnHDLC;
 | 
					    dvb_sampler enmFilter;
 | 
				
			||||||
    bool blnHardMetric;
 | 
					    bool blnHardMetric;
 | 
				
			||||||
    bool blnResample;
 | 
					    float fltRollOff;
 | 
				
			||||||
    bool blnViterbi;
 | 
					    bool blnViterbi;
 | 
				
			||||||
 | 
					    int intExcursion;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DATVConfig() :
 | 
					    DATVConfig() :
 | 
				
			||||||
        intMsps(1024000),
 | 
					        intMsps(1024000),
 | 
				
			||||||
@ -174,71 +163,32 @@ struct DATVConfig
 | 
				
			|||||||
        intNotchFilters(1),
 | 
					        intNotchFilters(1),
 | 
				
			||||||
        blnAllowDrift(false),
 | 
					        blnAllowDrift(false),
 | 
				
			||||||
        blnFastLock(false),
 | 
					        blnFastLock(false),
 | 
				
			||||||
            blnHDLC(false),
 | 
					        enmFilter(SAMP_LINEAR),
 | 
				
			||||||
        blnHardMetric(false),
 | 
					        blnHardMetric(false),
 | 
				
			||||||
            blnResample(false),
 | 
					        fltRollOff(0.35),
 | 
				
			||||||
            blnViterbi(false)
 | 
					        blnViterbi(false),
 | 
				
			||||||
 | 
					        intExcursion(10)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DATVDemod : public BasebandSampleSink, public ChannelSinkAPI
 | 
					class DATVDemod : public BasebandSampleSink, public ChannelSinkAPI
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	Q_OBJECT
 | 
						Q_OBJECT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    class MsgConfigureChannelizer: public Message
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
    MESSAGE_CLASS_DECLARATION
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public:
 | 
					 | 
				
			||||||
        int getCenterFrequency() const
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            return m_centerFrequency;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        static MsgConfigureChannelizer* create(int centerFrequency)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            return new MsgConfigureChannelizer(centerFrequency);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private:
 | 
					 | 
				
			||||||
        int m_centerFrequency;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        MsgConfigureChannelizer(int centerFrequency) :
 | 
					 | 
				
			||||||
                Message(), m_centerFrequency(centerFrequency)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DATVDemod(DeviceSourceAPI *);
 | 
					    DATVDemod(DeviceSourceAPI *);
 | 
				
			||||||
    ~DATVDemod();
 | 
					    ~DATVDemod();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    virtual void destroy()
 | 
					    virtual void destroy() { delete this; }
 | 
				
			||||||
    {
 | 
					    virtual void getIdentifier(QString& id) { id = objectName(); }
 | 
				
			||||||
        delete this;
 | 
					    virtual void getTitle(QString& title) { title = objectName(); }
 | 
				
			||||||
    }
 | 
					    virtual qint64 getCenterFrequency() const { return m_objRunning.intCenterFrequency; }
 | 
				
			||||||
    virtual void getIdentifier(QString& id)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        id = objectName();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    virtual void getTitle(QString& title)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        title = objectName();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    virtual qint64 getCenterFrequency() const
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        return m_objRunning.intCenterFrequency;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    virtual QByteArray serialize() const
 | 
					    virtual QByteArray serialize() const { return QByteArray(); }
 | 
				
			||||||
    {
 | 
					    virtual bool deserialize(const QByteArray& data __attribute__((unused))) { return false; }
 | 
				
			||||||
        return QByteArray();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    virtual bool deserialize(const QByteArray& data __attribute__((unused)))
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void configure(
 | 
					    void configure(
 | 
				
			||||||
        MessageQueue* objMessageQueue,
 | 
					        MessageQueue* objMessageQueue,
 | 
				
			||||||
@ -251,13 +201,13 @@ public:
 | 
				
			|||||||
        int intNotchFilters,
 | 
					        int intNotchFilters,
 | 
				
			||||||
        bool blnAllowDrift,
 | 
					        bool blnAllowDrift,
 | 
				
			||||||
        bool blnFastLock,
 | 
					        bool blnFastLock,
 | 
				
			||||||
            bool blnHDLC,
 | 
					        dvb_sampler enmFilter,
 | 
				
			||||||
        bool blnHardMetric,
 | 
					        bool blnHardMetric,
 | 
				
			||||||
            bool blnResample,
 | 
					        float fltRollOff,
 | 
				
			||||||
            bool blnViterbi);
 | 
					        bool blnViterbi,
 | 
				
			||||||
 | 
					        int intfltExcursion);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    virtual void feed(const SampleVector::const_iterator& begin,
 | 
						virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po);
 | 
				
			||||||
            const SampleVector::const_iterator& end, bool po);
 | 
					 | 
				
			||||||
	virtual void start();
 | 
						virtual void start();
 | 
				
			||||||
	virtual void stop();
 | 
						virtual void stop();
 | 
				
			||||||
	virtual bool handleMessage(const Message& cmd);
 | 
						virtual bool handleMessage(const Message& cmd);
 | 
				
			||||||
@ -279,18 +229,44 @@ public:
 | 
				
			|||||||
        int intNotchFilters,
 | 
					        int intNotchFilters,
 | 
				
			||||||
        bool blnAllowDrift,
 | 
					        bool blnAllowDrift,
 | 
				
			||||||
        bool blnFastLock,
 | 
					        bool blnFastLock,
 | 
				
			||||||
            bool blnHDLC,
 | 
					        dvb_sampler enmFilter,
 | 
				
			||||||
        bool blnHardMetric,
 | 
					        bool blnHardMetric,
 | 
				
			||||||
            bool blnResample,
 | 
					        float fltRollOff,
 | 
				
			||||||
            bool blnViterbi);
 | 
					        bool blnViterbi,
 | 
				
			||||||
 | 
					        int intEExcursion);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void CleanUpDATVFramework();
 | 
					    void CleanUpDATVFramework(bool blnRelease);
 | 
				
			||||||
    int GetSampleRate();
 | 
					    int GetSampleRate();
 | 
				
			||||||
    void InitDATVFramework();
 | 
					    void InitDATVFramework();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static const QString m_channelIdURI;
 | 
					    static const QString m_channelIdURI;
 | 
				
			||||||
    static const QString m_channelId;
 | 
					    static const QString m_channelId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class MsgConfigureChannelizer : public Message
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        MESSAGE_CLASS_DECLARATION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public:
 | 
				
			||||||
 | 
					            int getCenterFrequency() const { return m_centerFrequency; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            static MsgConfigureChannelizer* create(int centerFrequency)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return new MsgConfigureChannelizer(centerFrequency);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private:
 | 
				
			||||||
 | 
					            int m_centerFrequency;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            MsgConfigureChannelizer(int centerFrequency) :
 | 
				
			||||||
 | 
					            Message(),
 | 
				
			||||||
 | 
					            m_centerFrequency(centerFrequency)
 | 
				
			||||||
 | 
					            { }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private slots:
 | 
				
			||||||
 | 
					    void channelSampleRateChanged();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    class MsgConfigureDATVDemod : public Message
 | 
					    class MsgConfigureDATVDemod : public Message
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@ -307,25 +283,13 @@ private:
 | 
				
			|||||||
                int intNotchFilters,
 | 
					                int intNotchFilters,
 | 
				
			||||||
                bool blnAllowDrift,
 | 
					                bool blnAllowDrift,
 | 
				
			||||||
                bool blnFastLock,
 | 
					                bool blnFastLock,
 | 
				
			||||||
                bool blnHDLC,
 | 
					                dvb_sampler enmFilter,
 | 
				
			||||||
                bool blnHardMetric,
 | 
					                bool blnHardMetric,
 | 
				
			||||||
                bool blnResample,
 | 
					                float fltRollOff,
 | 
				
			||||||
                bool blnViterbi)
 | 
					                bool blnViterbi,
 | 
				
			||||||
 | 
					                int intExcursion)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
            return new MsgConfigureDATVDemod(
 | 
					                return new MsgConfigureDATVDemod(intRFBandwidth,intCenterFrequency,enmStandard, enmModulation, enmFEC, intSymbolRate, intNotchFilters, blnAllowDrift,blnFastLock,enmFilter,blnHardMetric,fltRollOff, blnViterbi, intExcursion);
 | 
				
			||||||
                    intRFBandwidth,
 | 
					 | 
				
			||||||
                    intCenterFrequency,
 | 
					 | 
				
			||||||
                    enmStandard,
 | 
					 | 
				
			||||||
                    enmModulation,
 | 
					 | 
				
			||||||
                    enmFEC,
 | 
					 | 
				
			||||||
                    intSymbolRate,
 | 
					 | 
				
			||||||
                    intNotchFilters,
 | 
					 | 
				
			||||||
                    blnAllowDrift,
 | 
					 | 
				
			||||||
                    blnFastLock,
 | 
					 | 
				
			||||||
                    blnHDLC,
 | 
					 | 
				
			||||||
                    blnHardMetric,
 | 
					 | 
				
			||||||
                    blnResample,
 | 
					 | 
				
			||||||
                    blnViterbi);
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            DATVConfig m_objMsgConfig;
 | 
					            DATVConfig m_objMsgConfig;
 | 
				
			||||||
@ -341,10 +305,11 @@ private:
 | 
				
			|||||||
                    int intNotchFilters,
 | 
					                    int intNotchFilters,
 | 
				
			||||||
                    bool blnAllowDrift,
 | 
					                    bool blnAllowDrift,
 | 
				
			||||||
                    bool blnFastLock,
 | 
					                    bool blnFastLock,
 | 
				
			||||||
                bool blnHDLC,
 | 
					                    dvb_sampler enmFilter,
 | 
				
			||||||
                    bool blnHardMetric,
 | 
					                    bool blnHardMetric,
 | 
				
			||||||
                bool blnResample,
 | 
					                    float fltRollOff,
 | 
				
			||||||
                bool blnViterbi) :
 | 
					                    bool blnViterbi,
 | 
				
			||||||
 | 
					                    int intExcursion) :
 | 
				
			||||||
                Message()
 | 
					                Message()
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                m_objMsgConfig.intRFBandwidth = intRFBandwidth;
 | 
					                m_objMsgConfig.intRFBandwidth = intRFBandwidth;
 | 
				
			||||||
@ -356,10 +321,11 @@ private:
 | 
				
			|||||||
                m_objMsgConfig.intNotchFilters = intNotchFilters;
 | 
					                m_objMsgConfig.intNotchFilters = intNotchFilters;
 | 
				
			||||||
                m_objMsgConfig.blnAllowDrift = blnAllowDrift;
 | 
					                m_objMsgConfig.blnAllowDrift = blnAllowDrift;
 | 
				
			||||||
                m_objMsgConfig.blnFastLock = blnFastLock;
 | 
					                m_objMsgConfig.blnFastLock = blnFastLock;
 | 
				
			||||||
            m_objMsgConfig.blnHDLC = blnHDLC;
 | 
					                m_objMsgConfig.enmFilter= enmFilter;
 | 
				
			||||||
                m_objMsgConfig.blnHardMetric = blnHardMetric;
 | 
					                m_objMsgConfig.blnHardMetric = blnHardMetric;
 | 
				
			||||||
            m_objMsgConfig.blnResample = blnResample;
 | 
					                m_objMsgConfig.fltRollOff = fltRollOff;
 | 
				
			||||||
                m_objMsgConfig.blnViterbi = blnViterbi;
 | 
					                m_objMsgConfig.blnViterbi = blnViterbi;
 | 
				
			||||||
 | 
					                m_objMsgConfig.intExcursion = intExcursion;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -444,6 +410,7 @@ private:
 | 
				
			|||||||
    pipebuf<u32> *p_locktime;
 | 
					    pipebuf<u32> *p_locktime;
 | 
				
			||||||
    mpeg_sync<u8,0> *r_sync_mpeg;
 | 
					    mpeg_sync<u8,0> *r_sync_mpeg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // DEINTERLEAVING
 | 
					    // DEINTERLEAVING
 | 
				
			||||||
    pipebuf< rspacket<u8> > *p_rspackets;
 | 
					    pipebuf< rspacket<u8> > *p_rspackets;
 | 
				
			||||||
    deinterleaver<u8> *r_deinter;
 | 
					    deinterleaver<u8> *r_deinter;
 | 
				
			||||||
@ -462,6 +429,7 @@ private:
 | 
				
			|||||||
    pipebuf<tspacket> *p_tspackets;
 | 
					    pipebuf<tspacket> *p_tspackets;
 | 
				
			||||||
    derandomizer *r_derand;
 | 
					    derandomizer *r_derand;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //OUTPUT
 | 
					    //OUTPUT
 | 
				
			||||||
    file_writer<tspacket> *r_stdout;
 | 
					    file_writer<tspacket> *r_stdout;
 | 
				
			||||||
    datvvideoplayer<tspacket> *r_videoplayer;
 | 
					    datvvideoplayer<tspacket> *r_videoplayer;
 | 
				
			||||||
@ -485,6 +453,7 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    bool m_blnInitialized;
 | 
					    bool m_blnInitialized;
 | 
				
			||||||
    bool m_blnRenderingVideo;
 | 
					    bool m_blnRenderingVideo;
 | 
				
			||||||
 | 
					    bool m_blnStartStopVideo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DATVModulation m_enmModulation;
 | 
					    DATVModulation m_enmModulation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -495,9 +464,6 @@ private:
 | 
				
			|||||||
    QMutex m_objSettingsMutex;
 | 
					    QMutex m_objSettingsMutex;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void ApplySettings();
 | 
					    void ApplySettings();
 | 
				
			||||||
 | 
					 | 
				
			||||||
private slots:
 | 
					 | 
				
			||||||
    void channelSampleRateChanged();
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // INCLUDE_DATVDEMOD_H
 | 
					#endif // INCLUDE_DATVDEMOD_H
 | 
				
			||||||
 | 
				
			|||||||
@ -78,14 +78,14 @@ void DATVDemodGUI::resetToDefaults()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    ui->chkAllowDrift->setChecked(false);
 | 
					    ui->chkAllowDrift->setChecked(false);
 | 
				
			||||||
    ui->chkFastlock->setChecked(true);
 | 
					    ui->chkFastlock->setChecked(true);
 | 
				
			||||||
    ui->chkHDLC->setChecked(false);
 | 
					 | 
				
			||||||
    ui->chkHardMetric->setChecked(false);
 | 
					    ui->chkHardMetric->setChecked(false);
 | 
				
			||||||
    ui->chkResample->setChecked(false);
 | 
					 | 
				
			||||||
    ui->chkViterbi->setChecked(false);
 | 
					    ui->chkViterbi->setChecked(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ui->cmbFEC->setCurrentIndex(0);
 | 
					    ui->cmbFEC->setCurrentIndex(0);
 | 
				
			||||||
    ui->cmbModulation->setCurrentIndex(0);
 | 
					    ui->cmbModulation->setCurrentIndex(0);
 | 
				
			||||||
    ui->cmbStandard->setCurrentIndex(0);
 | 
					    ui->cmbStandard->setCurrentIndex(0);
 | 
				
			||||||
 | 
					    ui->cmbFilter->setCurrentIndex(0);
 | 
				
			||||||
 | 
					    displayRRCParameters(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ui->spiNotchFilters->setValue(1);
 | 
					    ui->spiNotchFilters->setValue(1);
 | 
				
			||||||
    ui->prgSynchro->setValue(0);
 | 
					    ui->prgSynchro->setValue(0);
 | 
				
			||||||
@ -94,6 +94,9 @@ void DATVDemodGUI::resetToDefaults()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    ui->spiBandwidth->setValue(512000);
 | 
					    ui->spiBandwidth->setValue(512000);
 | 
				
			||||||
    ui->spiSymbolRate->setValue(250000);
 | 
					    ui->spiSymbolRate->setValue(250000);
 | 
				
			||||||
 | 
					    ui->spiRollOff->setValue(35);
 | 
				
			||||||
 | 
					    ui->spiExcursion->setValue(10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    blockApplySettings(false);
 | 
					    blockApplySettings(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -109,9 +112,9 @@ QByteArray DATVDemodGUI::serialize() const
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    s.writeBool(3, ui->chkAllowDrift->isChecked());
 | 
					    s.writeBool(3, ui->chkAllowDrift->isChecked());
 | 
				
			||||||
    s.writeBool(4, ui->chkFastlock->isChecked());
 | 
					    s.writeBool(4, ui->chkFastlock->isChecked());
 | 
				
			||||||
    s.writeBool(5, ui->chkHDLC->isChecked());
 | 
					    s.writeS32(5, ui->cmbFilter->currentIndex());
 | 
				
			||||||
    s.writeBool(6, ui->chkHardMetric->isChecked());
 | 
					    s.writeBool(6, ui->chkHardMetric->isChecked());
 | 
				
			||||||
    s.writeBool(7, ui->chkResample->isChecked());
 | 
					    s.writeS32(7, ui->spiRollOff->value());
 | 
				
			||||||
    s.writeBool(8, ui->chkViterbi->isChecked());
 | 
					    s.writeBool(8, ui->chkViterbi->isChecked());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s.writeS32(9, ui->cmbFEC->currentIndex());
 | 
					    s.writeS32(9, ui->cmbFEC->currentIndex());
 | 
				
			||||||
@ -121,6 +124,7 @@ QByteArray DATVDemodGUI::serialize() const
 | 
				
			|||||||
    s.writeS32(12, ui->spiNotchFilters->value());
 | 
					    s.writeS32(12, ui->spiNotchFilters->value());
 | 
				
			||||||
    s.writeS32(13, ui->spiBandwidth->value());
 | 
					    s.writeS32(13, ui->spiBandwidth->value());
 | 
				
			||||||
    s.writeS32(14, ui->spiSymbolRate->value());
 | 
					    s.writeS32(14, ui->spiSymbolRate->value());
 | 
				
			||||||
 | 
					    s.writeS32(15, ui->spiExcursion->value());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return s.final();
 | 
					    return s.final();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -163,14 +167,16 @@ bool DATVDemodGUI::deserialize(const QByteArray& arrData)
 | 
				
			|||||||
        d.readBool(4, &booltmp, false);
 | 
					        d.readBool(4, &booltmp, false);
 | 
				
			||||||
        ui->chkFastlock->setChecked(booltmp);
 | 
					        ui->chkFastlock->setChecked(booltmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        d.readBool(5, &booltmp, false);
 | 
					        d.readS32(5, &tmp, false);
 | 
				
			||||||
        ui->chkHDLC->setChecked(booltmp);
 | 
					        ui->cmbFilter->setCurrentIndex(tmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        displayRRCParameters((tmp==2));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        d.readBool(6, &booltmp, false);
 | 
					        d.readBool(6, &booltmp, false);
 | 
				
			||||||
        ui->chkHardMetric->setChecked(booltmp);
 | 
					        ui->chkHardMetric->setChecked(booltmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        d.readBool(7, &booltmp, false);
 | 
					        d.readS32(7, &tmp, false);
 | 
				
			||||||
        ui->chkResample->setChecked(booltmp);
 | 
					        ui->spiRollOff->setValue(tmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        d.readBool(8, &booltmp, false);
 | 
					        d.readBool(8, &booltmp, false);
 | 
				
			||||||
        ui->chkViterbi->setChecked(booltmp);
 | 
					        ui->chkViterbi->setChecked(booltmp);
 | 
				
			||||||
@ -194,6 +200,9 @@ bool DATVDemodGUI::deserialize(const QByteArray& arrData)
 | 
				
			|||||||
        d.readS32(14, &tmp, 250000);
 | 
					        d.readS32(14, &tmp, 250000);
 | 
				
			||||||
        ui->spiSymbolRate->setValue(tmp);
 | 
					        ui->spiSymbolRate->setValue(tmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        d.readS32(15, &tmp, false);
 | 
				
			||||||
 | 
					        ui->spiExcursion->setValue(tmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        blockApplySettings(false);
 | 
					        blockApplySettings(false);
 | 
				
			||||||
        m_objChannelMarker.blockSignals(false);
 | 
					        m_objChannelMarker.blockSignals(false);
 | 
				
			||||||
@ -227,11 +236,6 @@ void DATVDemodGUI::channelMarkerHighlightedByCursor()
 | 
				
			|||||||
    setHighlighted(m_objChannelMarker.getHighlighted());
 | 
					    setHighlighted(m_objChannelMarker.getHighlighted());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DATVDemodGUI::channelSampleRateChanged()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    qDebug("DATVDemodGUI::channelSampleRateChanged");
 | 
					 | 
				
			||||||
    applySettings();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DATVDemodGUI::onWidgetRolled(QWidget* widget __attribute__((unused)), bool rollDown __attribute__((unused)))
 | 
					void DATVDemodGUI::onWidgetRolled(QWidget* widget __attribute__((unused)), bool rollDown __attribute__((unused)))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -239,14 +243,6 @@ void DATVDemodGUI::onWidgetRolled(QWidget* widget __attribute__((unused)), bool
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void DATVDemodGUI::onMenuDoubleClicked()
 | 
					void DATVDemodGUI::onMenuDoubleClicked()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /*
 | 
					 | 
				
			||||||
    if (!m_blnBasicSettingsShown)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        m_blnBasicSettingsShown = true;
 | 
					 | 
				
			||||||
        BasicChannelSettingsWidget* bcsw = new BasicChannelSettingsWidget(&m_objChannelMarker, this);
 | 
					 | 
				
			||||||
        bcsw->show();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    */
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceSourceAPI *objDeviceAPI, QWidget* objParent) :
 | 
					//DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceSourceAPI *objDeviceAPI, QWidget* objParent) :
 | 
				
			||||||
@ -262,9 +258,7 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba
 | 
				
			|||||||
    ui->setupUi(this);
 | 
					    ui->setupUi(this);
 | 
				
			||||||
    setAttribute(Qt::WA_DeleteOnClose, true);
 | 
					    setAttribute(Qt::WA_DeleteOnClose, true);
 | 
				
			||||||
    connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
 | 
					    connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
 | 
				
			||||||
    //connect(this, SIGNAL(menuDoubleClickEvent()), this, SLOT(onMenuDoubleClicked()));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //m_objDATVDemod = new DATVDemod();
 | 
					 | 
				
			||||||
    m_objDATVDemod = (DATVDemod*) rxChannel;
 | 
					    m_objDATVDemod = (DATVDemod*) rxChannel;
 | 
				
			||||||
    m_objDATVDemod->setMessageQueueToGUI(getInputMessageQueue());
 | 
					    m_objDATVDemod->setMessageQueueToGUI(getInputMessageQueue());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -272,12 +266,7 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    connect(m_objDATVDemod->SetVideoRender(ui->screenTV_2),&DATVideostream::onDataPackets,this,&DATVDemodGUI::on_StreamDataAvailable);
 | 
					    connect(m_objDATVDemod->SetVideoRender(ui->screenTV_2),&DATVideostream::onDataPackets,this,&DATVDemodGUI::on_StreamDataAvailable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    connect(ui->screenTV_2,&DATVideoRender::onMetaDataChanged,this,&DATVDemodGUI::on_StreamMetaDataChanged);
 | 
				
			||||||
    //connect(m_objChannelizer, SIGNAL(inputSampleRateChanged()), this, SLOT(channelSampleRateChanged()));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //m_objPluginAPI->addThreadedSink(m_objThreadedChannelizer);
 | 
					 | 
				
			||||||
    //connect(&m_objPluginAPI->getMainWindow()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); // 50 ms
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_intPreviousDecodedData=0;
 | 
					    m_intPreviousDecodedData=0;
 | 
				
			||||||
    m_intLastDecodedData=0;
 | 
					    m_intLastDecodedData=0;
 | 
				
			||||||
@ -295,7 +284,6 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba
 | 
				
			|||||||
    m_objChannelMarker.setCenterFrequency(0);
 | 
					    m_objChannelMarker.setCenterFrequency(0);
 | 
				
			||||||
    m_objChannelMarker.blockSignals(false);
 | 
					    m_objChannelMarker.blockSignals(false);
 | 
				
			||||||
    m_objChannelMarker.setVisible(true);
 | 
					    m_objChannelMarker.setVisible(true);
 | 
				
			||||||
    //connect(&m_objChannelMarker, SIGNAL(changed()), this, SLOT(viewChanged()));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    connect(&m_objChannelMarker, SIGNAL(changedByCursor()), this, SLOT(channelMarkerChangedByCursor()));
 | 
					    connect(&m_objChannelMarker, SIGNAL(changedByCursor()), this, SLOT(channelMarkerChangedByCursor()));
 | 
				
			||||||
    connect(&m_objChannelMarker, SIGNAL(highlightedByCursor()), this, SLOT(channelMarkerHighlightedByCursor()));
 | 
					    connect(&m_objChannelMarker, SIGNAL(highlightedByCursor()), this, SLOT(channelMarkerHighlightedByCursor()));
 | 
				
			||||||
@ -304,8 +292,6 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba
 | 
				
			|||||||
    m_deviceUISet->addChannelMarker(&m_objChannelMarker);
 | 
					    m_deviceUISet->addChannelMarker(&m_objChannelMarker);
 | 
				
			||||||
    m_deviceUISet->addRollupWidget(this);
 | 
					    m_deviceUISet->addRollupWidget(this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //ui->screenTV->connectTimer(m_objPluginAPI->getMainWindow()->getMasterTimer());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ui->pushButton_3->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
 | 
					    ui->pushButton_3->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    resetToDefaults(); // does applySettings()
 | 
					    resetToDefaults(); // does applySettings()
 | 
				
			||||||
@ -335,22 +321,18 @@ void DATVDemodGUI::applySettings()
 | 
				
			|||||||
    DATVModulation enmSelectedModulation;
 | 
					    DATVModulation enmSelectedModulation;
 | 
				
			||||||
    dvb_version enmVersion;
 | 
					    dvb_version enmVersion;
 | 
				
			||||||
    code_rate enmFEC;
 | 
					    code_rate enmFEC;
 | 
				
			||||||
 | 
					    dvb_sampler enmSampler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (m_blnDoApplySettings)
 | 
					    if (m_blnDoApplySettings)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        DATVDemod::MsgConfigureChannelizer *msgChan = DATVDemod::MsgConfigureChannelizer::create(m_objChannelMarker.getCenterFrequency());
 | 
					        DATVDemod::MsgConfigureChannelizer *msgChan = DATVDemod::MsgConfigureChannelizer::create(m_objChannelMarker.getCenterFrequency());
 | 
				
			||||||
        m_objDATVDemod->getInputMessageQueue()->push(msgChan);
 | 
					        m_objDATVDemod->getInputMessageQueue()->push(msgChan);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Bandwidth and  center frequency
 | 
					        //Bandwidth and  center frequency
 | 
				
			||||||
        m_objChannelMarker.setBandwidth(ui->spiBandwidth->value());
 | 
					        m_objChannelMarker.setBandwidth(ui->spiBandwidth->value());
 | 
				
			||||||
        //m_objChannelizer->configure(m_objChannelizer->getInputMessageQueue(), m_objChannelizer->getInputSampleRate(), m_objChannelMarker.getCenterFrequency());
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        setTitleColor(m_objChannelMarker.getColor());
 | 
					        setTitleColor(m_objChannelMarker.getColor());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //DATV parameters: cmbStandard  cmbModulation cmbFEC spiBandwidth spiSymbolRate spiNotchFilters chkAllowDrift chkFastlock chkHDLC chkHardMetric chkResample chkViterbi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        strStandard = ui->cmbStandard->currentText();
 | 
					        strStandard = ui->cmbStandard->currentText();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(strStandard=="DVB-S")
 | 
					        if(strStandard=="DVB-S")
 | 
				
			||||||
@ -412,6 +394,12 @@ void DATVDemodGUI::applySettings()
 | 
				
			|||||||
            enmSelectedModulation=BPSK;
 | 
					            enmSelectedModulation=BPSK;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Viterbi only for BPSK et QPSK
 | 
				
			||||||
 | 
					        if((enmSelectedModulation!=BPSK) && (enmSelectedModulation!=QPSK))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ui->chkViterbi->setChecked(false);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        strFEC = ui->cmbFEC->currentText();
 | 
					        strFEC = ui->cmbFEC->currentText();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -452,8 +440,22 @@ void DATVDemodGUI::applySettings()
 | 
				
			|||||||
            enmFEC=FEC12;
 | 
					            enmFEC=FEC12;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (ui->cmbFilter->currentIndex()==0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            enmSampler = SAMP_LINEAR;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if(ui->cmbFilter->currentIndex()==1)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            enmSampler = SAMP_NEAREST;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            enmSampler = SAMP_RRC;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        m_objDATVDemod->configure(m_objDATVDemod->getInputMessageQueue(),
 | 
					
 | 
				
			||||||
 | 
					        m_objDATVDemod->configure(
 | 
				
			||||||
 | 
					            m_objDATVDemod->getInputMessageQueue(),
 | 
				
			||||||
            m_objChannelMarker.getBandwidth(),
 | 
					            m_objChannelMarker.getBandwidth(),
 | 
				
			||||||
            m_objChannelMarker.getCenterFrequency(),
 | 
					            m_objChannelMarker.getCenterFrequency(),
 | 
				
			||||||
            enmVersion,
 | 
					            enmVersion,
 | 
				
			||||||
@ -463,10 +465,11 @@ void DATVDemodGUI::applySettings()
 | 
				
			|||||||
            ui->spiNotchFilters->value(),
 | 
					            ui->spiNotchFilters->value(),
 | 
				
			||||||
            ui->chkAllowDrift->isChecked(),
 | 
					            ui->chkAllowDrift->isChecked(),
 | 
				
			||||||
            ui->chkFastlock->isChecked(),
 | 
					            ui->chkFastlock->isChecked(),
 | 
				
			||||||
                                  ui->chkHDLC->isChecked(),
 | 
					            enmSampler,
 | 
				
			||||||
            ui->chkHardMetric->isChecked(),
 | 
					            ui->chkHardMetric->isChecked(),
 | 
				
			||||||
                                  ui->chkResample->isChecked(),
 | 
					            ((float)ui->spiRollOff->value())/100.0f,
 | 
				
			||||||
                                  ui->chkViterbi->isChecked());
 | 
					            ui->chkViterbi->isChecked(),
 | 
				
			||||||
 | 
					            ui->spiExcursion->value());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        qDebug() << "DATVDemodGUI::applySettings:"
 | 
					        qDebug() << "DATVDemodGUI::applySettings:"
 | 
				
			||||||
                << " .inputSampleRate: " << 0  /*m_objChannelizer->getInputSampleRate()*/
 | 
					                << " .inputSampleRate: " << 0  /*m_objChannelizer->getInputSampleRate()*/
 | 
				
			||||||
@ -622,25 +625,11 @@ void DATVDemodGUI::on_chkHardMetric_clicked()
 | 
				
			|||||||
    applySettings();
 | 
					    applySettings();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
void DATVDemodGUI::on_pushButton_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    applySettings();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void DATVDemodGUI::on_pushButton_2_clicked()
 | 
					void DATVDemodGUI::on_pushButton_2_clicked()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    resetToDefaults();
 | 
					    resetToDefaults();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
void DATVDemodGUI::on_spiSampleRate_valueChanged(int arg1)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    applySettings();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void DATVDemodGUI::on_spiSymbolRate_valueChanged(int arg1 __attribute__((unused)))
 | 
					void DATVDemodGUI::on_spiSymbolRate_valueChanged(int arg1 __attribute__((unused)))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    applySettings();
 | 
					    applySettings();
 | 
				
			||||||
@ -651,21 +640,11 @@ void DATVDemodGUI::on_spiNotchFilters_valueChanged(int arg1 __attribute__((unuse
 | 
				
			|||||||
    applySettings();
 | 
					    applySettings();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DATVDemodGUI::on_chkHDLC_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
     applySettings();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void DATVDemodGUI::on_chkAllowDrift_clicked()
 | 
					void DATVDemodGUI::on_chkAllowDrift_clicked()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
     applySettings();
 | 
					     applySettings();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DATVDemodGUI::on_chkResample_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
     applySettings();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void DATVDemodGUI::on_pushButton_3_clicked()
 | 
					void DATVDemodGUI::on_pushButton_3_clicked()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -677,23 +656,6 @@ void DATVDemodGUI::on_pushButton_3_clicked()
 | 
				
			|||||||
   }
 | 
					   }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
void DATVDemodGUI::on_mediaStateChanged(QMediaPlayer::State state)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    switch(state)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        case QMediaPlayer::PlayingState:
 | 
					 | 
				
			||||||
            ui->pushButton_3->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        default:
 | 
					 | 
				
			||||||
            ui->pushButton_3->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ui->lblReadStatus->setText(QString("%1").arg(strLitteralState));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DATVDemodGUI::on_pushButton_4_clicked()
 | 
					void DATVDemodGUI::on_pushButton_4_clicked()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -726,7 +688,7 @@ QString DATVDemodGUI::formatBytes(qint64 intBytes)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void DATVDemodGUI::on_StreamDataAvailable(int *intPackets __attribute__((unused)), int *intBytes, int *intPercent, qint64 *intTotalReceived)
 | 
					void DATVDemodGUI::on_StreamDataAvailable(int *intPackets __attribute__((unused)), int *intBytes, int *intPercent, qint64 *intTotalReceived)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ui->lblStatus->setText(QString("Decod: %1B").arg(formatBytes(*intTotalReceived)));
 | 
					    ui->lblStatus->setText(QString("Data: %1B").arg(formatBytes(*intTotalReceived)));
 | 
				
			||||||
    m_intLastDecodedData = *intTotalReceived;
 | 
					    m_intLastDecodedData = *intTotalReceived;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if((*intPercent)<100)
 | 
					    if((*intPercent)<100)
 | 
				
			||||||
@ -752,3 +714,68 @@ void DATVDemodGUI::on_chkFastlock_clicked()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    applySettings();
 | 
					    applySettings();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DATVDemodGUI::on_StreamMetaDataChanged(DataTSMetaData2 *objMetaData)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QString strMetaData="";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(objMetaData!=NULL)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(objMetaData->OK_TransportStream==true)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            strMetaData.sprintf("PID: %d - Width: %d - Height: %d\r\n%s%s\r\nCodec: %s\r\n",objMetaData->PID
 | 
				
			||||||
 | 
					                                                                                  ,objMetaData->Width
 | 
				
			||||||
 | 
					                                                                                  ,objMetaData->Height
 | 
				
			||||||
 | 
					                                                                                  ,objMetaData->Program.toStdString().c_str()
 | 
				
			||||||
 | 
					                                                                                  ,objMetaData->Stream.toStdString().c_str()
 | 
				
			||||||
 | 
					                                                                                  ,objMetaData->CodecDescription.toStdString().c_str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        ui->textEdit->setText(strMetaData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ui->chkData->setChecked(objMetaData->OK_Data);
 | 
				
			||||||
 | 
					        ui->chkTS->setChecked(objMetaData->OK_TransportStream);
 | 
				
			||||||
 | 
					        ui->chkVS->setChecked(objMetaData->OK_VideoStream);
 | 
				
			||||||
 | 
					        ui->chkDecoding->setChecked(objMetaData->OK_Decoding);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(objMetaData->OK_Decoding==true)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ui->pushButton_3->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ui->pushButton_3->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(objMetaData->Height>0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ui->screenTV_2->setFixedWidth((int)objMetaData->Width*(270.0f/(float)objMetaData->Height));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DATVDemodGUI::displayRRCParameters(bool blnVisible)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ui->spiRollOff->setVisible(blnVisible);
 | 
				
			||||||
 | 
					    ui->spiExcursion->setVisible(blnVisible);
 | 
				
			||||||
 | 
					    ui->label_5->setVisible(blnVisible);
 | 
				
			||||||
 | 
					    ui->label_6->setVisible(blnVisible);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DATVDemodGUI::on_cmbFilter_currentIndexChanged(int index __attribute__((unused)))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    displayRRCParameters((ui->cmbFilter->currentIndex()==2));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    applySettings();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DATVDemodGUI::on_spiRollOff_valueChanged(int arg1 __attribute__((unused)))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    applySettings();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DATVDemodGUI::on_spiExcursion_valueChanged(int arg1 __attribute__((unused)))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    applySettings();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -81,40 +81,38 @@ private slots:
 | 
				
			|||||||
    void on_cmbFEC_currentIndexChanged(const QString &arg1);
 | 
					    void on_cmbFEC_currentIndexChanged(const QString &arg1);
 | 
				
			||||||
    void on_chkViterbi_clicked();
 | 
					    void on_chkViterbi_clicked();
 | 
				
			||||||
    void on_chkHardMetric_clicked();
 | 
					    void on_chkHardMetric_clicked();
 | 
				
			||||||
    //void on_pushButton_clicked();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void on_pushButton_2_clicked();
 | 
					    void on_pushButton_2_clicked();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //void on_spiSampleRate_valueChanged(int arg1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_spiSymbolRate_valueChanged(int arg1);
 | 
					    void on_spiSymbolRate_valueChanged(int arg1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void on_spiNotchFilters_valueChanged(int arg1);
 | 
					    void on_spiNotchFilters_valueChanged(int arg1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void on_chkHDLC_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_chkAllowDrift_clicked();
 | 
					    void on_chkAllowDrift_clicked();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void on_chkResample_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_pushButton_3_clicked();
 | 
					    void on_pushButton_3_clicked();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void on_pushButton_4_clicked();
 | 
					    void on_pushButton_4_clicked();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void on_mouseEvent(QMouseEvent* obj);
 | 
					    void on_mouseEvent(QMouseEvent* obj);
 | 
				
			||||||
    void on_StreamDataAvailable(int *intPackets, int *intBytes, int *intPercent, qint64 *intTotalReceived);
 | 
					    void on_StreamDataAvailable(int *intPackets, int *intBytes, int *intPercent, qint64 *intTotalReceived);
 | 
				
			||||||
 | 
					    void on_StreamMetaDataChanged(DataTSMetaData2 *objMetaData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void on_spiBandwidth_valueChanged(int arg1);
 | 
					    void on_spiBandwidth_valueChanged(int arg1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_chkFastlock_clicked();
 | 
					    void on_chkFastlock_clicked();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void on_cmbFilter_currentIndexChanged(int index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void on_spiRollOff_valueChanged(int arg1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void on_spiExcursion_valueChanged(int arg1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    Ui::DATVDemodGUI* ui;
 | 
					    Ui::DATVDemodGUI* ui;
 | 
				
			||||||
    PluginAPI* m_objPluginAPI;
 | 
					    PluginAPI* m_objPluginAPI;
 | 
				
			||||||
    DeviceUISet* m_deviceUISet;
 | 
					    DeviceUISet* m_deviceUISet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //DeviceSourceAPI* m_objDeviceAPI;
 | 
					 | 
				
			||||||
    ChannelMarker m_objChannelMarker;
 | 
					    ChannelMarker m_objChannelMarker;
 | 
				
			||||||
    ThreadedBasebandSampleSink* m_objThreadedChannelizer;
 | 
					    ThreadedBasebandSampleSink* m_objThreadedChannelizer;
 | 
				
			||||||
    DownChannelizer* m_objChannelizer;
 | 
					    DownChannelizer* m_objChannelizer;
 | 
				
			||||||
@ -132,7 +130,6 @@ private:
 | 
				
			|||||||
    bool m_blnDoApplySettings;
 | 
					    bool m_blnDoApplySettings;
 | 
				
			||||||
    bool m_blnButtonPlayClicked;
 | 
					    bool m_blnButtonPlayClicked;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //explicit DATVDemodGUI(PluginAPI* objPluginAPI, DeviceSourceAPI *objDeviceAPI, QWidget* objParent = NULL);
 | 
					 | 
				
			||||||
    explicit DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* objParent = 0);
 | 
					    explicit DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* objParent = 0);
 | 
				
			||||||
    virtual ~DATVDemodGUI();
 | 
					    virtual ~DATVDemodGUI();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -140,6 +137,8 @@ private:
 | 
				
			|||||||
	void applySettings();
 | 
						void applySettings();
 | 
				
			||||||
    QString formatBytes(qint64 intBytes);
 | 
					    QString formatBytes(qint64 intBytes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void displayRRCParameters(bool blnVisible);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void leaveEvent(QEvent*);
 | 
						void leaveEvent(QEvent*);
 | 
				
			||||||
	void enterEvent(QEvent*);
 | 
						void enterEvent(QEvent*);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@
 | 
				
			|||||||
    <x>0</x>
 | 
					    <x>0</x>
 | 
				
			||||||
    <y>0</y>
 | 
					    <y>0</y>
 | 
				
			||||||
    <width>512</width>
 | 
					    <width>512</width>
 | 
				
			||||||
    <height>520</height>
 | 
					    <height>640</height>
 | 
				
			||||||
   </rect>
 | 
					   </rect>
 | 
				
			||||||
  </property>
 | 
					  </property>
 | 
				
			||||||
  <property name="sizePolicy">
 | 
					  <property name="sizePolicy">
 | 
				
			||||||
@ -19,13 +19,13 @@
 | 
				
			|||||||
  <property name="minimumSize">
 | 
					  <property name="minimumSize">
 | 
				
			||||||
   <size>
 | 
					   <size>
 | 
				
			||||||
    <width>512</width>
 | 
					    <width>512</width>
 | 
				
			||||||
    <height>520</height>
 | 
					    <height>640</height>
 | 
				
			||||||
   </size>
 | 
					   </size>
 | 
				
			||||||
  </property>
 | 
					  </property>
 | 
				
			||||||
  <property name="maximumSize">
 | 
					  <property name="maximumSize">
 | 
				
			||||||
   <size>
 | 
					   <size>
 | 
				
			||||||
    <width>512</width>
 | 
					    <width>512</width>
 | 
				
			||||||
    <height>520</height>
 | 
					    <height>640</height>
 | 
				
			||||||
   </size>
 | 
					   </size>
 | 
				
			||||||
  </property>
 | 
					  </property>
 | 
				
			||||||
  <property name="font">
 | 
					  <property name="font">
 | 
				
			||||||
@ -97,6 +97,9 @@
 | 
				
			|||||||
         <height>220</height>
 | 
					         <height>220</height>
 | 
				
			||||||
        </size>
 | 
					        </size>
 | 
				
			||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="toolTip">
 | 
				
			||||||
 | 
					        <string>Signal constellation</string>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
       <property name="styleSheet">
 | 
					       <property name="styleSheet">
 | 
				
			||||||
        <string notr="true"/>
 | 
					        <string notr="true"/>
 | 
				
			||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
@ -128,16 +131,14 @@
 | 
				
			|||||||
       <height>21</height>
 | 
					       <height>21</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>DVB Standard</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <item>
 | 
					     <item>
 | 
				
			||||||
      <property name="text">
 | 
					      <property name="text">
 | 
				
			||||||
       <string>DVB-S</string>
 | 
					       <string>DVB-S</string>
 | 
				
			||||||
      </property>
 | 
					      </property>
 | 
				
			||||||
     </item>
 | 
					     </item>
 | 
				
			||||||
     <item>
 | 
					 | 
				
			||||||
      <property name="text">
 | 
					 | 
				
			||||||
       <string>DVB-S2</string>
 | 
					 | 
				
			||||||
      </property>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
    </widget>
 | 
					    </widget>
 | 
				
			||||||
    <widget class="QComboBox" name="cmbModulation">
 | 
					    <widget class="QComboBox" name="cmbModulation">
 | 
				
			||||||
     <property name="geometry">
 | 
					     <property name="geometry">
 | 
				
			||||||
@ -148,6 +149,9 @@
 | 
				
			|||||||
       <height>21</height>
 | 
					       <height>21</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Modulation scheme</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <item>
 | 
					     <item>
 | 
				
			||||||
      <property name="text">
 | 
					      <property name="text">
 | 
				
			||||||
       <string>BPSK</string>
 | 
					       <string>BPSK</string>
 | 
				
			||||||
@ -203,6 +207,9 @@
 | 
				
			|||||||
       <height>21</height>
 | 
					       <height>21</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>FEC ratio</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <item>
 | 
					     <item>
 | 
				
			||||||
      <property name="text">
 | 
					      <property name="text">
 | 
				
			||||||
       <string>1/2</string>
 | 
					       <string>1/2</string>
 | 
				
			||||||
@ -228,21 +235,6 @@
 | 
				
			|||||||
       <string>7/8</string>
 | 
					       <string>7/8</string>
 | 
				
			||||||
      </property>
 | 
					      </property>
 | 
				
			||||||
     </item>
 | 
					     </item>
 | 
				
			||||||
     <item>
 | 
					 | 
				
			||||||
      <property name="text">
 | 
					 | 
				
			||||||
       <string>4/5</string>
 | 
					 | 
				
			||||||
      </property>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item>
 | 
					 | 
				
			||||||
      <property name="text">
 | 
					 | 
				
			||||||
       <string>8/9</string>
 | 
					 | 
				
			||||||
      </property>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item>
 | 
					 | 
				
			||||||
      <property name="text">
 | 
					 | 
				
			||||||
       <string>9/10</string>
 | 
					 | 
				
			||||||
      </property>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
    </widget>
 | 
					    </widget>
 | 
				
			||||||
    <widget class="QCheckBox" name="chkFastlock">
 | 
					    <widget class="QCheckBox" name="chkFastlock">
 | 
				
			||||||
     <property name="geometry">
 | 
					     <property name="geometry">
 | 
				
			||||||
@ -253,6 +245,9 @@
 | 
				
			|||||||
       <height>20</height>
 | 
					       <height>20</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Fast signal decode</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <property name="text">
 | 
					     <property name="text">
 | 
				
			||||||
      <string>FAST LOCK</string>
 | 
					      <string>FAST LOCK</string>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
@ -261,11 +256,14 @@
 | 
				
			|||||||
     <property name="geometry">
 | 
					     <property name="geometry">
 | 
				
			||||||
      <rect>
 | 
					      <rect>
 | 
				
			||||||
       <x>140</x>
 | 
					       <x>140</x>
 | 
				
			||||||
       <y>140</y>
 | 
					       <y>120</y>
 | 
				
			||||||
       <width>81</width>
 | 
					       <width>81</width>
 | 
				
			||||||
       <height>20</height>
 | 
					       <height>20</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Viterbi algorithm (CPU intensive)</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <property name="text">
 | 
					     <property name="text">
 | 
				
			||||||
      <string>VITERBI</string>
 | 
					      <string>VITERBI</string>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
@ -279,6 +277,9 @@
 | 
				
			|||||||
       <height>20</height>
 | 
					       <height>20</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Constellation hardening</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <property name="text">
 | 
					     <property name="text">
 | 
				
			||||||
      <string>HARD METRIC</string>
 | 
					      <string>HARD METRIC</string>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
@ -309,19 +310,6 @@
 | 
				
			|||||||
      <string>Bandwidth</string>
 | 
					      <string>Bandwidth</string>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
    </widget>
 | 
					    </widget>
 | 
				
			||||||
    <widget class="QCheckBox" name="chkHDLC">
 | 
					 | 
				
			||||||
     <property name="geometry">
 | 
					 | 
				
			||||||
      <rect>
 | 
					 | 
				
			||||||
       <x>10</x>
 | 
					 | 
				
			||||||
       <y>140</y>
 | 
					 | 
				
			||||||
       <width>101</width>
 | 
					 | 
				
			||||||
       <height>20</height>
 | 
					 | 
				
			||||||
      </rect>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
     <property name="text">
 | 
					 | 
				
			||||||
      <string>HDLC</string>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
    </widget>
 | 
					 | 
				
			||||||
    <widget class="QCheckBox" name="chkAllowDrift">
 | 
					    <widget class="QCheckBox" name="chkAllowDrift">
 | 
				
			||||||
     <property name="geometry">
 | 
					     <property name="geometry">
 | 
				
			||||||
      <rect>
 | 
					      <rect>
 | 
				
			||||||
@ -331,6 +319,9 @@
 | 
				
			|||||||
       <height>20</height>
 | 
					       <height>20</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Small frequency drift compensation</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <property name="text">
 | 
					     <property name="text">
 | 
				
			||||||
      <string>ALLOW DRIFT</string>
 | 
					      <string>ALLOW DRIFT</string>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
@ -344,6 +335,9 @@
 | 
				
			|||||||
       <height>23</height>
 | 
					       <height>23</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Number of stray peaks to suppress</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <property name="maximum">
 | 
					     <property name="maximum">
 | 
				
			||||||
      <number>32</number>
 | 
					      <number>32</number>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
@ -361,28 +355,18 @@
 | 
				
			|||||||
      <string>Notch filter</string>
 | 
					      <string>Notch filter</string>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
    </widget>
 | 
					    </widget>
 | 
				
			||||||
    <widget class="QCheckBox" name="chkResample">
 | 
					 | 
				
			||||||
     <property name="geometry">
 | 
					 | 
				
			||||||
      <rect>
 | 
					 | 
				
			||||||
       <x>140</x>
 | 
					 | 
				
			||||||
       <y>120</y>
 | 
					 | 
				
			||||||
       <width>85</width>
 | 
					 | 
				
			||||||
       <height>20</height>
 | 
					 | 
				
			||||||
      </rect>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
     <property name="text">
 | 
					 | 
				
			||||||
      <string>RESAMPLE</string>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
    </widget>
 | 
					 | 
				
			||||||
    <widget class="QProgressBar" name="prgSynchro">
 | 
					    <widget class="QProgressBar" name="prgSynchro">
 | 
				
			||||||
     <property name="geometry">
 | 
					     <property name="geometry">
 | 
				
			||||||
      <rect>
 | 
					      <rect>
 | 
				
			||||||
       <x>70</x>
 | 
					       <x>70</x>
 | 
				
			||||||
       <y>190</y>
 | 
					       <y>200</y>
 | 
				
			||||||
       <width>181</width>
 | 
					       <width>181</width>
 | 
				
			||||||
       <height>20</height>
 | 
					       <height>20</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Video buffer fill</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <property name="value">
 | 
					     <property name="value">
 | 
				
			||||||
      <number>0</number>
 | 
					      <number>0</number>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
@ -391,11 +375,14 @@
 | 
				
			|||||||
     <property name="geometry">
 | 
					     <property name="geometry">
 | 
				
			||||||
      <rect>
 | 
					      <rect>
 | 
				
			||||||
       <x>10</x>
 | 
					       <x>10</x>
 | 
				
			||||||
       <y>170</y>
 | 
					       <y>180</y>
 | 
				
			||||||
       <width>111</width>
 | 
					       <width>111</width>
 | 
				
			||||||
       <height>16</height>
 | 
					       <height>16</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Total number of bytes decoded</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <property name="text">
 | 
					     <property name="text">
 | 
				
			||||||
      <string>-</string>
 | 
					      <string>-</string>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
@ -404,7 +391,7 @@
 | 
				
			|||||||
     <property name="geometry">
 | 
					     <property name="geometry">
 | 
				
			||||||
      <rect>
 | 
					      <rect>
 | 
				
			||||||
       <x>230</x>
 | 
					       <x>230</x>
 | 
				
			||||||
       <y>140</y>
 | 
					       <y>120</y>
 | 
				
			||||||
       <width>21</width>
 | 
					       <width>21</width>
 | 
				
			||||||
       <height>22</height>
 | 
					       <height>22</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
@ -422,6 +409,9 @@
 | 
				
			|||||||
       <height>23</height>
 | 
					       <height>23</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Symbol rate</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <property name="minimum">
 | 
					     <property name="minimum">
 | 
				
			||||||
      <number>1</number>
 | 
					      <number>1</number>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
@ -441,6 +431,9 @@
 | 
				
			|||||||
       <height>23</height>
 | 
					       <height>23</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>RF filter bandwidth</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <property name="minimum">
 | 
					     <property name="minimum">
 | 
				
			||||||
      <number>1000</number>
 | 
					      <number>1000</number>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
@ -455,11 +448,14 @@
 | 
				
			|||||||
     <property name="geometry">
 | 
					     <property name="geometry">
 | 
				
			||||||
      <rect>
 | 
					      <rect>
 | 
				
			||||||
       <x>130</x>
 | 
					       <x>130</x>
 | 
				
			||||||
       <y>170</y>
 | 
					       <y>180</y>
 | 
				
			||||||
       <width>121</width>
 | 
					       <width>121</width>
 | 
				
			||||||
       <height>16</height>
 | 
					       <height>16</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Stream speed</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
     <property name="text">
 | 
					     <property name="text">
 | 
				
			||||||
      <string>-</string>
 | 
					      <string>-</string>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
@ -468,7 +464,7 @@
 | 
				
			|||||||
     <property name="geometry">
 | 
					     <property name="geometry">
 | 
				
			||||||
      <rect>
 | 
					      <rect>
 | 
				
			||||||
       <x>10</x>
 | 
					       <x>10</x>
 | 
				
			||||||
       <y>190</y>
 | 
					       <y>200</y>
 | 
				
			||||||
       <width>61</width>
 | 
					       <width>61</width>
 | 
				
			||||||
       <height>15</height>
 | 
					       <height>15</height>
 | 
				
			||||||
      </rect>
 | 
					      </rect>
 | 
				
			||||||
@ -477,46 +473,189 @@
 | 
				
			|||||||
      <string>Buffer:</string>
 | 
					      <string>Buffer:</string>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
    </widget>
 | 
					    </widget>
 | 
				
			||||||
 | 
					    <widget class="QComboBox" name="cmbFilter">
 | 
				
			||||||
 | 
					     <property name="geometry">
 | 
				
			||||||
 | 
					      <rect>
 | 
				
			||||||
 | 
					       <x>10</x>
 | 
				
			||||||
 | 
					       <y>150</y>
 | 
				
			||||||
 | 
					       <width>91</width>
 | 
				
			||||||
 | 
					       <height>22</height>
 | 
				
			||||||
 | 
					      </rect>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Filter</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <item>
 | 
				
			||||||
 | 
					      <property name="text">
 | 
				
			||||||
 | 
					       <string>FIR LINEAR</string>
 | 
				
			||||||
 | 
					      </property>
 | 
				
			||||||
 | 
					     </item>
 | 
				
			||||||
 | 
					     <item>
 | 
				
			||||||
 | 
					      <property name="text">
 | 
				
			||||||
 | 
					       <string>FIR NEAREST</string>
 | 
				
			||||||
 | 
					      </property>
 | 
				
			||||||
 | 
					     </item>
 | 
				
			||||||
 | 
					     <item>
 | 
				
			||||||
 | 
					      <property name="text">
 | 
				
			||||||
 | 
					       <string>FIR RRC</string>
 | 
				
			||||||
 | 
					      </property>
 | 
				
			||||||
 | 
					     </item>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					    <widget class="QSpinBox" name="spiRollOff">
 | 
				
			||||||
 | 
					     <property name="geometry">
 | 
				
			||||||
 | 
					      <rect>
 | 
				
			||||||
 | 
					       <x>140</x>
 | 
				
			||||||
 | 
					       <y>150</y>
 | 
				
			||||||
 | 
					       <width>41</width>
 | 
				
			||||||
 | 
					       <height>23</height>
 | 
				
			||||||
 | 
					      </rect>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>RRC filter roll off factor </string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="minimum">
 | 
				
			||||||
 | 
					      <number>1</number>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="maximum">
 | 
				
			||||||
 | 
					      <number>99</number>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="value">
 | 
				
			||||||
 | 
					      <number>35</number>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					    <widget class="QLabel" name="label_5">
 | 
				
			||||||
 | 
					     <property name="geometry">
 | 
				
			||||||
 | 
					      <rect>
 | 
				
			||||||
 | 
					       <x>106</x>
 | 
				
			||||||
 | 
					       <y>150</y>
 | 
				
			||||||
 | 
					       <width>28</width>
 | 
				
			||||||
 | 
					       <height>23</height>
 | 
				
			||||||
 | 
					      </rect>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="text">
 | 
				
			||||||
 | 
					      <string>R.off</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					    <widget class="QLabel" name="label_6">
 | 
				
			||||||
 | 
					     <property name="geometry">
 | 
				
			||||||
 | 
					      <rect>
 | 
				
			||||||
 | 
					       <x>180</x>
 | 
				
			||||||
 | 
					       <y>150</y>
 | 
				
			||||||
 | 
					       <width>28</width>
 | 
				
			||||||
 | 
					       <height>23</height>
 | 
				
			||||||
 | 
					      </rect>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="text">
 | 
				
			||||||
 | 
					      <string>Exc</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					    <widget class="QSpinBox" name="spiExcursion">
 | 
				
			||||||
 | 
					     <property name="geometry">
 | 
				
			||||||
 | 
					      <rect>
 | 
				
			||||||
 | 
					       <x>210</x>
 | 
				
			||||||
 | 
					       <y>150</y>
 | 
				
			||||||
 | 
					       <width>41</width>
 | 
				
			||||||
 | 
					       <height>23</height>
 | 
				
			||||||
 | 
					      </rect>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="toolTip">
 | 
				
			||||||
 | 
					      <string>Filter excursion (dB)</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="minimum">
 | 
				
			||||||
 | 
					      <number>1</number>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="maximum">
 | 
				
			||||||
 | 
					      <number>99</number>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="value">
 | 
				
			||||||
 | 
					      <number>10</number>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
   </widget>
 | 
					   </widget>
 | 
				
			||||||
  </widget>
 | 
					  </widget>
 | 
				
			||||||
  <widget class="QGroupBox" name="groupBox_2">
 | 
					  <widget class="QGroupBox" name="groupBox_2">
 | 
				
			||||||
   <property name="geometry">
 | 
					   <property name="geometry">
 | 
				
			||||||
    <rect>
 | 
					    <rect>
 | 
				
			||||||
     <x>10</x>
 | 
					     <x>10</x>
 | 
				
			||||||
     <y>260</y>
 | 
					     <y>250</y>
 | 
				
			||||||
     <width>496</width>
 | 
					     <width>496</width>
 | 
				
			||||||
     <height>240</height>
 | 
					     <height>385</height>
 | 
				
			||||||
    </rect>
 | 
					    </rect>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <property name="minimumSize">
 | 
					   <property name="minimumSize">
 | 
				
			||||||
    <size>
 | 
					    <size>
 | 
				
			||||||
     <width>496</width>
 | 
					     <width>496</width>
 | 
				
			||||||
     <height>240</height>
 | 
					     <height>385</height>
 | 
				
			||||||
    </size>
 | 
					    </size>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <property name="maximumSize">
 | 
					   <property name="maximumSize">
 | 
				
			||||||
    <size>
 | 
					    <size>
 | 
				
			||||||
     <width>496</width>
 | 
					     <width>496</width>
 | 
				
			||||||
     <height>240</height>
 | 
					     <height>385</height>
 | 
				
			||||||
    </size>
 | 
					    </size>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <property name="title">
 | 
					   <property name="title">
 | 
				
			||||||
    <string>VIDEO Stream</string>
 | 
					    <string>VIDEO Stream</string>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <widget class="QWidget" name="layoutWidget_2">
 | 
					   <widget class="QTextEdit" name="textEdit">
 | 
				
			||||||
 | 
					    <property name="geometry">
 | 
				
			||||||
 | 
					     <rect>
 | 
				
			||||||
 | 
					      <x>0</x>
 | 
				
			||||||
 | 
					      <y>300</y>
 | 
				
			||||||
 | 
					      <width>281</width>
 | 
				
			||||||
 | 
					      <height>81</height>
 | 
				
			||||||
 | 
					     </rect>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="readOnly">
 | 
				
			||||||
 | 
					     <bool>true</bool>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="acceptRichText">
 | 
				
			||||||
 | 
					     <bool>false</bool>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					   </widget>
 | 
				
			||||||
 | 
					   <widget class="QPushButton" name="pushButton_4">
 | 
				
			||||||
 | 
					    <property name="geometry">
 | 
				
			||||||
 | 
					     <rect>
 | 
				
			||||||
 | 
					      <x>400</x>
 | 
				
			||||||
 | 
					      <y>350</y>
 | 
				
			||||||
 | 
					      <width>91</width>
 | 
				
			||||||
 | 
					      <height>27</height>
 | 
				
			||||||
 | 
					     </rect>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="toolTip">
 | 
				
			||||||
 | 
					     <string>Full screen video (click in the image to return)</string>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="text">
 | 
				
			||||||
 | 
					     <string>Full Screen</string>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					   </widget>
 | 
				
			||||||
 | 
					   <widget class="QPushButton" name="pushButton_3">
 | 
				
			||||||
 | 
					    <property name="geometry">
 | 
				
			||||||
 | 
					     <rect>
 | 
				
			||||||
 | 
					      <x>400</x>
 | 
				
			||||||
 | 
					      <y>300</y>
 | 
				
			||||||
 | 
					      <width>91</width>
 | 
				
			||||||
 | 
					      <height>27</height>
 | 
				
			||||||
 | 
					     </rect>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="toolTip">
 | 
				
			||||||
 | 
					     <string>Start/Stop video streaming</string>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="text">
 | 
				
			||||||
 | 
					     <string>  Video</string>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					   </widget>
 | 
				
			||||||
 | 
					   <widget class="QWidget" name="formLayoutWidget">
 | 
				
			||||||
    <property name="geometry">
 | 
					    <property name="geometry">
 | 
				
			||||||
     <rect>
 | 
					     <rect>
 | 
				
			||||||
      <x>0</x>
 | 
					      <x>0</x>
 | 
				
			||||||
      <y>20</y>
 | 
					      <y>20</y>
 | 
				
			||||||
      <width>358</width>
 | 
					      <width>488</width>
 | 
				
			||||||
      <height>211</height>
 | 
					      <height>272</height>
 | 
				
			||||||
     </rect>
 | 
					     </rect>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
    <layout class="QHBoxLayout" name="screenTVLayout_2">
 | 
					    <layout class="QFormLayout" name="formLayout">
 | 
				
			||||||
     <property name="sizeConstraint">
 | 
					     <item row="0" column="0">
 | 
				
			||||||
      <enum>QLayout::SetMinimumSize</enum>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
     <item>
 | 
					 | 
				
			||||||
      <widget class="DATVideoRender" name="screenTV_2" native="true">
 | 
					      <widget class="DATVideoRender" name="screenTV_2" native="true">
 | 
				
			||||||
       <property name="sizePolicy">
 | 
					       <property name="sizePolicy">
 | 
				
			||||||
        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
 | 
					        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
 | 
				
			||||||
@ -526,16 +665,19 @@
 | 
				
			|||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
       <property name="minimumSize">
 | 
					       <property name="minimumSize">
 | 
				
			||||||
        <size>
 | 
					        <size>
 | 
				
			||||||
         <width>356</width>
 | 
					         <width>480</width>
 | 
				
			||||||
         <height>200</height>
 | 
					         <height>270</height>
 | 
				
			||||||
        </size>
 | 
					        </size>
 | 
				
			||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
       <property name="maximumSize">
 | 
					       <property name="maximumSize">
 | 
				
			||||||
        <size>
 | 
					        <size>
 | 
				
			||||||
         <width>356</width>
 | 
					         <width>355</width>
 | 
				
			||||||
         <height>200</height>
 | 
					         <height>270</height>
 | 
				
			||||||
        </size>
 | 
					        </size>
 | 
				
			||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="toolTip">
 | 
				
			||||||
 | 
					        <string>Video</string>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
       <property name="styleSheet">
 | 
					       <property name="styleSheet">
 | 
				
			||||||
        <string notr="true"/>
 | 
					        <string notr="true"/>
 | 
				
			||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
@ -543,73 +685,93 @@
 | 
				
			|||||||
     </item>
 | 
					     </item>
 | 
				
			||||||
    </layout>
 | 
					    </layout>
 | 
				
			||||||
   </widget>
 | 
					   </widget>
 | 
				
			||||||
   <widget class="QFrame" name="lblState">
 | 
					   <widget class="QCheckBox" name="chkTS">
 | 
				
			||||||
 | 
					    <property name="enabled">
 | 
				
			||||||
 | 
					     <bool>false</bool>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
    <property name="geometry">
 | 
					    <property name="geometry">
 | 
				
			||||||
     <rect>
 | 
					     <rect>
 | 
				
			||||||
      <x>360</x>
 | 
					      <x>300</x>
 | 
				
			||||||
      <y>20</y>
 | 
					      <y>320</y>
 | 
				
			||||||
      <width>131</width>
 | 
					      <width>85</width>
 | 
				
			||||||
      <height>211</height>
 | 
					      <height>20</height>
 | 
				
			||||||
     </rect>
 | 
					     </rect>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
    <property name="frameShape">
 | 
					    <property name="toolTip">
 | 
				
			||||||
     <enum>QFrame::StyledPanel</enum>
 | 
					     <string>Transport stream detected</string>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
    <property name="frameShadow">
 | 
					    <property name="text">
 | 
				
			||||||
     <enum>QFrame::Raised</enum>
 | 
					     <string>Transport</string>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="checkable">
 | 
				
			||||||
 | 
					     <bool>true</bool>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					   </widget>
 | 
				
			||||||
 | 
					   <widget class="QCheckBox" name="chkVS">
 | 
				
			||||||
 | 
					    <property name="enabled">
 | 
				
			||||||
 | 
					     <bool>false</bool>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
    <widget class="QPushButton" name="pushButton_3">
 | 
					 | 
				
			||||||
    <property name="geometry">
 | 
					    <property name="geometry">
 | 
				
			||||||
     <rect>
 | 
					     <rect>
 | 
				
			||||||
       <x>10</x>
 | 
					      <x>300</x>
 | 
				
			||||||
       <y>10</y>
 | 
					      <y>340</y>
 | 
				
			||||||
       <width>111</width>
 | 
					      <width>85</width>
 | 
				
			||||||
       <height>27</height>
 | 
					      <height>20</height>
 | 
				
			||||||
     </rect>
 | 
					     </rect>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="toolTip">
 | 
				
			||||||
 | 
					     <string>Video data detected</string>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
    <property name="text">
 | 
					    <property name="text">
 | 
				
			||||||
     <string>Video </string>
 | 
					     <string>Video </string>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="checkable">
 | 
				
			||||||
 | 
					     <bool>true</bool>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
   </widget>
 | 
					   </widget>
 | 
				
			||||||
    <widget class="QPushButton" name="pushButton_4">
 | 
					   <widget class="QCheckBox" name="chkDecoding">
 | 
				
			||||||
 | 
					    <property name="enabled">
 | 
				
			||||||
 | 
					     <bool>false</bool>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
    <property name="geometry">
 | 
					    <property name="geometry">
 | 
				
			||||||
     <rect>
 | 
					     <rect>
 | 
				
			||||||
       <x>10</x>
 | 
					      <x>300</x>
 | 
				
			||||||
       <y>50</y>
 | 
					      <y>360</y>
 | 
				
			||||||
       <width>111</width>
 | 
					      <width>85</width>
 | 
				
			||||||
       <height>27</height>
 | 
					      <height>20</height>
 | 
				
			||||||
     </rect>
 | 
					     </rect>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="toolTip">
 | 
				
			||||||
 | 
					     <string>Video being decoded</string>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
    <property name="text">
 | 
					    <property name="text">
 | 
				
			||||||
      <string>Full Screen</string>
 | 
					     <string>Decoding</string>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="checkable">
 | 
				
			||||||
 | 
					     <bool>true</bool>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
   </widget>
 | 
					   </widget>
 | 
				
			||||||
    <widget class="QLabel" name="lblRead">
 | 
					   <widget class="QCheckBox" name="chkData">
 | 
				
			||||||
 | 
					    <property name="enabled">
 | 
				
			||||||
 | 
					     <bool>false</bool>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
    <property name="geometry">
 | 
					    <property name="geometry">
 | 
				
			||||||
     <rect>
 | 
					     <rect>
 | 
				
			||||||
       <x>10</x>
 | 
					      <x>300</x>
 | 
				
			||||||
       <y>120</y>
 | 
					      <y>300</y>
 | 
				
			||||||
       <width>111</width>
 | 
					      <width>85</width>
 | 
				
			||||||
       <height>16</height>
 | 
					      <height>20</height>
 | 
				
			||||||
     </rect>
 | 
					     </rect>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
     <property name="text">
 | 
					    <property name="toolTip">
 | 
				
			||||||
      <string>-</string>
 | 
					     <string>Data being received</string>
 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
    </widget>
 | 
					 | 
				
			||||||
    <widget class="QLabel" name="lblReadStatus">
 | 
					 | 
				
			||||||
     <property name="geometry">
 | 
					 | 
				
			||||||
      <rect>
 | 
					 | 
				
			||||||
       <x>10</x>
 | 
					 | 
				
			||||||
       <y>90</y>
 | 
					 | 
				
			||||||
       <width>111</width>
 | 
					 | 
				
			||||||
       <height>16</height>
 | 
					 | 
				
			||||||
      </rect>
 | 
					 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
    <property name="text">
 | 
					    <property name="text">
 | 
				
			||||||
      <string>-</string>
 | 
					     <string>Data</string>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="checkable">
 | 
				
			||||||
 | 
					     <bool>true</bool>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
    </widget>
 | 
					 | 
				
			||||||
   </widget>
 | 
					   </widget>
 | 
				
			||||||
  </widget>
 | 
					  </widget>
 | 
				
			||||||
 </widget>
 | 
					 </widget>
 | 
				
			||||||
 | 
				
			|||||||
@ -27,7 +27,7 @@
 | 
				
			|||||||
const PluginDescriptor DATVDemodPlugin::m_ptrPluginDescriptor =
 | 
					const PluginDescriptor DATVDemodPlugin::m_ptrPluginDescriptor =
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QString("DATV Demodulator"),
 | 
					    QString("DATV Demodulator"),
 | 
				
			||||||
    QString("3.13.0"),
 | 
					    QString("3.2.0"),
 | 
				
			||||||
    QString("(c) F4HKW for SDRAngel using LeanSDR framework (c) F4DAV"),
 | 
					    QString("(c) F4HKW for SDRAngel using LeanSDR framework (c) F4DAV"),
 | 
				
			||||||
	QString("https://github.com/f4exb/sdrangel"),
 | 
						QString("https://github.com/f4exb/sdrangel"),
 | 
				
			||||||
	true,
 | 
						true,
 | 
				
			||||||
@ -53,7 +53,6 @@ void DATVDemodPlugin::initPlugin(PluginAPI* ptrPluginAPI)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // register DATV demodulator
 | 
					    // register DATV demodulator
 | 
				
			||||||
    m_ptrPluginAPI->registerRxChannel(DATVDemod::m_channelIdURI, DATVDemod::m_channelId, this);
 | 
					    m_ptrPluginAPI->registerRxChannel(DATVDemod::m_channelIdURI, DATVDemod::m_channelId, this);
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PluginInstanceGUI* DATVDemodPlugin::createRxChannelGUI(DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel)
 | 
					PluginInstanceGUI* DATVDemodPlugin::createRxChannelGUI(DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel)
 | 
				
			||||||
 | 
				
			|||||||
@ -108,7 +108,7 @@ static int64_t SeekFunction(void* opaque, int64_t offset, int whence)
 | 
				
			|||||||
    return objStream->pos();
 | 
					    return objStream->pos();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool DATVideoRender::InitializeFFMPEG()
 | 
					void DATVideoRender::ResetMetaData()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    MetaData.CodecID=-1;
 | 
					    MetaData.CodecID=-1;
 | 
				
			||||||
    MetaData.PID=-1;
 | 
					    MetaData.PID=-1;
 | 
				
			||||||
@ -120,7 +120,18 @@ bool DATVideoRender::InitializeFFMPEG()
 | 
				
			|||||||
    MetaData.Channels=-1;
 | 
					    MetaData.Channels=-1;
 | 
				
			||||||
    MetaData.CodecDescription= "";
 | 
					    MetaData.CodecDescription= "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(m_blnIsFFMPEGInitialized==true)
 | 
					    MetaData.OK_Decoding=false;
 | 
				
			||||||
 | 
					    MetaData.OK_TransportStream=false;
 | 
				
			||||||
 | 
					    MetaData.OK_VideoStream=false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    emit onMetaDataChanged(&MetaData);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool DATVideoRender::InitializeFFMPEG()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ResetMetaData();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(m_blnIsFFMPEGInitialized)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -175,6 +186,8 @@ bool DATVideoRender::PreprocessStream()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    MetaData.PID = m_objFormatCtx->streams[m_intVideoStreamIndex]->id;
 | 
					    MetaData.PID = m_objFormatCtx->streams[m_intVideoStreamIndex]->id;
 | 
				
			||||||
    MetaData.CodecID = m_objDecoderCtx->codec_id;
 | 
					    MetaData.CodecID = m_objDecoderCtx->codec_id;
 | 
				
			||||||
 | 
					    MetaData.OK_TransportStream = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    MetaData.Program="";
 | 
					    MetaData.Program="";
 | 
				
			||||||
    MetaData.Stream="";
 | 
					    MetaData.Stream="";
 | 
				
			||||||
@ -199,6 +212,8 @@ bool DATVideoRender::PreprocessStream()
 | 
				
			|||||||
        MetaData.Stream = QString("%1").arg(objBuffer);
 | 
					        MetaData.Stream = QString("%1").arg(objBuffer);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    emit onMetaDataChanged(&MetaData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Decoder
 | 
					    //Decoder
 | 
				
			||||||
    objCodec = avcodec_find_decoder(m_objDecoderCtx->codec_id);
 | 
					    objCodec = avcodec_find_decoder(m_objDecoderCtx->codec_id);
 | 
				
			||||||
    if(objCodec==NULL)
 | 
					    if(objCodec==NULL)
 | 
				
			||||||
@ -242,6 +257,10 @@ bool DATVideoRender::PreprocessStream()
 | 
				
			|||||||
    MetaData.Channels=m_objDecoderCtx->channels;
 | 
					    MetaData.Channels=m_objDecoderCtx->channels;
 | 
				
			||||||
    MetaData.CodecDescription= QString("%1").arg(objCodec->long_name);
 | 
					    MetaData.CodecDescription= QString("%1").arg(objCodec->long_name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MetaData.OK_VideoStream = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    emit onMetaDataChanged(&MetaData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -251,13 +270,11 @@ bool DATVideoRender::OpenStream(DATVideostream *objDevice)
 | 
				
			|||||||
    unsigned char * ptrIOBuffer = NULL;
 | 
					    unsigned char * ptrIOBuffer = NULL;
 | 
				
			||||||
    AVIOContext * objIOCtx = NULL;
 | 
					    AVIOContext * objIOCtx = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(m_blnRunning==true)
 | 
					    if(m_blnRunning)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Only once execution
 | 
					 | 
				
			||||||
    m_blnRunning=true;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(objDevice==NULL)
 | 
					    if(objDevice==NULL)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@ -266,19 +283,40 @@ bool DATVideoRender::OpenStream(DATVideostream *objDevice)
 | 
				
			|||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(m_blnIsOpen==true)
 | 
					
 | 
				
			||||||
 | 
					    if(m_blnIsOpen)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        qDebug() << "DATVideoProcess::OpenStream already open";
 | 
					        qDebug() << "DATVideoProcess::OpenStream already open";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(objDevice->bytesAvailable()<=0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        qDebug() << "DATVideoProcess::OpenStream no data available";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        MetaData.OK_Data=false;
 | 
				
			||||||
 | 
					        emit onMetaDataChanged(&MetaData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Only once execution
 | 
				
			||||||
 | 
					    m_blnRunning=true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MetaData.OK_Data=true;
 | 
				
			||||||
 | 
					    emit onMetaDataChanged(&MetaData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    InitializeFFMPEG();
 | 
					    InitializeFFMPEG();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(!m_blnIsFFMPEGInitialized)
 | 
					    if(!m_blnIsFFMPEGInitialized)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        qDebug() << "DATVideoProcess::OpenStream FFMPEG not initialized";
 | 
					        qDebug() << "DATVideoProcess::OpenStream FFMPEG not initialized";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        m_blnRunning=false;
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -286,9 +324,11 @@ bool DATVideoRender::OpenStream(DATVideostream *objDevice)
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        qDebug() << "DATVideoProcess::OpenStream cannot open QIODevice";
 | 
					        qDebug() << "DATVideoProcess::OpenStream cannot open QIODevice";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        m_blnRunning=false;
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Connect QIODevice to FFMPEG Reader
 | 
					    //Connect QIODevice to FFMPEG Reader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_objFormatCtx = avformat_alloc_context();
 | 
					    m_objFormatCtx = avformat_alloc_context();
 | 
				
			||||||
@ -297,6 +337,7 @@ bool DATVideoRender::OpenStream(DATVideostream *objDevice)
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        qDebug() << "DATVideoProcess::OpenStream cannot alloc format FFMPEG context";
 | 
					        qDebug() << "DATVideoProcess::OpenStream cannot alloc format FFMPEG context";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        m_blnRunning=false;
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -318,12 +359,13 @@ bool DATVideoRender::OpenStream(DATVideostream *objDevice)
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        qDebug() << "DATVideoProcess::OpenStream cannot open stream";
 | 
					        qDebug() << "DATVideoProcess::OpenStream cannot open stream";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        m_blnRunning=false;
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if(!PreprocessStream())
 | 
					    if(!PreprocessStream())
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        m_blnRunning=false;
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -343,7 +385,7 @@ bool DATVideoRender::RenderStream()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if(!m_blnIsOpen)
 | 
					    if(!m_blnIsOpen)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        qDebug() << "DATVideoProcess::RenderStream: Stream not open";
 | 
					        qDebug() << "DATVideoProcess::RenderStream Stream not open";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -455,6 +497,8 @@ bool DATVideoRender::RenderStream()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                 MetaData.Width = m_objFrame->width;
 | 
					                 MetaData.Width = m_objFrame->width;
 | 
				
			||||||
                 MetaData.Height = m_objFrame->height;
 | 
					                 MetaData.Height = m_objFrame->height;
 | 
				
			||||||
 | 
					                 MetaData.OK_Decoding = true;
 | 
				
			||||||
 | 
					                 emit onMetaDataChanged(&MetaData);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //Frame rendering
 | 
					            //Frame rendering
 | 
				
			||||||
@ -482,25 +526,17 @@ bool DATVideoRender::RenderStream()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    m_blnRunning=false;
 | 
					    m_blnRunning=false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //AVDictionaryEntry *objRslt= av_dict_get(fmt_ctx->programs[video_stream_index]->metadata,"service_provider",NULL,0);
 | 
					 | 
				
			||||||
    //char objErrBuf[1024];
 | 
					 | 
				
			||||||
    //memset(objErrBuf,0,1024);
 | 
					 | 
				
			||||||
    //av_strerror(ret,objErrBuf,1024);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool DATVideoRender::CloseStream(QIODevice *objDevice)
 | 
					bool DATVideoRender::CloseStream(QIODevice *objDevice)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(m_blnRunning==true)
 | 
					    if(m_blnRunning)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Only once execution
 | 
					 | 
				
			||||||
    m_blnRunning=true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if(!objDevice)
 | 
					    if(!objDevice)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        qDebug() << "DATVideoProcess::CloseStream QIODevice is NULL";
 | 
					        qDebug() << "DATVideoProcess::CloseStream QIODevice is NULL";
 | 
				
			||||||
@ -510,7 +546,7 @@ bool DATVideoRender::CloseStream(QIODevice *objDevice)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if(!m_blnIsOpen)
 | 
					    if(!m_blnIsOpen)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        qDebug() << "DATVideoProcess::CloseStream: Stream not open";
 | 
					        qDebug() << "DATVideoProcess::CloseStream Stream not open";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -522,6 +558,9 @@ bool DATVideoRender::CloseStream(QIODevice *objDevice)
 | 
				
			|||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Only once execution
 | 
				
			||||||
 | 
					    m_blnRunning=true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    avformat_close_input(&m_objFormatCtx);
 | 
					    avformat_close_input(&m_objFormatCtx);
 | 
				
			||||||
    m_objFormatCtx=NULL;
 | 
					    m_objFormatCtx=NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -531,7 +570,6 @@ bool DATVideoRender::CloseStream(QIODevice *objDevice)
 | 
				
			|||||||
        m_objDecoderCtx=NULL;
 | 
					        m_objDecoderCtx=NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if(m_objFrame)
 | 
					    if(m_objFrame)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        av_frame_unref(m_objFrame);
 | 
					        av_frame_unref(m_objFrame);
 | 
				
			||||||
@ -553,5 +591,8 @@ bool DATVideoRender::CloseStream(QIODevice *objDevice)
 | 
				
			|||||||
    m_intCurrentRenderWidth=-1;
 | 
					    m_intCurrentRenderWidth=-1;
 | 
				
			||||||
    m_intCurrentRenderHeight=-1;
 | 
					    m_intCurrentRenderHeight=-1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ResetMetaData();
 | 
				
			||||||
 | 
					    emit onMetaDataChanged(&MetaData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -39,13 +39,18 @@ extern "C"
 | 
				
			|||||||
#include <libavutil/samplefmt.h>
 | 
					#include <libavutil/samplefmt.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "libswscale/swscale.h"
 | 
					#include "libswscale/swscale.h"
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct DataTSMetaData2
 | 
					struct DataTSMetaData2
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int PID;
 | 
					    int PID;
 | 
				
			||||||
    int CodecID;
 | 
					    int CodecID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool OK_Data;
 | 
				
			||||||
 | 
					    bool OK_Decoding;
 | 
				
			||||||
 | 
					    bool OK_TransportStream;
 | 
				
			||||||
 | 
					    bool OK_VideoStream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QString Program;
 | 
					    QString Program;
 | 
				
			||||||
    QString Stream;
 | 
					    QString Stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -53,12 +58,16 @@ struct DataTSMetaData2
 | 
				
			|||||||
    int Height;
 | 
					    int Height;
 | 
				
			||||||
    int BitRate;
 | 
					    int BitRate;
 | 
				
			||||||
    int Channels;
 | 
					    int Channels;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QString CodecDescription;
 | 
					    QString CodecDescription;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DataTSMetaData2()
 | 
					    DataTSMetaData2()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        PID=-1;
 | 
					        PID=-1;
 | 
				
			||||||
        CodecID=-1;
 | 
					        CodecID=-1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Program="";
 | 
					        Program="";
 | 
				
			||||||
        Stream="";
 | 
					        Stream="";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -67,12 +76,19 @@ struct DataTSMetaData2
 | 
				
			|||||||
        BitRate=-1;
 | 
					        BitRate=-1;
 | 
				
			||||||
        Channels=-1;
 | 
					        Channels=-1;
 | 
				
			||||||
        CodecDescription="";
 | 
					        CodecDescription="";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        OK_Data=false;
 | 
				
			||||||
 | 
					        OK_Decoding=false;
 | 
				
			||||||
 | 
					        OK_TransportStream=false;
 | 
				
			||||||
 | 
					        OK_VideoStream=false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DATVideoRender : public DATVScreen
 | 
					class DATVideoRender : public DATVScreen
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Q_OBJECT
 | 
					    Q_OBJECT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    explicit DATVideoRender(QWidget * parent);
 | 
					    explicit DATVideoRender(QWidget * parent);
 | 
				
			||||||
    void SetFullScreen(bool blnFullScreen);
 | 
					    void SetFullScreen(bool blnFullScreen);
 | 
				
			||||||
@ -106,18 +122,17 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    bool InitializeFFMPEG();
 | 
					    bool InitializeFFMPEG();
 | 
				
			||||||
    bool PreprocessStream();
 | 
					    bool PreprocessStream();
 | 
				
			||||||
 | 
					    void ResetMetaData();
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    virtual bool eventFilter(QObject *obj, QEvent *event);
 | 
					    virtual bool eventFilter(QObject *obj, QEvent *event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
signals:
 | 
					signals:
 | 
				
			||||||
 | 
					    void onMetaDataChanged(DataTSMetaData2 *objMetaData);
 | 
				
			||||||
public slots:
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//To run Video Rendering with a dedicated thread
 | 
				
			||||||
class DATVideoRenderThread: public QThread
 | 
					class DATVideoRenderThread: public QThread
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -141,12 +156,11 @@ class DATVideoRenderThread: public QThread
 | 
				
			|||||||
            m_objRenderer = objRenderer;
 | 
					            m_objRenderer = objRenderer;
 | 
				
			||||||
            m_objStream = objStream;
 | 
					            m_objStream = objStream;
 | 
				
			||||||
            m_blnRenderingVideo=false;
 | 
					            m_blnRenderingVideo=false;
 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void run()
 | 
					        void run()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if(m_blnRenderingVideo==true)
 | 
					            if(m_blnRenderingVideo)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -156,19 +170,11 @@ class DATVideoRenderThread: public QThread
 | 
				
			|||||||
                return ;
 | 
					                return ;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            m_blnRenderingVideo=false;
 | 
					            m_blnRenderingVideo = m_objRenderer->OpenStream(m_objStream);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if(m_objRenderer->OpenStream(m_objStream))
 | 
					            if(!m_blnRenderingVideo)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                qInfo("DATVideoRenderThread::run: PID: %d W: %d H: %d Codec: %s Data: %s Service: %s",
 | 
					                return;
 | 
				
			||||||
                       m_objRenderer->MetaData.PID,
 | 
					 | 
				
			||||||
                       m_objRenderer->MetaData.Width,
 | 
					 | 
				
			||||||
                       m_objRenderer->MetaData.Height,
 | 
					 | 
				
			||||||
                       m_objRenderer->MetaData.CodecDescription.toStdString().c_str(),
 | 
					 | 
				
			||||||
                       m_objRenderer->MetaData.Program.toStdString().c_str(),
 | 
					 | 
				
			||||||
                       m_objRenderer->MetaData.Stream.toStdString().c_str());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                m_blnRenderingVideo=true;
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            while((m_objRenderer->RenderStream()) && (m_blnRenderingVideo==true))
 | 
					            while((m_objRenderer->RenderStream()) && (m_blnRenderingVideo==true))
 | 
				
			||||||
@ -177,6 +183,8 @@ class DATVideoRenderThread: public QThread
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            m_objRenderer->CloseStream(m_objStream);
 | 
					            m_objRenderer->CloseStream(m_objStream);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            m_blnRenderingVideo=false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void stopRendering()
 | 
					        void stopRendering()
 | 
				
			||||||
@ -186,7 +194,6 @@ class DATVideoRenderThread: public QThread
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private:
 | 
					    private:
 | 
				
			||||||
 | 
					 | 
				
			||||||
        DATVideoRender *m_objRenderer;
 | 
					        DATVideoRender *m_objRenderer;
 | 
				
			||||||
        DATVideostream *m_objStream;
 | 
					        DATVideostream *m_objStream;
 | 
				
			||||||
        bool m_blnRenderingVideo;
 | 
					        bool m_blnRenderingVideo;
 | 
				
			||||||
 | 
				
			|||||||
@ -26,6 +26,7 @@ DATVideostream::DATVideostream():
 | 
				
			|||||||
    m_intPacketReceived=0;
 | 
					    m_intPacketReceived=0;
 | 
				
			||||||
    m_intMemoryLimit = DefaultMemoryLimit;
 | 
					    m_intMemoryLimit = DefaultMemoryLimit;
 | 
				
			||||||
    MultiThreaded=false;
 | 
					    MultiThreaded=false;
 | 
				
			||||||
 | 
					    ThreadTimeOut=-1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_objeventLoop.connect(this,SIGNAL(onDataAvailable()), &m_objeventLoop, SLOT(quit()),Qt::QueuedConnection);
 | 
					    m_objeventLoop.connect(this,SIGNAL(onDataAvailable()), &m_objeventLoop, SLOT(quit()),Qt::QueuedConnection);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -143,6 +144,7 @@ qint64 DATVideostream::readData(char *data, qint64 len)
 | 
				
			|||||||
    QByteArray objCurrentArray;
 | 
					    QByteArray objCurrentArray;
 | 
				
			||||||
    int intEffectiveLen=0;
 | 
					    int intEffectiveLen=0;
 | 
				
			||||||
    int intExpectedLen=0;
 | 
					    int intExpectedLen=0;
 | 
				
			||||||
 | 
					    int intThreadLoop=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    intExpectedLen = (int) len;
 | 
					    intExpectedLen = (int) len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -160,15 +162,25 @@ qint64 DATVideostream::readData(char *data, qint64 len)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    //DATA in FIFO ? -> Waiting for DATA
 | 
					    //DATA in FIFO ? -> Waiting for DATA
 | 
				
			||||||
    if((m_objFIFO.isEmpty()) || (m_objFIFO.count()<MinStackSize))
 | 
					    if((m_objFIFO.isEmpty()) || (m_objFIFO.count()<MinStackSize))
 | 
				
			||||||
       //|| (m_intBytesWaiting<10*len))
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        m_objMutex.unlock();
 | 
					        m_objMutex.unlock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(MultiThreaded==true)
 | 
					        if(MultiThreaded==true)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            intThreadLoop=0;
 | 
				
			||||||
            while((m_objFIFO.isEmpty()) || (m_objFIFO.count()<MinStackSize))
 | 
					            while((m_objFIFO.isEmpty()) || (m_objFIFO.count()<MinStackSize))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                QThread::msleep(5);
 | 
					                QThread::msleep(5);
 | 
				
			||||||
 | 
					                intThreadLoop ++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if(ThreadTimeOut>=0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if(intThreadLoop*5>ThreadTimeOut)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        return -1;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
@ -212,12 +224,12 @@ qint64 DATVideostream::readData(char *data, qint64 len)
 | 
				
			|||||||
    return (qint64)intEffectiveLen;
 | 
					    return (qint64)intEffectiveLen;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
qint64 DATVideostream::writeData(const char *data, qint64 len)
 | 
					qint64 DATVideostream::writeData(const char *data __attribute__((unused)), qint64 len __attribute__((unused)))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
qint64 	DATVideostream::readLineData(char *data, qint64 maxSize)
 | 
					qint64 	DATVideostream::readLineData(char *data __attribute__((unused)), qint64 maxSize __attribute__((unused)))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -37,6 +37,7 @@ public:
 | 
				
			|||||||
    ~DATVideostream();
 | 
					    ~DATVideostream();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool MultiThreaded;
 | 
					    bool MultiThreaded;
 | 
				
			||||||
 | 
					    int ThreadTimeOut;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int pushData(const char * chrData, int intSize);
 | 
					    int pushData(const char * chrData, int intSize);
 | 
				
			||||||
    bool setMemoryLimit(int intMemoryLimit);
 | 
					    bool setMemoryLimit(int intMemoryLimit);
 | 
				
			||||||
 | 
				
			|||||||
@ -52,7 +52,7 @@ DATVScreen::~DATVScreen()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
QRgb* DATVScreen::getRowBuffer(int intRow)
 | 
					QRgb* DATVScreen::getRowBuffer(int intRow)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (m_blnGLContextInitialized == false)
 | 
					    if (!m_blnGLContextInitialized)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -161,7 +161,7 @@ void DATVScreen::paintGL()
 | 
				
			|||||||
    m_objMutex.unlock();
 | 
					    m_objMutex.unlock();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DATVScreen::mousePressEvent(QMouseEvent* event)
 | 
					void DATVScreen::mousePressEvent(QMouseEvent* event __attribute__((unused)))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -194,13 +194,20 @@ bool DATVScreen::selectRow(int intLine)
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        return m_objGLShaderArray.SelectRow(intLine);
 | 
					        return m_objGLShaderArray.SelectRow(intLine);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool DATVScreen::setDataColor(int intCol, int intRed, int intGreen, int intBlue)
 | 
					bool DATVScreen::setDataColor(int intCol, int intRed, int intGreen, int intBlue)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (m_blnGLContextInitialized)
 | 
					    if (m_blnGLContextInitialized)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return m_objGLShaderArray.SetDataColor(intCol,
 | 
					        return m_objGLShaderArray.SetDataColor(intCol, qRgb(intRed, intGreen, intBlue));
 | 
				
			||||||
                qRgb(intRed, intGreen, intBlue));
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -33,12 +33,8 @@
 | 
				
			|||||||
#include "util/export.h"
 | 
					#include "util/export.h"
 | 
				
			||||||
#include "util/bitfieldindex.h"
 | 
					#include "util/bitfieldindex.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class QPainter;
 | 
					class QPainter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class SDRANGEL_API DATVScreen: public QGLWidget
 | 
					class SDRANGEL_API DATVScreen: public QGLWidget
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	Q_OBJECT
 | 
						Q_OBJECT
 | 
				
			||||||
 | 
				
			|||||||
@ -26,24 +26,34 @@ namespace leansdr
 | 
				
			|||||||
template<typename T> struct datvvideoplayer: runnable
 | 
					template<typename T> struct datvvideoplayer: runnable
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    datvvideoplayer(scheduler *sch, pipebuf<T> &_in, DATVideostream * objVideoStream) :
 | 
					    datvvideoplayer(scheduler *sch, pipebuf<T> &_in, DATVideostream * objVideoStream) :
 | 
				
			||||||
        runnable(sch, _in.name),
 | 
					            runnable(sch, _in.name), in(_in), m_objVideoStream(objVideoStream)
 | 
				
			||||||
        in(_in),
 | 
					 | 
				
			||||||
        m_objVideoStream(objVideoStream)
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void run()
 | 
					    void run()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        int size = in.readable() * sizeof(T);
 | 
					        int size = in.readable() * sizeof(T);
 | 
				
			||||||
        if ( ! size ) return;
 | 
					        if (!size)
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        int nw = m_objVideoStream->pushData((const char *) in.rd(), size);
 | 
					        int nw = m_objVideoStream->pushData((const char *) in.rd(), size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ( ! nw ) fatal("pipe");
 | 
					        if (!nw)
 | 
				
			||||||
        if ( nw < 0 ) fatal("write");
 | 
					        {
 | 
				
			||||||
        if ( nw % sizeof(T) ) fatal("partial write");
 | 
					            fatal("leansdr::datvvideoplayer::run: pipe");
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (nw < 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            fatal("leansdr::datvvideoplayer::run: write");
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (nw % sizeof(T))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            fatal("leansdr::datvvideoplayer::run: partial write");
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        in.read(nw / sizeof(T));
 | 
					        in.read(nw / sizeof(T));
 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    pipereader<T> in;
 | 
					    pipereader<T> in;
 | 
				
			||||||
 | 
				
			|||||||
@ -126,7 +126,7 @@ void GLShaderArray::InitializeGL(int intCols, int intRows)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
QRgb * GLShaderArray::GetRowBuffer(int intRow)
 | 
					QRgb * GLShaderArray::GetRowBuffer(int intRow)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (m_blnInitialized == false)
 | 
					    if (!m_blnInitialized)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -167,7 +167,7 @@ void GLShaderArray::RenderPixels(unsigned char *chrData)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    QRgb *ptrLine;
 | 
					    QRgb *ptrLine;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (m_blnInitialized == false)
 | 
					    if (!m_blnInitialized)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user