forked from KolibriOS/kolibrios
0f5cbca619
git-svn-id: svn://kolibrios.org@2415 a494cfbc-eb01-0410-851d-a64ba20cac60
171 lines
3.6 KiB
C
171 lines
3.6 KiB
C
|
|
#define BLACK_MAGIC_SOUND
|
|
#define BLACK_MAGIC_VIDEO
|
|
|
|
typedef unsigned int color_t;
|
|
typedef unsigned int count_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t width;
|
|
uint32_t height;
|
|
uint32_t pitch;
|
|
uint32_t handle;
|
|
uint8_t *data;
|
|
}bitmap_t;
|
|
|
|
typedef struct render render_t;
|
|
|
|
#define HAS_LEFT (1<<0)
|
|
#define HAS_TOP (1<<1)
|
|
#define HAS_RIGHT (1<<2)
|
|
#define HAS_BOTTOM (1<<3)
|
|
|
|
struct render
|
|
{
|
|
uint32_t caps;
|
|
uint32_t ctx_width;
|
|
uint32_t ctx_height;
|
|
uint32_t win_width;
|
|
uint32_t win_height;
|
|
|
|
rect_t rc_client;
|
|
rect_t rcvideo;
|
|
rect_t rcleft;
|
|
rect_t rctop;
|
|
rect_t rcright;
|
|
rect_t rcbottom;
|
|
|
|
uint32_t layout;
|
|
bitmap_t bitmap[4];
|
|
uint32_t ctx_format;
|
|
int target;
|
|
|
|
window_t *win;
|
|
enum{
|
|
EMPTY, INIT }state;
|
|
enum win_state win_state;
|
|
|
|
void (*draw)(render_t *render, AVPicture *picture);
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
volatile uint32_t lock;
|
|
char *buffer;
|
|
volatile uint32_t count;
|
|
}astream_t;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned int code;
|
|
unsigned int sender;
|
|
unsigned int stream;
|
|
unsigned int offset;
|
|
unsigned int size;
|
|
unsigned int unused[2];
|
|
}SND_EVENT;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned handle;
|
|
unsigned io_code;
|
|
void *input;
|
|
int inp_size;
|
|
void *output;
|
|
int out_size;
|
|
}ioctl_t;
|
|
|
|
typedef struct {
|
|
AVPacketList *first_pkt;
|
|
AVPacketList *last_pkt;
|
|
int size;
|
|
int count;
|
|
volatile uint32_t lock;
|
|
} queue_t;
|
|
|
|
int put_packet(queue_t *q, AVPacket *pkt);
|
|
int get_packet(queue_t *q, AVPacket *pkt);
|
|
|
|
|
|
extern astream_t astream;
|
|
extern AVRational video_time_base;
|
|
|
|
render_t *create_render(uint32_t width, uint32_t height,
|
|
uint32_t ctx_format, uint32_t flags);
|
|
|
|
int init_render(render_t *render, int width, int height);
|
|
void render_adjust_size(render_t *render, window_t *win);
|
|
int render_set_size(render_t *render, int width, int height);
|
|
void render_draw_client(render_t *render);
|
|
|
|
|
|
int init_audio(int format);
|
|
int audio_thread(void *param);
|
|
|
|
int init_video(AVCodecContext *ctx);
|
|
int video_thread(void *param);
|
|
|
|
int decode_video(AVCodecContext *ctx, queue_t *qv);
|
|
int decode_audio(AVCodecContext *ctx, queue_t *qa);
|
|
|
|
double get_master_clock();
|
|
|
|
|
|
int create_thread(int (*proc)(void *param), void *param, int stack_size);
|
|
|
|
void mutex_lock(volatile uint32_t *val);
|
|
|
|
static inline void mutex_unlock(volatile uint32_t *val)
|
|
{
|
|
*val = 0;
|
|
}
|
|
|
|
static inline void GetNotify(void *event)
|
|
{
|
|
__asm__ __volatile__ (
|
|
"int $0x40"
|
|
::"a"(68),"b"(14),"c"(event));
|
|
}
|
|
|
|
static inline uint32_t get_os_button()
|
|
{
|
|
uint32_t val;
|
|
__asm__ __volatile__(
|
|
"int $0x40"
|
|
:"=a"(val)
|
|
:"a"(17));
|
|
return val>>8;
|
|
};
|
|
|
|
static inline void yield(void)
|
|
{
|
|
__asm__ __volatile__(
|
|
"int $0x40"
|
|
::"a"(68), "b"(1));
|
|
};
|
|
|
|
static inline void delay(uint32_t time)
|
|
{
|
|
__asm__ __volatile__(
|
|
"int $0x40"
|
|
::"a"(5), "b"(time));
|
|
};
|
|
|
|
|
|
|
|
|
|
#define HW_BIT_BLIT (1<<0) /* BGRX blitter */
|
|
#define HW_TEX_BLIT (1<<1) /* stretch blit */
|
|
#define HW_VID_BLIT (1<<2) /* planar and packed video */
|
|
|
|
uint32_t InitPixlib(uint32_t flags);
|
|
|
|
int create_bitmap(bitmap_t *bitmap);
|
|
int lock_bitmap(bitmap_t *bitmap);
|
|
int resize_bitmap(bitmap_t *bitmap);
|
|
int blit_bitmap(bitmap_t *bitmap, int dst_x, int dst_y,
|
|
int w, int h);
|
|
|
|
|