Camera capture --> Encode -> stream (unsigned char )
-> Recieve -> Decode
Encoding side
unsigned char Buffer[1024*20];
IplImage *image =cvQueryFrame(capture);
const static int encodeparams[]={CV_IMWRITE_JPEG_QUALITY,60};
encode =cvEncodeImage(".jpg",image,encodeparams);
memcpy(&buffer,encode->data.ptr,sizeof(unsigned char )*encode->rows*encode->cols);
image=cvQueryFrame(Capture);
encode=cvEncodeImage(".jpg",image,encodeparams);
decode=cvCreateMat(encode->rows,encode->cols,CV_8UC1);
decode->data.ptr=encode->data.ptr;
cvShowImage("Server",image);
cvWaitKey(1);
Frame->iSync=0x1;
Frame->iLength=(16+(encode->rows*encode->cols));
Frame->iSize=(encode->rows*encode->cols);
Frame->iWidth=(encode->rows);
Frame->iHeight=(encode->cols);
Frame->iSync=0x1;
Frame->iLength=(16+(encode->rows*encode->cols));
Frame->iSize=(encode->rows*encode->cols);
Frame->iWidth=(encode->rows);
Frame->iHeight=(encode->cols);
memcpy(&bImageData[0],&Frame->iSync,sizeof(int));
memcpy(&bImageData[4],&Frame->iLength,sizeof(int));
memcpy(&bImageData[8],&Frame->iSize,sizeof(int));
memcpy(&bImageData[12],&Frame->iWidth,sizeof(int));
memcpy(&bImageData[16],&Frame->iHeight,sizeof(int));
memcpy(&bImageData[20],encode->data.ptr,sizeof(unsigned char)*encode->rows*encode->cols);
// printf("%d",length );
length = Frame->iLength;
while( count < length)
{
offset=send(connect,&bImageData[count],(length-count),0);
if(offset > 1)
{
count +=offset;
// printf("\n Count & %d %d \n",offset,count);
}
if(offset == (-1))
{
printf("closed connection");
goto _error_video_client;
}
}
recv(connect,RecvBuff,sizeof(RecvBuff),0);
}
decoding side
define MAKEDWORD(B0,B1,B2,B3) (((unsigned long)B0)+
(((unsigned long)B1)<<8)+
(((unsigned long)B2)<<16)+
(((unsigned long)B3)<<24))
if(offset)
{
if(size > PACKET_HEADER_SIZE )
{ // ofcourse i am getting all using QT so this... to get the header info from encoder cols, rows
info.
iSync = MAKEDWORD(CopyData.at(0),CopyData.at(1),CopyData.at(2),CopyData.at(3));
iLength = MAKEDWORD(CopyData.at(4),CopyData.at(5),CopyData.at(6),CopyData.at(7));
iSize = MAKEDWORD(CopyData.at(8),CopyData.at(9),CopyData.at(10),CopyData.at(11));
iRows = MAKEDWORD(CopyData.at(12),CopyData.at(13),CopyData.at(14),CopyData.at(15));
iCols = MAKEDWORD(CopyData.at(16),CopyData.at(17),CopyData.at(18),CopyData.at(19));
std::cout << "iLength " << iLength;
std::cout << "isize " << iSize << "iWidth " << iRows << " iHeight" << iCols;
offset=0;
if((iLength < 0) && iLength > FRAME_LENGTH )
offset=1;
count=size;
memcpy(&FrameBuffer[0],&CopyData,size);
std::cout << "Size" << size;
}
}
else
{ std::cout << "count " << count;
memcpy(&FrameBuffer[count],&CopyData,size); // i cross verified keep until u reach the header info there is no error.
memcpy(&Buffer,datastream,encode->rows*encode->cols);
// buffer is of unsigned char
count == length
count+=size;
if(count == iLength)
{
std::cout << "count== length " << iRows <<" "<< iCols;
std::cout << "Completed";
decode =cvCreateMat(iRows,iCols,CV_8UC1);
decode->data.ptr=&Buffer[0];
=cvCreateMat(iRows,iSize,CV_8UC1);
decode->data.ptr=&FrameBuffer[20];
frame = cvDecodeImage(decode,CV_LOAD_IMAGE_COLOR);
if(!frame)
printf(" if(frame)
std::cout << "Valid Frame";
else
std::cout << "Not a Valid Frame "; // I am not getting valid aware why this is going invalid frame ");
after sending all the trasnmission are using unsigned char buffer.
}
}