#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXQUESIZE 3
typedef struct JpegParam
{
int typeId;
unsigned char chan;
unsigned char type;
unsigned char jpegTime;
unsigned char jpegFrame;
}JpegParam;
typedef struct CirQueue
{
JpegParam *jpegParam;
int front;
int rear;
}CirQueue;
struct CirQueue Q;
int InitQueue(CirQueue *Q)
{
Q->jpegParam = (JpegParam *) malloc(MAXQUESIZE * sizeof(JpegParam));
if(Q->jpegParam == NULL)
{
return EXIT_FAILURE;
}
Q->front = Q->rear = 0;
return EXIT_SUCCESS;
}
int InQueue(CirQueue *Q, JpegParam *param)
{
if(((Q->rear + 1) % MAXQUESIZE) == Q->front)
{
return EXIT_FAILURE;
}
Q->jpegParam[Q->rear] = *param;
Q->rear = (Q->rear + 1) % MAXQUESIZE;
return EXIT_SUCCESS;
}
int DeQueue(CirQueue *Q, JpegParam *param)
{
if(Q->front == Q->rear)
{
return EXIT_FAILURE;
}
*param = Q->jpegParam[Q->front];
Q->front = (Q->front + 1) % MAXQUESIZE;
return EXIT_SUCCESS;
}
int main(int argc, char **argv)
{
int i = 0;
JpegParam *param = (JpegParam *)malloc(sizeof(JpegParam));
JpegParam PM;
param->typeId = 21;
param->chan = 2;
param->type = 1;
param->jpegTime = 3;
param->jpegFrame = 4;
i = InitQueue(&Q);
if(i == 1)
{
perror("Init queue failure: ");
}
if(InQueue(&Q, param) > 0)
{
puts("Queue is full!");
}
if(DeQueue(&Q, &PM) > 0)
{
puts("Queue is empty!");
}
printf("%s %d %d %d %d %d %d/n", __FILE__, __LINE__, PM.typeId, PM.chan, PM.type, PM.jpegTime, PM.jpegFrame);
return 0;
}