sdk-hwV1.3/lichee/linux-4.9/drivers/media/rt-media/component/rt_message.h

89 lines
3.1 KiB
C

/*******************************************************************************
-- --
-- CedarX Multimedia Framework --
-- --
-- the Multimedia Framework for Linux/Android System --
-- --
-- This software is confidential and proprietary and may be used --
-- only as expressly authorized by a licensing agreement from --
-- Softwinner Products. --
-- --
-- (C) COPYRIGHT 2011 SOFTWINNER PRODUCTS --
-- ALL RIGHTS RESERVED --
-- --
-- The entire notice above must be reproduced --
-- on all copies and should not be removed. --
-- --
*******************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#ifndef __MESSAGE_H_8X3E__
#define __MESSAGE_H_8X3E__
//ref platform headers
//#include "plat_type.h"
//#include <pthread.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/mutex.h>
#include <linux/wait.h>
#include "rt_common.h"
//cts test may send 1000 messages.
//we must make sure message queue longer than 10000.
#define MAX_MESSAGE_ELEMENTS (8) //20000
enum message_id {
MESSAGE_ID_INIT = 0,
MESSAGE_ID_START = 1,
MESSAGE_ID_PAUSE = 2,
MESSAGE_ID_STOP = 3,
MESSAGE_ID_MAX = 4,
};
//typedef struct message_t message_t;
typedef struct message_t {
int id;
int command;
// int priority;
int para0;
int para1;
char *wait_queue;
char *wait_condition;
struct list_head mList;
} message_t;
typedef struct message_queue_t {
struct list_head mIdleMessageList; //message_t
struct list_head mReadyMessageList; //message_t
//struct list_head mMessageBufList; //DynamicBuffer, sizeof(message_t)*MAX_MESSAGE_ELEMENTS
int message_count;
struct mutex mutex;
int mWaitMessageFlag;
wait_queue_head_t wait_msg;
unsigned int wait_condition;
} message_queue_t;
int message_create(message_queue_t *message);
void message_destroy(message_queue_t *msg_queue);
void flush_message(message_queue_t *msg_queue);
int put_message(message_queue_t *msg_queue, message_t *msg_in);
int get_message(message_queue_t *msg_queue, message_t *msg_out);
int putMessageWithData(message_queue_t *msg_queue, message_t *msg_in);
int get_message_count(message_queue_t *message);
int TMessage_WaitQueueNotEmpty(message_queue_t *msg_queue, unsigned int timeout); //unit:ms
#endif
#ifdef __cplusplus
}
#endif