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

创建网站要申请域名吗盘锦网站建设咨询

创建网站要申请域名吗,盘锦网站建设咨询,小程序推广方式有哪些,国庆图片制作小程序文章目录 问题1#xff1a;如何控制帧率#xff1f;问题2#xff1a;如何触发退出事件#xff1f;问题3#xff1a;如何实时调整视频窗口的大小问题4#xff1a;YUV如何一次读取一帧的数据#xff1f; 问题1#xff1a;如何控制帧率#xff1f; 单独用一个子线程给主线… 文章目录 问题1如何控制帧率问题2如何触发退出事件问题3如何实时调整视频窗口的大小问题4YUV如何一次读取一帧的数据 问题1如何控制帧率 单独用一个子线程给主线程发送刷新画面的事件 主线程负责刷新画面 每次发送刷新画面的命令后就延迟一段事件 具体的帧率公式为1000 / 延迟事件 帧率 问题2如何触发退出事件 SDL_QUIT 事件通常由用户触发当关闭窗口时SDL 会生成此事件。这可以通过用户点击窗口的关闭按钮如窗口右上角的 “X”或通过其他机制关闭窗口例如按 AltF4来触发。在事件循环中检测到 SDL_QUIT 后通常会执行相应的退出操作如设置退出标志s_thread_exit 1从而安全地终止程序或线程。 问题3如何实时调整视频窗口的大小 接受窗口变化的消息 实时更新窗口的尺寸 根据窗口和视频部分的比例 让实时渲染的时候 视频部分乘上这部分比例 就能到达 视频和窗口同步大小 问题4YUV如何一次读取一帧的数据 在 YUV420 格式中一帧的数据大小可以通过以下方式计算 Y 分量占据整个画面的大小video_width * video_height U 和 V 分量各占 Y 分量的四分之一(video_width * video_height) / 4 因此一帧的总大小为 y_frame_len u_frame_len v_frame_len video_width * video_height 2 * (video_width * video_height / 4) 简化为 yuv_frame_len video_width * video_height * 1.5 这样你就可以通过 yuv_frame_len 获取一帧的总大小。 #include stdio.h #include string.h#include SDL.h// 自定义消息类型 #define REFRESH_EVENT (SDL_USEREVENT 1) // 请求画面刷新事件 #define QUIT_EVENT (SDL_USEREVENT 2) // 退出事件// 定义分辨率 // YUV像素分辨率 #define YUV_WIDTH 320 #define YUV_HEIGHT 240 // 定义YUV格式 #define YUV_FORMAT SDL_PIXELFORMAT_IYUVint s_thread_exit 0; // 退出标志 1则退出// 通过线程去控制1s刷多少帧 int refresh_video_timer(void *data) {while (!s_thread_exit) {SDL_Event event;// 事件类型为刷新事件event.type REFRESH_EVENT;// 将事件推送到事件队列中SDL_PushEvent(event);SDL_Delay(40); // 1000 / 40 25 帧}// 停止控制视频输出帧数的时候 将这里的状态重置s_thread_exit 0;// push quit eventSDL_Event event;event.type QUIT_EVENT;SDL_PushEvent(event);return 0; } #undef main int main(int argc, char *argv[]) {// 初始化 SDLif (SDL_Init(SDL_INIT_VIDEO)) {fprintf(stderr, Could not initialize SDL - %s\n, SDL_GetError());return -1;}// SDLSDL_Event event; // 事件SDL_Rect rect; // 矩形SDL_Window *window NULL; // 窗口SDL_Renderer *renderer NULL; // 渲染SDL_Texture *texture NULL; // 纹理SDL_Thread *timer_thread NULL; // 请求刷新线程uint32_t pixformat YUV_FORMAT; // YUV420P即是SDL_PIXELFORMAT_IYUV// 分辨率// 1. YUV的分辨率int video_width YUV_WIDTH;int video_height YUV_HEIGHT;// 2.显示窗口的分辨率int win_width YUV_WIDTH;int win_height YUV_WIDTH;// YUV文件句柄FILE *video_fd NULL;const char *yuv_path yuv420p_320x240.yuv;size_t video_buff_len 0;uint8_t *video_buf NULL; // 读取数据后先把放到buffer里面// 我们测试的文件是YUV420P格式uint32_t y_frame_len video_width * video_height;uint32_t u_frame_len video_width * video_height / 4;uint32_t v_frame_len video_width * video_height / 4;uint32_t yuv_frame_len y_frame_len u_frame_len v_frame_len;// 创建窗口window SDL_CreateWindow(Simplest YUV Player,SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,video_width, video_height,SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);if (!window) {fprintf(stderr, SDL: could not create window, err:%s\n, SDL_GetError());goto _FAIL;}// 基于窗口创建渲染器renderer SDL_CreateRenderer(window, -1, 0);// 基于渲染器创建纹理texture SDL_CreateTexture(renderer,pixformat, // 指定yuv格式SDL_TEXTUREACCESS_STREAMING,video_width,video_height);// 分配空间video_buf ( uint8_t * )malloc(yuv_frame_len);if (!video_buf) {fprintf(stderr, Failed to alloce yuv frame space!\n);goto _FAIL;}// 打开YUV文件video_fd fopen(yuv_path, rb);if (!video_fd) {fprintf(stderr, Failed to open yuv file\n);goto _FAIL;}// 创建请求刷新线程timer_thread SDL_CreateThread(refresh_video_timer,NULL,NULL);while (1) {// 收取SDL系统里面的事件SDL_WaitEvent(event);if (event.type REFRESH_EVENT) // 画面刷新事件{video_buff_len fread(video_buf, 1, yuv_frame_len, video_fd);if (video_buff_len 0) {fprintf(stderr, Failed to read data from yuv file!\n);goto _FAIL;}// 设置纹理的数据 video_width 320 planeSDL_UpdateTexture(texture, NULL, video_buf, video_width);// 显示区域可以通过修改w和h进行缩放rect.x 0;rect.y 0;float w_ratio win_width * 1.0 / video_width;float h_ratio win_height * 1.0 / video_height;// 320x240 怎么保持原视频的宽高比例rect.w video_width * w_ratio;rect.h video_height * h_ratio;// rect.w video_width * 0.5;// rect.h video_height * 0.5;// 清除当前显示SDL_RenderClear(renderer);// 将纹理的数据拷贝给渲染器 会把比例还原回来设置一个视频SDL_RenderCopy(renderer, texture, NULL, rect);// 显示SDL_RenderPresent(renderer);} else if (event.type SDL_WINDOWEVENT) {// If Resize 更新窗口的尺寸SDL_GetWindowSize(window, win_width, win_height);printf(SDL_WINDOWEVENT win_width:%d, win_height:%d\n, win_width,win_height);} else if (event.type SDL_QUIT) // 退出事件{s_thread_exit 1;} else if (event.type QUIT_EVENT) {break;}}_FAIL:s_thread_exit 1; // 保证线程能够退出// 释放资源if (timer_thread)SDL_WaitThread(timer_thread, NULL); // 等待线程退出if (video_buf)free(video_buf);if (video_fd)fclose(video_fd);if (texture)SDL_DestroyTexture(texture);if (renderer)SDL_DestroyRenderer(renderer);if (window)SDL_DestroyWindow(window);SDL_Quit();return 0; }
http://www.w-s-a.com/news/793088/

