v4l2rtspserver/inc/MJPEGVideoSource.h

72 lines
2.8 KiB
C
Raw Normal View History

2016-05-17 19:29:48 +00:00
/* ---------------------------------------------------------------------------
** This software is in the public domain, furnished "as is", without technical
** support, and with no warranty, express or implied, as to its usefulness for
** any purpose.
**
** MJPEGVideoSource.h
**
** V4L2 RTSP streamer
**
2017-07-30 17:37:39 +00:00
** MJPEG Source for RTSP server
2016-05-17 19:29:48 +00:00
**
** -------------------------------------------------------------------------*/
2016-06-19 08:53:56 +00:00
#include "logger.h"
2016-05-17 19:29:48 +00:00
#include "JPEGVideoSource.hh"
class MJPEGVideoSource : public JPEGVideoSource
{
public:
static MJPEGVideoSource* createNew (UsageEnvironment& env, FramedSource* source)
{
return new MJPEGVideoSource(env,source);
}
virtual void doGetNextFrame()
{
2017-07-30 17:37:39 +00:00
if (m_inputSource) {
2016-05-17 19:29:48 +00:00
m_inputSource->getNextFrame(fTo, fMaxSize, afterGettingFrameSub, this, FramedSource::handleClosure, this);
2017-07-30 17:37:39 +00:00
}
2016-05-17 19:29:48 +00:00
}
virtual void doStopGettingFrames()
{
FramedSource::doStopGettingFrames();
2017-07-30 17:37:39 +00:00
if (m_inputSource) {
2016-05-17 19:29:48 +00:00
m_inputSource->stopGettingFrames();
2017-07-30 17:37:39 +00:00
}
2016-05-17 19:29:48 +00:00
}
static void afterGettingFrameSub(void* clientData, unsigned frameSize,unsigned numTruncatedBytes,struct timeval presentationTime,unsigned durationInMicroseconds)
{
MJPEGVideoSource* source = (MJPEGVideoSource*)clientData;
source->afterGettingFrame(frameSize, numTruncatedBytes, presentationTime, durationInMicroseconds);
2017-06-03 14:19:55 +00:00
}
2017-07-30 17:37:39 +00:00
void afterGettingFrame(unsigned frameSize,unsigned numTruncatedBytes,struct timeval presentationTime,unsigned durationInMicroseconds);
2016-05-17 19:29:48 +00:00
virtual u_int8_t type() { return m_type; };
virtual u_int8_t qFactor() { return 128; };
virtual u_int8_t width() { return m_width; };
virtual u_int8_t height() { return m_height; };
2017-07-30 17:37:39 +00:00
u_int8_t const* quantizationTables( u_int8_t& precision, u_int16_t& length );
2016-05-17 19:29:48 +00:00
protected:
MJPEGVideoSource(UsageEnvironment& env, FramedSource* source) : JPEGVideoSource(env),
m_inputSource(source),
m_width(0), m_height(0), m_qTableSize(0), m_precision(0),
2016-05-17 19:29:48 +00:00
m_type(0)
{
memset(&m_qTable,0,sizeof(m_qTable));
}
virtual ~MJPEGVideoSource()
{
Medium::close(m_inputSource);
}
protected:
FramedSource* m_inputSource;
u_int8_t m_width;
u_int8_t m_height;
2016-05-18 20:29:03 +00:00
u_int8_t m_qTable[128*2];
unsigned int m_qTableSize;
unsigned int m_precision;
2016-05-17 19:29:48 +00:00
u_int8_t m_type;
};