CVD 0.8
Public Member Functions
CVD::ServerPushJpegBuffer< C > Class Template Reference

Play a server push stream as a video stream. More...

#include <serverpushjpegbuffer.h>

Inheritance diagram for CVD::ServerPushJpegBuffer< C >:
CVD::LocalVideoBuffer< C > CVD::VideoBuffer< C > CVD::RawVideoBuffer

List of all members.

Public Member Functions

 ServerPushJpegBuffer (std::istream &i, bool warnings_=0, int eat_frames=0)
virtual ImageRef size ()
LocalVideoFrame< C > * get_frame ()
void put_frame (VideoFrame< C > *f)
bool frame_pending ()
void seek_to (double)
double frame_rate ()

Detailed Description

template<class C>
class CVD::ServerPushJpegBuffer< C >

Play a server push stream as a video stream.

This is a standard used by a number of HTTP based security cameras. The format is as follows:

 --ImageSeparator\n
 Content-Type: image/jpeg\r\n
 Content-Length: 123456789\r\n
 \r\n
 <123456789 bytes of JPEG go here>\r\n

This exact format is from the InVision IQEye series of cameras. Other cameras have a different image separator, and do not miss the carriage return.

The buffer reads a number of frames from the stream on initiation (by default 10), in order to flush the camera's inbuilt buffer. With some cameras, changing the video size does not flush the buffer, so the first few frames will be of the incorrect size. After flushing the buffer, the size of the first frame is taken to be the size of the video stream. If spurious frames arrive of a different size later, these will be ignored.

WARNING: error checking is currently very minimal. The result of failure will probably result in an exception being thrown from the JPEG loader.

Parameters:
TThe pixel type of the frames to provide (usually CVD::Rgb<CVD::byte> or CVD::byte. If the image files are of a different type, they will be automatically converted (see Image loading and saving, and format conversion).

Definition at line 36 of file serverpushjpegbuffer.h.


Constructor & Destructor Documentation

template<class C >
CVD::ServerPushJpegBuffer< C >::ServerPushJpegBuffer ( std::istream &  i,
bool  warnings_ = 0,
int  eat_frames = 0 
) [inline]

Construct a ServerPushJpegBuffer from an istream.

The istream

Parameters:
iThe stream to use for video.
warningsWhether to print warnings if mis-sized frames arrive.
eat_framesNumber of frames to discard on initialization.

Definition at line 45 of file serverpushjpegbuffer.h.

References CVD::SubImage< T >::size().


Member Function Documentation

template<class C >
void CVD::ServerPushJpegBuffer< C >::put_frame ( VideoFrame< C > *  f) [inline, virtual]

Tell the buffer that you are finished with this frame.

Typically the VideoBuffer then destroys the frame.

Parameters:
fThe frame that you are finished with.

Implements CVD::LocalVideoBuffer< C >.

Definition at line 84 of file serverpushjpegbuffer.h.

template<class C >
bool CVD::ServerPushJpegBuffer< C >::frame_pending ( ) [inline, virtual]

Is there a frame waiting in the buffer? This function does not block.

See is_live and is_flushable.

Implements CVD::LocalVideoBuffer< C >.

Definition at line 94 of file serverpushjpegbuffer.h.

template<class C >
void CVD::ServerPushJpegBuffer< C >::seek_to ( double  ) [inline, virtual]

Go to a particular point in the video buffer (only implemented in buffers of recorded video)

Parameters:
tThe frame time in seconds

Reimplemented from CVD::LocalVideoBuffer< C >.

Definition at line 99 of file serverpushjpegbuffer.h.


The documentation for this class was generated from the following file: