GIFT-Grab  1708
Copyright (c) 2015-7, University College London (UCL)
videoframe.h
Go to the documentation of this file.
1 #pragma once
2 
3 #ifdef USE_OPENCV
4 #include <opencv2/core/core.hpp>
5 #include <opencv/cv.h>
6 #include <opencv/highgui.h>
7 #include <opencv2/core/version.hpp>
8 #if CV_MAJOR_VERSION == 3
9 #include <opencv2/imgproc/imgproc.hpp>
10 namespace cv
11 {
12  using std::vector;
13 }
14 #endif
15 #endif // USE_OPENCV
16 
17 #include <memory>
18 #include "maskframe.h"
19 #include "except.h"
20 
21 namespace gg
22 {
23 
30 {
32  , I420
33  , UYVY
34 };
35 
48 {
49 protected:
54  VideoFrame();
55 
56 public:
67  VideoFrame(enum ColourSpace colour, bool manage_data = false);
68 
84  VideoFrame(enum ColourSpace colour, size_t cols, size_t rows,
85  size_t stereo_count = 1);
86 
96  VideoFrame(const VideoFrame & rhs);
97 
98 #ifdef USE_OPENCV
99  std::unique_ptr<MaskFrame> compute_image_mask(int x, int y, int width,
108  int height);
109 #endif // USE_OPENCV
110 
116  virtual ~VideoFrame();
117 
126  void operator=(const VideoFrame & rhs);
127 
152  void init_from_specs(unsigned char * data, size_t data_length,
153  size_t cols, size_t rows, size_t stereo_count = 1);
154 
163  const size_t data_length(size_t stereo_index = 0) const;
164 
169  size_t stereo_count() const
170  {
171  return _stereo_count;
172  }
173 
178  size_t rows() const
179  {
180  return _rows;
181  }
182 
187  size_t cols() const
188  {
189  return _cols;
190  }
191 
201  bool manages_own_data() const
202  {
203  return _manage_data;
204  }
205 
249  unsigned char * const data(size_t stereo_index = 0) const;
250 
255  const enum ColourSpace colour() const
256  {
257  return _colour;
258  }
259 
270  static size_t required_data_length(enum ColourSpace colour,
271  size_t cols, size_t rows);
272 
281  static size_t required_pixel_length(enum ColourSpace colour);
282 
283 protected:
288  enum ColourSpace _colour;
289 
293  unsigned char * _data;
294 
298  size_t _data_length;
299 
305 
312  size_t _rows;
313 
320  size_t _cols;
321 
327 
328 protected:
335  void clone(const VideoFrame & rhs);
336 
345  void set_dimensions(size_t cols, size_t rows);
346 
357  void allocate_memory(size_t data_length);
358 
368  void free_memory();
369 
373  void set_pixels_black();
374 
381  inline void validate_stereo_index(size_t stereo_index) const
382  {
383  if (stereo_index >= _stereo_count)
384  {
385  std::string msg = "This frame has ";
386  msg.append(std::to_string(_stereo_count))
387  .append(" stereo frames (requested ")
388  .append(std::to_string(stereo_index + 1))
389  .append(". stereo frame)");
390  throw std::out_of_range(msg);
391  }
392  }
393 };
394 
395 }
size_t _cols
Always use set_dimensions() to set this.
Definition: videoframe.h:320
ColourSpace
Supported colour spaces.
Definition: videoframe.h:29
size_t _data_length
Frame data length.
Definition: videoframe.h:298
Definition: videoframe.h:32
Definition: videoframe.h:33
unsigned char * _data
Frame data.
Definition: videoframe.h:293
Definition: broadcastdaemon.cpp:7
void validate_stereo_index(size_t stereo_index) const
Definition: videoframe.h:381
size_t stereo_count() const
Get number of stereo frames stored in this object.
Definition: videoframe.h:169
size_t rows() const
Get number of rows (y-axis, i.e. height)
Definition: videoframe.h:178
bool _manage_data
Definition: videoframe.h:326
Definition: videoframe.h:31
size_t cols() const
Get number of columns (x-axis, i.e. width)
Definition: videoframe.h:187
size_t _rows
Always use set_dimensions() to set this.
Definition: videoframe.h:312
A class to represent a video frame.
Definition: videoframe.h:47
size_t _stereo_count
Number of stereo frames stored, i.e. the total number of frames.
Definition: videoframe.h:304
bool manages_own_data() const
Get whether data is managed by this object or externally.
Definition: videoframe.h:201