23#pragma warning (disable : 4091)
44 struct jpeg_error_mgr
pub;
61 auto* mybuffer = (JOCTET *) cinfo->client_data;
64 mybuffer[0] = (JOCTET) 0xFF;
65 mybuffer[1] = (JOCTET) JPEG_EOI;
66 cinfo->src->next_input_byte = mybuffer;
67 cinfo->src->bytes_in_buffer = 2;
73 (*cinfo->err->output_message) (cinfo);
74 longjmp(myerr->setjmp_buffer, 1);
82 while (num_bytes > (
long) src->bytes_in_buffer) {
83 num_bytes -= (long) src->bytes_in_buffer;
84 (
void) (*src->fill_input_buffer) (cinfo);
86 src->next_input_byte += (
size_t) num_bytes;
87 src->bytes_in_buffer -= (
size_t) num_bytes;
96 if (cinfo->src ==
nullptr) {
97 cinfo->src = (
struct jpeg_source_mgr *)
98 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
99 sizeof(jpeg_source_mgr));
106 src->resync_to_restart = jpeg_resync_to_restart;
108 src->bytes_in_buffer = buflen;
109 src->next_input_byte = (JOCTET *)buf;
116 struct jpeg_decompress_struct
cinfo;
124 memset(&
cinfo, 0,
sizeof(jpeg_decompress_struct));
137 jpeg_create_decompress(&
cinfo);
149 jpeg_finish_decompress(&
cinfo);
154 jpeg_save_markers(&
cinfo, JPEG_COM, 0xFFFF);
155 jpeg_read_header(&
cinfo, TRUE);
156 jpeg_calc_output_dimensions(&
cinfo);
158 if(
cinfo.jpeg_color_space == JCS_GRAYSCALE) {
168 jpeg_start_decompress(&
cinfo);
172 while (
cinfo.output_scanline <
cinfo.output_height) {
175 jpeg_read_scanlines(&
cinfo, lines, 1);
179 Bytes envelope(
reinterpret_cast<char*
>(
cinfo.marker_list->data),
cinfo.marker_list->data_length);
183 jpeg_finish_decompress(&
cinfo);
188 jpeg_destroy_decompress(&
cinfo);
199#define HELPER(x) (*((MjpegDecompressionHelper*)(x)))
207 if (system_resource!=
nullptr) {
208 delete &
HELPER(system_resource);
209 system_resource =
nullptr;
229#ifdef MJPEG_AUTOCOMPRESS
void jpeg_net_src(j_decompress_ptr cinfo, char *buf, int buflen)
void net_error_exit(j_common_ptr cinfo)
net_error_mgr * net_error_ptr
jpeg_source_mgr * net_src_ptr
void term_net_source(j_decompress_ptr cinfo)
void init_net_source(j_decompress_ptr cinfo)
void skip_net_input_data(j_decompress_ptr cinfo, long num_bytes)
boolean fill_net_input_buffer(j_decompress_ptr cinfo)
const yarp::os::LogComponent & MJPEGCARRIER()
void * readEnvelopeCallbackData
bool decompress(const Bytes &cimg, FlexImage &img)
~MjpegDecompressionHelper()
bool setReadEnvelopeCallback(yarp::os::InputStream::readEnvelopeCallbackType callback, void *data)
MjpegDecompressionHelper()
struct net_error_mgr jerr
yarp::os::InputStream::readEnvelopeCallbackType readEnvelopeCallback
struct jpeg_decompress_struct cinfo
virtual ~MjpegDecompression()
bool decompress(const yarp::os::Bytes &data, yarp::sig::FlexImage &image)
bool setReadEnvelopeCallback(yarp::os::InputStream::readEnvelopeCallbackType callback, void *data)
A simple abstraction for a block of bytes.
Image class with user control of representation details.
void setPixelCode(int imgPixelCode)
void resize(size_t imgWidth, size_t imgHeight)
Reallocate an image to be of a desired size, throwing away its current contents.
unsigned char * getPixelAddress(size_t x, size_t y) const
Get address of a pixel in memory.
#define yCAssert(component, x)
#define yCTrace(component,...)
#define yCWarning(component,...)
An interface to the operating system, including Port based communication.
struct jpeg_error_mgr pub