相关文章:

  • 梧州市建设局官方网站商旅100网页版
  • 好的宝安网站建设中企动力的网站开发语言
  • flash网站模板怎么用怎么套模板 网站
  • 建设二手商品网站总结石景山安保服务公司电话
  • 网站建设对于企业的重要性龙岗企业网站设计公司
  • 网站搭建在线支付数码产品网站模板
  • 白云网站建设多少钱WORDPRESS添加前台会员注册
  • 商业网站模板中国字体设计网站
  • 做网站闵行网站建设中英语
  • 写作网站大全如何简单制作生理盐水
  • 云南网站建设维护互联网广告是做什么的
  • 网站 谁建设 谁负责做网站项目
  • 网站建设子栏目怎么弄海口专门做网站
  • 网站建设 温州建设网上银行个人网上银行登
  • 黄页网站推广方案wordpress 压缩插件
  • 网站建设常州网站简介 title
  • 惠州市网站建设个人深圳网站优化价格
  • 营销型网站工程专业网站开发公司
  • 两个路由器做双网站西安关键词优化服务
  • 企业建站系统信息远象建设 网站
  • 移动建站平台物业管理系统app
  • 济南网站建设多少钱郑州公司做网站
  • 在阿里云网站建设wordpress模板如何修改字体
  • 网站推广方案设计购物网站模块例子
  • 潍坊网站定制公司网站图片放大特效怎么做的
  • 淘宝店铺买卖湘潭seo优化价格
  • 最好的网站建设用途合肥企业网站建设
  • 计算机编程与网站建设好玩的网页传奇
  • 商务网站建设找哪家本地推广找哪些网站
  • 手机h5网站企业网站管理系统的运维服务