00001 #ifndef Impala_Application_SDash_VideoPlayerView_h
00002 #define Impala_Application_SDash_VideoPlayerView_h
00003
00004 #include <vector>
00005 #include <ostream>
00006 #include <strstream>
00007
00008 #include "Link/OGL/OGLWnd.h"
00009 #include "Link/OGL/OGLView2D.h"
00010 #include "Link/OGL/OGLGraphics.h"
00011
00012 #include "Core/Geometry/Rectangle.h"
00013 #include "Core/Array/Arrays.h"
00014 #include "Core/Array/ReadJpg.h"
00015
00016 #include "OglGui/View.h"
00017 #include "OglGui/WindowView2D.h"
00018 #include "OglGui/ViewStrip.h"
00019
00020 #include "Application/sdash/RegionsOfInterestInfo.h"
00021 #include "Application/sdash/RoiLoader.h"
00022
00023 namespace Impala {
00024 namespace Application {
00025 namespace SDash {
00026
00027 class VideoPlayerView : public OglGui::View
00028 {
00029
00030 public:
00031
00032 typedef Core::Geometry::Rectangle Rectangle;
00033
00034
00035 VideoPlayerView(OGLVIEW* oglView)
00036 : OglGui::View(oglView), mColor(oglTrGREEN)
00037 {
00038 Init();
00039 }
00040
00041 virtual ~VideoPlayerView()
00042 {
00043 if (mRoiLoader != 0)
00044 delete mRoiLoader;
00045 }
00046
00047 virtual void OnDrawView()
00048 {
00049
00050
00051
00052
00053 if (mShowFrameNr)
00054 {
00055 OGC dbOGC;
00056 OGCSave(&dbOGC);
00057 oglSys.PosColPrintf(mView2D->oglWnd, 4,4,oglRED, "fnr: %d", mFrameNr);
00058 OGCRestore(&dbOGC);
00059 }
00060
00061 if (mRegionsOfInterest.empty())
00062 return;
00063
00064
00065 OGC myOGC;
00066 OGCSave(&myOGC);
00067
00068 viewSys.View2DNormTransform(mView2D);
00069
00070
00071 int bInfo[3];
00072 oglSys.StartBlend(bInfo);
00073
00074 SetSolidLineColor(mColor);
00075 SetLineWidth(3);
00076 int nrOfRegions = mRegionsOfInterest.size();
00077 for (int i = 0; i < nrOfRegions; i++)
00078 {
00079 const RegionsOfInterestInfo::ScaledRegion& region = mRegionsOfInterest[i];
00080 DrawRectangle(region.left, region.top, region.width, region.height);
00081 }
00082
00083 oglSys.EndBlend(bInfo);
00084
00086
00087
00090
00091
00092
00093 OGCRestore(&myOGC);
00094
00095 }
00096
00097
00098
00099
00100 virtual void OnMouse(int msg, int btn, int state, float x, float y)
00101 {
00102
00103
00104
00105
00106 if (mRegionsOfInterest.empty())
00107 return;
00108
00109
00110 float normX = x / mView2D->w;
00111 float normY = y / mView2D->h;
00112
00113 int nrOfRegions = mRegionsOfInterest.size();
00114 for (int i = 0; i < nrOfRegions; i++)
00115 {
00116 const RegionsOfInterestInfo::ScaledRegion& region = mRegionsOfInterest[i];
00117 if (normX >= region.left && normX <= region.left + region.width
00118 && normY >= region.top && normY <= region.top + region.height)
00119 {
00120 mRoiNr = i;
00121
00122 OGLIMAGE* regionImage = mRoiLoader->Load(mVideoId, mFrameNr, mRoiNr);
00123 mSubjectWindow->SetImage(regionImage);
00124
00125
00126
00127 oglSys.ReleaseOglImage(regionImage);
00128
00129
00130 RoiInfo* roiInfo = new RoiInfo();
00131 roiInfo->videoId = mVideoId;
00132 roiInfo->frameNr = mFrameNr;
00133 roiInfo->roiNr = mRoiNr;
00134 mSubjectWindow->GetOglView()->UserData1 = roiInfo;
00135
00136 return;
00137 }
00138 }
00139
00140
00141 }
00142
00143 void SubjectWindow(OglGui::WindowView2D* subjectWindow, const std::string& roiPath)
00144 {
00145 mSubjectWindow = subjectWindow;
00146 mRoiLoader = new RoiLoader(roiPath);
00147 }
00148
00149 void Color(ULONG col)
00150 {
00151 mColor = col;
00152 }
00153
00154 int GetVideoId() { return mVideoId; }
00155
00156 int GetFrameNr() { return mFrameNr; }
00157
00158 int GetRoiNr() { return mRoiNr; }
00159
00160 void SetVideoId(int id) { mVideoId = id; }
00161
00162 void SetFrameNr(int nr) { mFrameNr = nr; }
00163
00164 void SetRoiNr(int nr) { mRoiNr = nr; }
00165
00166 void SetRegionsOfInterest(const std::vector<RegionsOfInterestInfo::ScaledRegion>& regions)
00167 {
00168 mRegionsOfInterest = regions;
00169 }
00170
00171 bool mShowFrameNr;
00172
00173 private:
00174
00175 void Init()
00176 {
00177 mSubjectWindow = 0;
00178 mShowFrameNr = true;
00179 mVideoId = -1;
00180 mFrameNr = -1;
00181 mRoiNr = -1;
00182 mRoiLoader = 0;
00183 }
00184
00185 OglGui::WindowView2D* mSubjectWindow;
00186 RoiLoader* mRoiLoader;
00187
00188 ULONG mColor;
00189 float mX, mY, mW, mH;
00190
00191 int mVideoId;
00192 int mFrameNr;
00193 int mRoiNr;
00194 std::vector<RegionsOfInterestInfo::ScaledRegion> mRegionsOfInterest;
00195
00196 };
00197
00198
00199
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264 }
00265 }
00266 }
00267
00268 #endif
00269
00270