TwiceAsNice  2019-02-18
Public Types | Public Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
INDI::StreamManager Class Reference

#include <streammanager.h>

Collaboration diagram for INDI::StreamManager:
Collaboration graph

Public Types

enum  { RECORD_ON, RECORD_TIME, RECORD_FRAME, RECORD_OFF }
 

Public Member Functions

 StreamManager (CCD *mainCCD)
 
virtual ~StreamManager ()
 
virtual void ISGetProperties (const char *dev)
 
virtual bool ISNewSwitch (const char *dev, const char *name, ISState *states, char *names[], int n)
 
virtual bool ISNewText (const char *dev, const char *name, char *texts[], char *names[], int n)
 
virtual bool ISNewNumber (const char *dev, const char *name, double values[], char *names[], int n)
 
virtual bool initProperties ()
 
virtual bool updateProperties ()
 
virtual bool saveConfigItems (FILE *fp)
 
void newFrame (const uint8_t *buffer, uint32_t nbytes)
 newFrame CCD drivers call this function when a new frame is received. More...
 
bool setStream (bool enable)
 setStream Enables (starts) or disables (stops) streaming. More...
 
RecorderInterfacegetRecorder ()
 
bool isDirectRecording ()
 
bool isStreaming ()
 
bool isRecording ()
 
bool isBusy ()
 
double getTargetFPS ()
 
uint8_tgetDownscaleBuffer ()
 
uint32_t getDownscaleBufferSize ()
 
const char * getDeviceName ()
 
void setSize (uint16_t width, uint16_t height)
 
bool setPixelFormat (INDI_PIXEL_FORMAT pixelFormat, uint8_t pixelDepth=8)
 
void getStreamFrame (uint16_t *x, uint16_t *y, uint16_t *w, uint16_t *h)
 
bool close ()
 

Protected Attributes

CCDcurrentCCD = nullptr
 

Private Types

enum  { FPS_INSTANT, FPS_AVERAGE }
 
enum  { ENCODER_RAW, ENCODER_MJPEG }
 
enum  { RECORDER_RAW, RECORDER_OGV }
 

Private Member Functions

int mkpath (std::string s, mode_t mode)
 
std::string expand (std::string fname, const std::map< std::string, std::string > &patterns)
 
bool startRecording ()
 
bool stopRecording (bool force=false)
 
bool uploadStream (const uint8_t *buffer, uint32_t nbytes)
 uploadStream Upload frame to client using the selected encoder More...
 
bool recordStream (const uint8_t *buffer, uint32_t nbytes, double deltams)
 recordStream Calls the backend recorder to record a single frame. More...
 

Private Attributes

ISwitch StreamS [2]
 
ISwitchVectorProperty StreamSP
 
ISwitch RecordStreamS [4]
 
ISwitchVectorProperty RecordStreamSP
 
IText RecordFileT [2] {}
 
ITextVectorProperty RecordFileTP
 
INumber StreamExposureN [1]
 
INumberVectorProperty StreamExposureNP
 
INumber FpsN [2]
 
INumberVectorProperty FpsNP
 
INumber RecordOptionsN [2]
 
INumberVectorProperty RecordOptionsNP
 
INumberVectorProperty StreamFrameNP
 
INumber StreamFrameN [4]
 
IBLOBVectorPropertyimageBP
 
IBLOBimageB
 
ISwitch EncoderS [2]
 
ISwitchVectorProperty EncoderSP
 
ISwitch RecorderS [2]
 
ISwitchVectorProperty RecorderSP
 
bool m_isStreaming
 
bool m_isRecording
 
int streamframeCount
 
int recordframeCount
 
double recordDuration
 
RecorderManagerrecorderManager = nullptr
 
RecorderInterfacerecorder = nullptr
 
bool direct_record
 
std::string recordfiledir
 
std::string recordfilename
 
EncoderManagerencoderManager = nullptr
 
EncoderInterfaceencoder = nullptr
 
struct itimerval tframe1 tframe2
 
double mssum
 
double framecountsec
 
INDI_PIXEL_FORMAT m_PixelFormat
 
uint8_t m_PixelDepth
 
uint16_t rawWidth =0
 
