/* ---------------------------------------------------------------------------
** 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.
**
** H26x_V4l2DeviceSource.h
**
** H264/H265 V4L2 live555 source
**
** -------------------------------------------------------------------------*/

#pragma once

// project
#include "V4L2DeviceSource.h"

// ---------------------------------
// H264 V4L2 FramedSource
// ---------------------------------
const char H264marker[] = {0, 0, 0, 1};
const char H264shortmarker[] = {0, 0, 1};

class H26X_V4L2DeviceSource : public V4L2DeviceSource
{
protected:
	H26X_V4L2DeviceSource(UsageEnvironment &env, DeviceInterface *device, int outputFd, unsigned int queueSize, CaptureMode captureMode, bool repeatConfig, bool keepMarker)
		: V4L2DeviceSource(env, device, outputFd, queueSize, captureMode), m_repeatConfig(repeatConfig), m_keepMarker(keepMarker) {}

	virtual ~H26X_V4L2DeviceSource() {}

	unsigned char *extractFrame(unsigned char *frame, size_t &size, size_t &outsize, int &frameType);
	std::string getFrameWithMarker(const std::string &frame);

protected:
	std::string m_sps;
	std::string m_pps;
	bool m_repeatConfig;
	bool m_keepMarker;
};
