00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00057
00058
00059
00060 #ifndef __MX_SIMPLEMXPEGRENDERER_H__
00061 #define __MX_SIMPLEMXPEGRENDERER_H__
00062
00063
00064
00065 #define MX_SIMPLEMXPEGRENDERER_ID "SimpleMxPEGRenderer"
00066
00067
00068
00069 #include "BufferedMxPEGDecoderBackEnd.h"
00070
00071 #include <interfaces/IComponent.h>
00072 #include <interfaces/IComponentInvoker.h>
00073 #include <interfaces/ISimpleMxPEGRenderer.h>
00074
00075 #include <Framework/Framework.h>
00076
00077 #include <mxm/core/mxmStringList.h>
00078 #include <mxm/core/mxmString.h>
00079 #include <mxm/core/mxm_smart.h>
00080
00081 #include <QObject>
00082 #include <QTime>
00083 #include <QGLWidget>
00084
00085
00086
00087 namespace mx {
00088
00092
00097 class SimpleMxPEGRenderer : public QObject,
00098 public BufferedMxPEGDecoderBackEnd,
00099 public virtual IComponent,
00100 public virtual ISimpleMxPEGRenderer {
00101
00102 Q_OBJECT
00103
00104 private:
00105 bool Active;
00106 QGLWidget *Viewer;
00107 int CenterX, CenterY,
00108 OffsetX, OffsetY;
00109 int FrameCount;
00110 int FramerateMeasureInterval;
00111 QTime FramerateMeasureTime;
00112 int FramerateFrameCount;
00113 bool ScaleToFit;
00114 bool SignalledFirstFrame;
00115 bool ErrorEncountered;
00116
00120 private:
00121 static mxm::smart<mxmStringList> _enumerateInterfaces() {
00122 return(new mxmStringList((mxmString(MX_SIMPLEMXPEGRENDERER_ID),
00123 MX_ICOMPONENT_ID,
00124 MX_ISIMPLEMXPEGRENDERER_ID,
00125 MX_IMXPEGTILERECEIVER_ID,
00126 MX_IERRORSTATE_ID)));
00127 }
00128 static mxm::smart<mxmStringList> _enumerateCapabilities(
00129 const mxmString &interface_id) {
00130 if(interface_id == mx::Framework::IdHintKey)
00131 return(new mxmStringList(MX_SIMPLEMXPEGRENDERER_ID));
00132 else
00133 return(new mxmStringList());
00134 }
00135
00136 private:
00137 class Invoker : public mxmObject, public virtual IComponentInvoker {
00138 public:
00139 mxm::smart<mxmStringList> enumerateInterfaces() {
00140 return(_enumerateInterfaces());
00141 }
00142 mxm::smart<mxmStringList> enumerateCapabilities(
00143 const mxmString &interface_id) {
00144 return(_enumerateCapabilities(interface_id));
00145 }
00146 IComponent *newComponent() {
00147 return(new SimpleMxPEGRenderer());
00148 }
00149 };
00150 public:
00152 static IComponentInvoker *newInvoker() {
00153 return(new Invoker());
00154 }
00155
00156 public:
00159 SimpleMxPEGRenderer();
00160 ~SimpleMxPEGRenderer();
00161
00162 signals:
00166 void framerateMeasured(float fps);
00168 void firstFrameRendered();
00169
00170 public:
00172 mxm::smart<mxmStringList> enumerateInterfaces() {
00173 return(_enumerateInterfaces());
00174 }
00176 mxm::smart<mxmStringList> enumerateCapabilities(
00177 const mxmString &interface_id) {
00178 return(_enumerateCapabilities(interface_id));
00179 }
00180
00182 void setGLWidget(QGLWidget *viewer_display);
00184 void setFramerateMeasureModeEnabled(bool enabled,
00185 int measure_interval_ms = 10000);
00187 void enableScaleToFit(bool enabled);
00189 void drawFrame();
00191 mxmQtSignal framerateMeasuredSignal();
00193 mxmQtSignal firstFrameRenderedSignal();
00194
00196 void videoResolutionChanged(int width, int height);
00198 void errorEncountered();
00200 void frameComplete();
00202 void videoTileTransferred();
00204 mxm::u8 *provideAudioBlockTarget(const mxmAudioBlockInfo
00205 &audio_block_info);
00207 void audioBlockTransferred();
00209 int frameCounter();
00210
00212 void setErrorState();
00214 bool errorState();
00215
00216 private:
00217 bool activate();
00218 };
00219 };
00220
00221
00222
00223 #endif // __MX_SIMPLEMXPEGRENDERER_H__