uint16_t rawHeight =0
 
uint8_tdownscaleBuffer = nullptr
 
uint32_t downscaleBufferSize =0
 

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
RECORD_ON 
RECORD_TIME 
RECORD_FRAME 
RECORD_OFF 

◆ anonymous enum

anonymous enum
private
Enumerator
FPS_INSTANT 
FPS_AVERAGE 

◆ anonymous enum

anonymous enum
private
Enumerator
ENCODER_RAW 
ENCODER_MJPEG 

◆ anonymous enum

anonymous enum
private
Enumerator
RECORDER_RAW 
RECORDER_OGV 

Constructor & Destructor Documentation

◆ StreamManager()

StreamManager::StreamManager ( CCD mainCCD)

◆ ~StreamManager()

StreamManager::~StreamManager ( )
virtual

Member Function Documentation

◆ close()

bool StreamManager::close ( )

◆ expand()

std::string StreamManager::expand ( std::string  fname,
const std::map< std::string, std::string > &  patterns 
)
private

◆ getDeviceName()

const char * StreamManager::getDeviceName ( )

◆ getDownscaleBuffer()

uint8_t* INDI::StreamManager::getDownscaleBuffer ( )
inline

◆ getDownscaleBufferSize()

uint32_t INDI::StreamManager::getDownscaleBufferSize ( )
inline

◆ getRecorder()

RecorderInterface* INDI::StreamManager::getRecorder ( )
inline

◆ getStreamFrame()

void StreamManager::getStreamFrame ( uint16_t x,
uint16_t y,
uint16_t w,
uint16_t h 
)

◆ getTargetFPS()

double INDI::StreamManager::getTargetFPS ( )
inline

◆ initProperties()

bool StreamManager::initProperties ( )
virtual

◆ isBusy()

bool INDI::StreamManager::isBusy ( )
inline

◆ isDirectRecording()

bool INDI::StreamManager::isDirectRecording ( )
inline

◆ ISGetProperties()

void StreamManager::ISGetProperties ( const char *  dev)
virtual

◆ ISNewNumber()

bool StreamManager::ISNewNumber ( const char *  dev,
const char *  name,
double  values[],
char *  names[],
int  n 
)
virtual

◆ ISNewSwitch()

bool StreamManager::ISNewSwitch ( const char *  dev,
const char *  name,
ISState states,
char *  names[],
int  n 
)
virtual

◆ ISNewText()

bool StreamManager::ISNewText ( const char *  dev,
const char *  name,
char *  texts[],
char *  names[],
int  n 
)
virtual

◆ isRecording()

bool INDI::StreamManager::isRecording ( )
inline

◆ isStreaming()

bool INDI::StreamManager::isStreaming ( )
inline

◆ mkpath()

int StreamManager::mkpath ( std::string  s,
mode_t  mode 
)
private

◆ newFrame()

void StreamManager::newFrame ( const uint8_t buffer,
uint32_t  nbytes 
)

newFrame CCD drivers call this function when a new frame is received.

It is then streamed, or recorded, or both according to the settings in the streamer.

◆ recordStream()

bool StreamManager::recordStream ( const uint8_t buffer,
uint32_t  nbytes,
double  deltams 
)
private

recordStream Calls the backend recorder to record a single frame.

Parameters
deltamstime in milliseconds since last frame

◆ saveConfigItems()

bool StreamManager::saveConfigItems ( FILE *  fp)
virtual

◆ setPixelFormat()

bool StreamManager::setPixelFormat ( INDI_PIXEL_FORMAT  pixelFormat,
uint8_t  pixelDepth = 8 
)

◆ setSize()

void StreamManager::setSize ( uint16_t  width,
uint16_t  height 
)

◆ setStream()

bool StreamManager::setStream ( bool  enable)

setStream Enables (starts) or disables (stops) streaming.

Parameters
enableTrue to enable, false to disable
Returns
True if operation is successful, false otherwise.

◆ startRecording()

bool StreamManager::startRecording ( )
private

◆ stopRecording()

bool StreamManager::stopRecording ( bool  force = false)
private

◆ updateProperties()

bool StreamManager::updateProperties ( )
virtual

