当前位置: 首页 > news >正文

免费个人网站怎么注册建站空间哪个好

免费个人网站怎么注册,建站空间哪个好,网站建设与维护相关知识,满足客户的crm软件定制文章目录 播放器状态转换图播放器状态对应的消息#xff1a; 消息对象消息队列消息队列api插入消息获取消息初始化消息插入消息加锁初始化消息设置消息参数消息队列初始化清空消息销毁消息启动消息队列终止消息队列删除消息 消息队列#xff0c;用于发送#xff0c;设置播放… 文章目录 播放器状态转换图播放器状态对应的消息 消息对象消息队列消息队列api插入消息获取消息初始化消息插入消息加锁初始化消息设置消息参数消息队列初始化清空消息销毁消息启动消息队列终止消息队列删除消息 消息队列用于发送设置播放器的状态实现ui界面jikpalyer以及ffplay之间的通信 播放器状态转换图 实线箭头连接的状态变化通过 API 调⽤完成 虚线箭头连接的状态变化是通过 播放器内部执⾏完特定任务或者发⽣错误 ⽽⾃动发⽣的状态 变化 播放器状态对应的消息 idle: MP_STATE_IDLE 闲置状态刚完成构造的 FijkPlayeinitialized MP_STATE_INITIALIZED 初始化完成状态和 idle 状态相⽐仅是多了输⼊媒体 数据源的信息async_preparingMP_STATE_ASYNC_PREPARING 异步准备状态进行打开媒体⽂件打开解码器以及新建解码线程新建数据 read 线程打开⾳频输出设备新建视频输出线程等preparedMP_STATE_PREPARED完成指定任务后⾃动转化为此状态。此状态下已经缓冲并解码了⼀部分⾳视频数据可以随时进⾏播放startedMP_STATE_STARTED 媒体视频、⾳频正在播放中pausedMP_STATE_PAUSED 媒体视频、⾳频播放暂停completedMP_STATE_COMPLETED 媒体视频、⾳频播放完成。 可重新从头开始播 放。stop: MP_STATE_STOPPED 播放器各种线程占⽤资源都已经释放。 ⾳频设备关闭error MP_STATE_ERROR 播放器出现错误 消息对象 typedef struct AVMessage {int what; // 消息类型int arg1; // 参数1int arg2; // 参数2void *obj; // 如果arg1 arg2还不够存储消息则使⽤该参数void (*free_l)(void *obj); // 释放obj指向的函数struct AVMessage *next; // 下⼀个消息 } AVMessage;消息队列 typedef struct MessageQueue { // 消息队列AVMessage *first_msg, *last_msg; // 消息头消息尾部int nb_messages; // 有多少个消息int abort_request; // 请求终⽌消息队列SDL_mutex *mutex; // 互斥量SDL_cond *cond; // 条件变量AVMessage *recycle_msg; // 消息循环使⽤int recycle_count; // 循环的次数利⽤局部性原理int alloc_count; // 分配的次数 } MessageQueue;recycle_msg 用于回收消息消息使用链表进行存储当消息取出时通过recycle_msg链接该消息重新用做新消息使用 作用节省了对新消息申请空间以及对取出的消息释放内存操作 消息队列api 插入消息 // 消息队列内部重新去构建 AVMessage重新申请AVMessage或者来自于recycle_msg // 新的消息插入到尾部 int msg_queue_put_private(MessageQueue *q, AVMessage *msg) {AVMessage *msg1;if(q-abort_request)return -1;//1. 消息体使用回收的资源还是重新mallocmsg1 q-recycle_msg;if(msg1) {q-recycle_msg msg1-next;q-recycle_count;} else {q-alloc_count;msg1 (AVMessage *)av_malloc(sizeof(AVMessage));}*msg1 *msg;msg1-next NULL;if(!q-first_msg) {q-first_msg msg1;} else {q-last_msg-next msg1;}q-last_msg msg1;q-nb_messages;SDL_CondSignal(q-cond);return 0; }获取消息 int msg_queue_get(MessageQueue *q, AVMessage *msg, int block) {AVMessage *msg1;int ret;SDL_LockMutex(q-mutex);for(;;) {if(q-abort_request) {ret -1;break;}//获取消息msg1 q-first_msg;if(msg1) {q-first_msg msg1-next;if(!q-first_msg)q-last_msg NULL;q-nb_messages--;*msg *msg1;msg1-obj NULL;msg1-next q-recycle_msg;q-recycle_msg msg1;ret 1;break; // 记得这里有个break的} else if (!block) {ret 0;break;} else {SDL_CondWait(q-cond, q-mutex);}}SDL_UnlockMutex(q-mutex);return ret; }初始化消息 // 消息队列初始化 void msg_queue_init(MessageQueue *q) {memset(q, 0, sizeof(MessageQueue));q-mutex SDL_CreateMutex();q-cond SDL_CreateCond();q-abort_request 1; }插入消息加锁 int msg_queue_put(MessageQueue *q, AVMessage *msg) {int ret;SDL_LockMutex(q-mutex);ret msg_queue_put_private(q, msg);SDL_UnlockMutex(q-mutex);return ret; } 初始化消息 void msg_init_msg(AVMessage *msg) {memset(msg, 0, sizeof(AVMessage)); }设置消息参数 void msg_queue_put_simple1(MessageQueue *q, int what) {AVMessage msg;msg_init_msg(msg);msg.what what;msg_queue_put(q, msg); }// 释放msg的obj资源 void msg_obj_free_l(void *obj) {av_free(obj); } //插入消息带消息类型带2个参数带obj void msg_queue_put_simple4(MessageQueue *q, int what, int arg1, int arg2, void *obj, int obj_len) {AVMessage msg;msg_init_msg(msg);msg.what what;msg.arg1 arg1;msg.arg2 arg2;msg.obj av_malloc(obj_len);memcpy(msg.obj, obj, obj_len);msg.free_l msg_obj_free_l;msg_queue_put(q, msg); }消息队列初始化 void msg_queue_init(MessageQueue *q) {memset(q, 0, sizeof(MessageQueue));q-mutex SDL_CreateMutex();q-cond SDL_CreateCond();q-abort_request 1; }清空消息 // 消息队列flush清空所有的消息 void msg_queue_flush(MessageQueue *q) {AVMessage *msg, *msg1;SDL_LockMutex(q-mutex);for (msg q-first_msg; msg ! NULL; msg msg1) { // 这个时候的obj没有清空那会导致泄漏实际是把消息对象暂存到了recycle_msgmsg1 msg-next;msg-next q-recycle_msg;q-recycle_msg msg;}q-last_msg NULL;q-first_msg NULL;q-nb_messages 0;SDL_UnlockMutex(q-mutex);}销毁消息 void msg_queue_destroy(MessageQueue *q) {msg_queue_flush(q);SDL_LockMutex(q-mutex);while(q-recycle_msg) {AVMessage *msg q-recycle_msg;if (msg)q-recycle_msg msg-next;msg_free_res(msg);av_freep(msg);}SDL_UnlockMutex(q-mutex);SDL_DestroyMutex(q-mutex);SDL_DestroyCond(q-cond); }启动消息队列 void msg_queue_start(MessageQueue *q) {SDL_LockMutex(q-mutex);q-abort_request 0;// 插入一个消息AVMessage msg;msg_init_msg(msg);msg.what FFP_MSG_FLUSH;msg_queue_put_private(q, msg);SDL_UnlockMutex(q-mutex); }终止消息队列 void msg_queue_abort(MessageQueue *q) {SDL_LockMutex(q-mutex);q-abort_request 1;SDL_CondSignal(q-cond);SDL_UnlockMutex(q-mutex); }删除消息 // 消息删除 把队列里同一消息类型的消息全删除掉 void msg_queue_remove(MessageQueue *q, int what) {AVMessage **p_msg, *msg, *last_msg;SDL_LockMutex(q-mutex);last_msg q-first_msg;if (!q-abort_request q-first_msg) {p_msg q-first_msg;while (*p_msg) {msg *p_msg;if (msg-what what) { // 同类型的消息全部删除*p_msg msg-next;msg_free_res(msg);msg-next q-recycle_msg; // 消息体回收q-recycle_msg msg;q-nb_messages--;} else {last_msg msg;p_msg msg-next;}}if (q-first_msg) {q-last_msg last_msg;} else {q-last_msg NULL;}}SDL_UnlockMutex(q-mutex); }
http://www.w-s-a.com/news/472385/

