用到的项目: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----单帧的更多相关文章

  1. SDL播放YUV——循环

    #include "SDL.h" #include "as_lesson_log.h" #define PATH_YUV420 "/sdcard/ou ...

  2. FFMPEG学习----使用SDL播放YUV数据

    命令行下配置: G:\Coding\Video\SDL\proj>tree /F 文件夹 PATH 列表 卷序列号为 0FD5-0CC8 G:. │ sdl.cpp │ SDL2.dll │ S ...

  3. 【转载】使用SDL播放YUV图像数据(转)

    SDL提供了针对YUV格式数据的直接写屏操作.废话不多说,直接上代码吧/** * file showyuv.c * author: rare * date: 2009/12/06 * email: d ...

  4. SDL 开发实战(六): 使用 SDL 实现 YUV 播放器

    前面铺垫了这么多,现在终于进入核心的主题了,那就是使用SDL播放视频,本节我们将使用SDL播放YUV视频,也就是做一个YUV播放器. 下面说明一下使用SDL播放YUV视频的基本流程,主要分为两大部分: ...

  5. 最简单的视音频播放示例2:GDI播放YUV, RGB

    前一篇文章对“Simplest Media Play”工程作了概括性介绍.后续几篇文章打算详细介绍每个子工程中的几种技术.在记录Direct3D,OpenGL这两种相对复杂的技术之前,打算先记录一种和 ...

  6. 最简单的视音频播放示例3:Direct3D播放YUV,RGB(通过Surface)

    上一篇文章记录了GDI播放视频的技术.打算接下来写两篇文章记录Direct3D(简称D3D)播放视频的技术.Direct3D应该Windows下最常用的播放视频的技术.实际上视频播放只是Direct3 ...

  7. 最简单的视音频播放演示样例3:Direct3D播放YUV,RGB(通过Surface)

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

  8. SDL开发笔记(二):音频基础介绍、使用SDL播放音频

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  9. MFC中使用SDL播放音频没有声音的解决方法

    本文所说的音频是指的纯音频,不包含视频的那种. 在控制台中使用SDL播放音频,一般情况下不会有问题. 但是在MFC中使用SDL播放音频的时候,会出现没有声音的情况.经过长时间探索,没有找到特别好的解决 ...

随机推荐

  1. [数]数学系列预习->补水题ver.

    ---恢复内容开始--- 话说要学反演了,contest一题都搞不定,整理题目暂且搁置,数学笨蛋来学一下数学_(:з」∠)_ ---恢复内容结束--- 是的,预习看了半天教学,没有整理,做题又都不会, ...

  2. Java面试题之多线程打印

    概述 作为程序员经常在面试的时候遇到多线程的问题,我印象比较深刻的就是下面这道题:写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z.打印顺序为12A34B56C……5152Z.看这个题目已 ...

  3. iis设置http重置到https

    http://www.cnblogs.com/tangge/p/4259749.html 1.购买SSL证书,参考:http://www.cnblogs.com/yipu/p/3722135.html ...

  4. IRP小结 0x01 IRP & IO_STACK_LOCATION(结合WRK理解)

    写博客整理记录一下IRP相关的知识点,加深一下印象. 所有的I/O请求都是以IRP的形式提交的.当I/O管理器为了响应某个线程调用的的I/O API的时候,就会构造一个IRP,用于在I/O系统处理这个 ...

  5. GMT5 install

    there are two imporant modules called gshhg and dcw when installing GMT5; try to state the locations ...

  6. 集成学习-Adaboost

    Adaboost 中文名叫自适应提升算法,是一种boosting算法. boosting算法的基本思想 对于一个复杂任务来说,单个专家的决策过于片面,需要集合多个专家的决策得到最终的决策,通俗讲就是三 ...

  7. RPC 知识科普一下

    RPC概念及分类 RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”.目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用 ...

  8. 转载:入门Webpack,看这篇就够了

    写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段 ...

  9. 关于手机ios和安卓和pc的点击事件的兼容

    var u = navigator.userAgent, app = navigator.appVersion; var clickEvent; var isAndroid = u.indexOf(' ...

  10. Linux 登陆配置读取顺序

    Linux用户在登陆到Linux服务器时,一些登陆的提示欢迎信息,以及特定的环境配置等等都按预先设定好的配置来生效.Linux中的这个shell环境会读取很多不同的配置文件来达成上述目的,同时还有登陆 ...