bufferedslaveimagesource.h
来自「VC视频对象的跟踪提取原代码(vc视频监控源码)」· C头文件 代码 · 共 150 行
H
150 行
///////////////////////////////////////////////////////////////////////////////// //// BufferedSlaveImageSource.h defining a buffered ImageSource class //// //// An ImageSource which waits for external images using pthread_cond_wait. //// The images given are buffered in a FIFO buffer and can be queried. //// //// Additionally, the class can fill up the FIFO buffer from a given //// ImageSource, automatically in get_next() or using fill_buffer(). //// //// Author : Nils T Siebel (nts) //// Created : Wed Jan 23 17:52:33 GMT 2002 //// Revision : 0.0 of Wed Jan 23 17:52:33 GMT 2002 //// Copyright : The University of Reading //// /////////////////////////////////////////////////////////////////////////////////#ifndef __BUFFERED_SLAVE_IMAGE_SOURCE_H__#define __BUFFERED_SLAVE_IMAGE_SOURCE_H__#include <cassert>#include <pthread.h> // for IEEE POSIX 1003.1c --- 1995 threads#include <climits> // for UINT_MAX#include "ImageSource.h"#include "timestamp_c.h"#include "tracker_defines_types_and_helpers.h" // for frame_id_t, frame_time_t, ImageTypenamespace ReadingPeopleTracker{// number of images to buffer before refusing external requests to// handle_new_image(...). Equals to maximum number of images used and// provided by this ImageSource at any one time.#define BSS_DEFAULT_BUFFER_SIZE 10class BufferedSlaveImageSource : public ImageSource{private: unsigned int buffer_entries; // actual number of images in buffer, including current unsigned int buffer_size; // maximum of the above, the buffer size // dimensions of image --- must be specified upon instantiation! It will be queried. unsigned int xdim; unsigned int ydim; // the image buffer: an array [0..buffer_size-1] of Image * allocated during intstantiation Image **image_buffer; // our master image source, if given: to fill up the buffer, either // using our fill_buffer method or automatically in get_next() ImageSource *master_image_source; ////////////////////////////////////////////////////////////////////////// // Pthread data: mutex and condition variables for image_buffer // ////////////////////////////////////////////////////////////////////////// pthread_mutex_t image_buffer_modification; // write access to image_buffer pthread_cond_t new_image_in_buffer; // whether new image has arrived in buffer public: // constructor, desctructor BufferedSlaveImageSource(unsigned int the_xdim, unsigned int the_ydim, ImageSource *the_master_image_source = NULL, unsigned int the_buffer_size = BSS_DEFAULT_BUFFER_SIZE); ~BufferedSlaveImageSource(); // method to call when a new image arrives. It will be buffered or ignored. void handle_new_image(unsigned char *the_data, TS_TIMESTAMP *the_timestamp); // fill image_buffer with up to number_of_images_to_add images, from master_image_source unsigned int fill_buffer(unsigned int number_of_images_to_add = UINT_MAX); // return number of entries currently in buffer inline unsigned int get_buffer_entries() const { return buffer_entries; } // return maximum number of entries in buffer --- the buffer size inline unsigned int get_buffer_size() const { return buffer_size; } ////////////////////////////////////////////////////////////////////////// // Redefinition of ImageSource methods // ////////////////////////////////////////////////////////////////////////// virtual Image *get_next(); virtual unsigned int get_xdim() const { return xdim; } virtual unsigned int get_ydim() const { return ydim; } virtual ImageType get_image_type() const { if (master_image_source != NULL) return master_image_source->get_image_type(); // simply return master's ImageType bool we_no_what_images_we_will_get = false; assert(we_no_what_images_we_will_get == true); // how should we know? return RGB32; // possibly... }private: // private helpers // reserve the Image memory for later re-use void keep_image_memory_for_later (Image *&old_image); // get back Image memory reserved by keep_image_memory_for_later (or NULL if none available) Image *get_new_image_memory(); // prevent people from using the default (or in fact, any) copy contructor // or operator= for BufferedSlaveImageSource --- nothing good could come from it protected: BufferedSlaveImageSource &operator= (const BufferedSlaveImageSource &original) { // do not use ! bool this_is_recommended = false; assert (this_is_recommended == true); // do not use BufferedSlaveImageSource &operator= return *this; } BufferedSlaveImageSource (const BufferedSlaveImageSource &original) { // do not use ! bool this_is_recommended = false; assert (this_is_recommended == true); // do not use BufferedSlaveImageSource's copy constructor }};} // namespace ReadingPeopleTracker#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?