23 #include <opencv2/highgui/highgui.hpp> 25 TypeHandle WebcamVideoCursorOpenCV::_type_handle;
30 WebcamVideoCursorOpenCV::
32 _size_x = src->_size_x;
33 _size_y = src->_size_y;
37 _can_seek_fast =
false;
42 _capture = cvCaptureFromCAM(src->_camera_index);
43 if (_capture !=
nullptr) {
44 _size_x = (int)cvGetCaptureProperty(_capture, CV_CAP_PROP_FRAME_WIDTH);
45 _size_y = (int)cvGetCaptureProperty(_capture, CV_CAP_PROP_FRAME_HEIGHT);
53 WebcamVideoCursorOpenCV::
54 ~WebcamVideoCursorOpenCV() {
55 if (_capture !=
nullptr) {
56 cvReleaseCapture(&_capture);
70 PT(
Buffer) buffer = get_standard_buffer();
71 unsigned char *dest = buffer->_block;
72 int num_components = get_num_components();
73 nassertr(num_components == 3,
nullptr);
74 int dest_x_pitch = num_components;
75 int dest_y_pitch = _size_x * dest_x_pitch;
77 const unsigned char *r, *g, *b;
79 if (get_frame_data(r, g, b, x_pitch, y_pitch)) {
80 if (num_components == 3 && x_pitch == 3) {
82 int copy_bytes = _size_x * dest_x_pitch;
83 nassertr(copy_bytes <= dest_y_pitch && copy_bytes <= abs(y_pitch),
nullptr);
85 for (
int y = 0; y < _size_y; ++y) {
86 memcpy(dest, r, copy_bytes);
94 for (
int y = 0; y < _size_y; ++y) {
97 for (
int x = 0; x < _size_x; ++x) {
100 dest[dx + 2] = b[sx];
104 dest += dest_y_pitch;
129 bool WebcamVideoCursorOpenCV::
130 get_frame_data(
const unsigned char *&r,
131 const unsigned char *&g,
132 const unsigned char *&b,
133 int &x_pitch,
int &y_pitch) {
134 nassertr(ready(),
false);
136 IplImage *image = cvQueryFrame(_capture);
137 if (image ==
nullptr) {
141 r = (
const unsigned char *)image->imageData;
145 y_pitch = image->widthStep;
147 if (image->dataOrder == 1) {
151 g = r + image->height * y_pitch;
152 b = g + image->height * y_pitch;
155 if (image->origin == 0) {
160 r += (image->height - 1) * y_pitch;
161 g += (image->height - 1) * y_pitch;
162 b += (image->height - 1) * y_pitch;
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
A MovieVideo is actually any source that provides a sequence of video frames.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
TypeHandle is the identifier used to differentiate C++ class types.