![]() |
![]() |
||||||
![]() |
|||||||
|
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <jpeglib.h>
#include "compress.h"
#include "capture.h"
#include "webcam.h"
char *JPEGBuffer = NULL;
int JPEGSize = 0;
int BufSize;
struct timeval JPEGTime;
struct jpeg_compress_struct Compress;
struct jpeg_error_mgr Err;
struct jpeg_destination_mgr Dest;
#define BlockSize 1024
void Compress_InitDest(j_compress_ptr Info)
{
printf("Compress got init...\n");
if (JPEGBuffer!=NULL)
free(JPEGBuffer);
JPEGBuffer=(char *)malloc(BlockSize);
BufSize=BlockSize;
if (JPEGBuffer==NULL)
ExitFatal("JPEGBuffer could not be allocated!");
Dest.next_output_byte=JPEGBuffer;
Dest.free_in_buffer=BlockSize;
}
boolean Compress_EmptyOutput(j_compress_ptr Info)
{
JPEGBuffer=(char *)realloc(JPEGBuffer,BufSize+BlockSize);
if (JPEGBuffer==NULL)
ExitFatal("JPEGBuffer could not be reallocated!");
Dest.next_output_byte=JPEGBuffer+BufSize;
Dest.free_in_buffer=BlockSize;
BufSize+=BlockSize;
return TRUE;
}
void Compress_DestTerm(j_compress_ptr Info)
{
JPEGSize=BufSize-Dest.free_in_buffer;
printf("Compress_DestTerm...\n");
}
void Compress_Init(void)
{
///Init compress structures
//
Compress.err=jpeg_std_error(&Err);
jpeg_create_compress(&Compress);
Compress.image_width=ImageWidth;
Compress.image_height=ImageHeight;
Compress.input_components=3;
Compress.in_color_space=JCS_RGB;
jpeg_set_defaults(&Compress);
///Init destination handler
//
Dest.init_destination=&Compress_InitDest;
Dest.empty_output_buffer=&Compress_EmptyOutput;
Dest.term_destination=&Compress_DestTerm;
Compress.dest=&Dest;
}
void Compress_CreateJPEG(void)
{
int X,Y;
unsigned char *FramePtr;
unsigned char Pixel[ImageWidth][3];
JSAMPROW Row[1];
Row[0]=&Pixel[0][0];
jpeg_start_compress(&Compress,TRUE);
for (Y=0; Y<ImageHeight; Y++)
{
FramePtr=(unsigned char *)(FrameBuffer+Y*ImageWidth*4);
for (X=0; X<ImageWidth; X++)
{
Pixel[X][2]=*FramePtr++;
Pixel[X][1]=*FramePtr++;
Pixel[X][0]=*FramePtr++;
FramePtr++;
}
jpeg_write_scanlines(&Compress,Row,1);
}
jpeg_finish_compress(&Compress);
}
void Compress_Shutdown(void)
{
jpeg_destroy_compress(&Compress);
}
syntax highlighted by Code2HTML, v. 0.9.1 Email me with questions/comments : Daan <Danovitsch @ Vitsch . net> |