SDL播放YUV----单帧
用到的项目:Tocy-Android-SDLv2
C中的 入口: main.c as_lesson_XXX.c
bmp_main :
在C中定义文件的路径: char *filepath = "/sdcard/hello_world.bmp"; (貌似可以直接调用)
SDL 初始化: 图像,视频他初始化3个,音频只初始化SDL_INIT_AUDIO。
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)
创建窗口 和渲染器
SDL_CreateWindow SDL_CreateRenderer (图片,YUV都是一样的参数)
图片:SDL_CreateWindow("Hello World!", 100, 100, 640, 480,SDL_WINDOW_SHOWN);
YUV:SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
音频:不需要
加载资源
图像加载: SDL_Surface * bmp = SDL_LoadBMP(filepath); 自带的API
YUV加载: load_yuv(yuv_path) //自己写的加载YUV方法
创建纹理texture
图片:SDL_CreateTextureFromSurface(render, bmp);
YUV:texture_create();——SDL_CreateTexture(render, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, w, h);
创建纹理时候要选择合适的纹理格式来装,如: SDL_PIXELFORMAT_IYUV、SDL_PIXELFORMAT_YV12、
设置填充(更新)纹理数据
1,用SDL的API接口 SDL_UpdateTexture(SDL_Texture* texture, const SDL_Rect* rect, const void* pixels, int pitch)
例子:SDL_UpdateTexture( m_pTexture, NULL, YUV_pBuffer, m_nWidth);
一般第二个是空,更新整个区域,第三个是一个YUV帧数据大小,第四是一行(长)的数据。
2,用TONY自己建的。texture_update() ------SDL_LockTexture锁住,复制完再SDL_UnlockTexture解锁纹理
复制显示纹理到渲染器
SDL_RenderClear(render);
SDL_RenderCopy(render, texture, NULL, NULL);
SDL_RenderPresent(render); //显示
int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * srcrect, const SDL_Rect * dstrect);
參数的含义例如以下。
renderer:渲染目标。
texture:输入纹理。
srcrect:选择输入纹理的一块矩形区域作为输入。设置为NULL的时候整个纹理作为输入。
dstrect:选择渲染目标的一块矩形区域作为输出。设置为NULL的时候整个渲染目标作为输出。
总结:
1,播放YUV时候,是不能获取视频的长和高的,要手动填写参数输入。YUV数据没有分辨率信息。
2,要给播放器提供你的YUV格式,一般是yuv420P都支持。SDL支持的格式在SDL_pixels.h
3,待优化:
竖屏时候窗口不能适应,只显示一半,切到横屏时候,拉伸全部。
路径参数是固定的,应该在java层传入 比较好。
4,帧率。 YUV没有帧率控制,它是所有的帧叠加在一起。 比如一共有90帧。
如果你以10帧播放,那么能放9s ,30帧播放,3s 就放完了。
TONY的demo播放视频只是放一帧而已……test_720x576.yuv
720X576 一帧的大小 720X576X1.5 = 622080字节 = 607.5KB
5, 转了一帧YUV数据播放是绿屏, 一看数据,都是00 ,没数据的。
看来要自己用FFmpeg转 查看FFMPEG转 YUV.note
用自己转的然后播放720的YUV帧,OK
6,全屏还会有状态栏。加上这句
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
SDL播放YUV----单帧的更多相关文章
- SDL播放YUV——循环
#include "SDL.h" #include "as_lesson_log.h" #define PATH_YUV420 "/sdcard/ou ...
- FFMPEG学习----使用SDL播放YUV数据
命令行下配置: G:\Coding\Video\SDL\proj>tree /F 文件夹 PATH 列表 卷序列号为 0FD5-0CC8 G:. │ sdl.cpp │ SDL2.dll │ S ...
- 【转载】使用SDL播放YUV图像数据(转)
SDL提供了针对YUV格式数据的直接写屏操作.废话不多说,直接上代码吧/** * file showyuv.c * author: rare * date: 2009/12/06 * email: d ...
- SDL 开发实战(六): 使用 SDL 实现 YUV 播放器
前面铺垫了这么多,现在终于进入核心的主题了,那就是使用SDL播放视频,本节我们将使用SDL播放YUV视频,也就是做一个YUV播放器. 下面说明一下使用SDL播放YUV视频的基本流程,主要分为两大部分: ...
- 最简单的视音频播放示例2:GDI播放YUV, RGB
前一篇文章对“Simplest Media Play”工程作了概括性介绍.后续几篇文章打算详细介绍每个子工程中的几种技术.在记录Direct3D,OpenGL这两种相对复杂的技术之前,打算先记录一种和 ...
- 最简单的视音频播放示例3:Direct3D播放YUV,RGB(通过Surface)
上一篇文章记录了GDI播放视频的技术.打算接下来写两篇文章记录Direct3D(简称D3D)播放视频的技术.Direct3D应该Windows下最常用的播放视频的技术.实际上视频播放只是Direct3 ...
- 最简单的视音频播放演示样例3:Direct3D播放YUV,RGB(通过Surface)
===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...
- SDL开发笔记(二):音频基础介绍、使用SDL播放音频
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- MFC中使用SDL播放音频没有声音的解决方法
本文所说的音频是指的纯音频,不包含视频的那种. 在控制台中使用SDL播放音频,一般情况下不会有问题. 但是在MFC中使用SDL播放音频的时候,会出现没有声音的情况.经过长时间探索,没有找到特别好的解决 ...
随机推荐
- 低版本IDE 打开 高版本 IDE 代码时 unit
可以用单元别名 比如Vcl.Forms=Forms 来兼容.
- .net core WebApi ManualResetEvent实现并发同步
ManualResetEvent,即手动重置事件,通过信号量来判别当前线程是否应该阻塞或继续执行.使用方式与ManualResetEventSlim差不多,ManualResetEventSlim只是 ...
- css 技巧 (持续更新)
1.滚动条样式 /*自定义滚动条-----隐藏型*/ .scroll::-webkit-scrollbar-track{ border-radius: 1px; } .scroll::-w ...
- 开发工具IntelliJ IDEA的安装与操作
开发工具IntelliJ IDEA的安装与操作 1.1 开发工具概述 IDEA是一个专门针对Java的集成开发工具(IDE),它可以极大地提升我们的开发效率.可以自动编译,检查错误.在公司中,使用的就 ...
- alibaba/druid 下的 密码加密
使用ConfigFilter cliangch edited this page on 3 Feb · 12 revisions ConfigFilter的作用包括: 从配置文件中读取配置 从远程ht ...
- SharePoint Framework 基于团队的开发(二)
博客地址:http://blog.csdn.net/FoxDave 本篇介绍SPFx项目的一般开发流程.SharePoint Framework基于开源的工具链,也遵循开源技术栈中其他项目的开发流程. ...
- zookeeper分布式服务中选主的应用
通常zookeeper在分布式服务中作为注册中心,实际上它还可以办到很多事.比如分布式队列.分布式锁 由于公司服务中有很多定时任务,而这些定时任务由于一些历史原因暂时不能改造成框架调用 于是想到用zo ...
- ARM内核单片机Bootloader中断向量重定位问题
Bootloader中断向量重定位问题 1.Bootloader程序在内核Cortex-M0+内核中运行时需要进行地址跳转执行应用程序主程序,此时就涉及到了中断向量重定位问题,以下截图为单片机启动文件 ...
- nginx 添加代理
1 确认安装路径 ps aux | grep nginx 2.进入配置目录 3.使用vi编辑配置文件 如果是新增,可以参考其他配置,5yy复制相应行,p粘贴,然后修改内容后:wq保存退出 4.验证配置 ...
- Ubuntu 修改sudoers之后无法用sudo怎么恢复
进入终端 键入 pkexec visudo 修改sudoer.temp 实例如下 ## This file MUST be edited with the 'visudo' command as ro ...