相关文章:

  • 手机网站设计只找亿企邦工业设计公司简介
  • 腾讯云主机做网站免费网站怎么做啊
  • 网站建设推广销售话术广州网页定制多少钱
  • 备案号是哪个网站项目管理pmp
  • 做网站需要哪些硬件软件网站视频链接怎么做的
  • 电子商务网站建设试题二wordpress主页显示浏览数
  • 网站快照没了广州企业电话大全
  • 网站项目开发收费标准网站开发app开发主营业务
  • 怎么到国外网站去接模具订单做互联网建设企业网站
  • 深圳品牌网站建设公司排名洪雅网站建设
  • nodejs 做网站wordpress主题绕过激活码
  • 平湖模板网站建设公司网页美工培训
  • 顺德网站建设市场建设工程交易中心网站
  • 深圳企业网站怎么做浪琴手表网站建设图
  • 2018网站外链怎么做济南 网站设计公司
  • 承德百度网站建设郑州网站seo优化公司
  • 四川建站模板网站公司分类信息网站制作
  • 网站开发前后端有wordpress模板安装教程视频教程
  • 有网站想修改里面的内容怎么做怎么做黑彩黑彩网站
  • 什么专业会做网站网站建设续费合同
  • 网站开发的项目开发网站做直播功能需要注册吗
  • 网站开发新手什么软件好网站设计师和ui设计师
  • 太仓苏州网站建设软件开发网站建设
  • 一个虚拟主机做2个网站吗工信部怎么查网站备案
  • 本地网站做淘宝客制作app步骤
  • 关于企业网站建设网页布局怎么设计
  • 惠州市网站设计公司裴东莞嘘网站汉建设
  • 长葛网站建站电子商务网站是什么
  • 泉做网站的公司太原网站建设开发公司
  • wordpress菜单栏的函数调用迅速上排名网站优化