◆ uploadStream()

bool StreamManager::uploadStream ( const uint8_t buffer,
uint32_t  nbytes 
)
private

uploadStream Upload frame to client using the selected encoder

Parameters
bufferpointer to frame image buffer
nbytessize of frame in bytes
Returns
True if frame is encoded and sent to client, false otherwise.

Member Data Documentation

◆ currentCCD

CCD* INDI::StreamManager::currentCCD = nullptr
protected

◆ direct_record

bool INDI::StreamManager::direct_record
private

◆ downscaleBuffer

uint8_t* INDI::StreamManager::downscaleBuffer = nullptr
private

◆ downscaleBufferSize

uint32_t INDI::StreamManager::downscaleBufferSize =0
private

◆ encoder

EncoderInterface* INDI::StreamManager::encoder = nullptr
private

◆ encoderManager

EncoderManager* INDI::StreamManager::encoderManager = nullptr
private

◆ EncoderS

ISwitch INDI::StreamManager::EncoderS[2]
private

◆ EncoderSP

ISwitchVectorProperty INDI::StreamManager::EncoderSP
private

◆ FpsN

INumber INDI::StreamManager::FpsN[2]
private

◆ FpsNP

INumberVectorProperty INDI::StreamManager::FpsNP
private

◆ framecountsec

double INDI::StreamManager::framecountsec
private

◆ imageB

IBLOB* INDI::StreamManager::imageB
private

◆ imageBP

IBLOBVectorProperty* INDI::StreamManager::imageBP
private

◆ m_isRecording

bool INDI::StreamManager::m_isRecording
private

◆ m_isStreaming

bool INDI::StreamManager::m_isStreaming
private

◆ m_PixelDepth

uint8_t INDI::StreamManager::m_PixelDepth
private

◆ m_PixelFormat

INDI_PIXEL_FORMAT INDI::StreamManager::m_PixelFormat
private

◆ mssum

double INDI::StreamManager::mssum
private

◆ rawHeight

uint16_t INDI::StreamManager::rawHeight =0
private

◆ rawWidth

uint16_t INDI::StreamManager::rawWidth =0
private

◆ recordDuration

double INDI::StreamManager::recordDuration
private

◆ recorder

RecorderInterface* INDI::StreamManager::recorder = nullptr
private

◆ recorderManager

RecorderManager* INDI::StreamManager::recorderManager = nullptr
private

◆ RecorderS

ISwitch INDI::StreamManager::RecorderS[2]
private

◆ RecorderSP

ISwitchVectorProperty INDI::StreamManager::RecorderSP
private

◆ recordfiledir

std::string INDI::StreamManager::recordfiledir
private

◆ recordfilename

std::string INDI::StreamManager::recordfilename
private

◆ RecordFileT

IText INDI::StreamManager::RecordFileT[2] {}
private

◆ RecordFileTP

ITextVectorProperty INDI::StreamManager::RecordFileTP
private

◆ recordframeCount

int INDI::StreamManager::recordframeCount
private

◆ RecordOptionsN

INumber INDI::StreamManager::RecordOptionsN[2]
private

◆ RecordOptionsNP

INumberVectorProperty INDI::StreamManager::RecordOptionsNP
private

◆ RecordStreamS

ISwitch INDI::StreamManager::RecordStreamS[4]
private

◆ RecordStreamSP

ISwitchVectorProperty INDI::StreamManager::RecordStreamSP
private

◆ StreamExposureN

INumber INDI::StreamManager::StreamExposureN[1]
private

◆ StreamExposureNP

INumberVectorProperty INDI::StreamManager::StreamExposureNP
private

◆ streamframeCount

int INDI::StreamManager::streamframeCount
private

◆ StreamFrameN

INumber INDI::StreamManager::StreamFrameN[4]
private

◆ StreamFrameNP

INumberVectorProperty INDI::StreamManager::StreamFrameNP
private

◆ StreamS

ISwitch INDI::StreamManager::StreamS[2]
private

◆ StreamSP

ISwitchVectorProperty INDI::StreamManager::StreamSP
private

◆ tframe2

struct itimerval tframe1 INDI::StreamManager::tframe2
private

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