【转载】使用SDL播放YUV图像数据(转)
/**
* file showyuv.c
* author: rare
* date: 2009/12/06
* email: dux003#163.com
*/
#include <stdlib.h>
#include "SDL.h"
int main(int argc , char* argv[])
{
int i = 1;
int x, y;
int w = 176;
int h = 144;
char c = 'n';
FILE* fp;
char filename[64];
unsigned char* pY;
unsigned char* pU;
unsigned char* pV;
SDL_Rect rect;
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
fprintf(stderr, "can not initialize SDL:%s\n", SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
SDL_Surface* screen = SDL_SetVideoMode(w, h, 0, 0);
if (screen == NULL)
{
fprintf(stderr, "create surface error!\n");
exit(1);
}
SDL_Overlay* verlay = SDL_CreateYUVOverlay(w, h, SDL_YV12_OVERLAY, screen);
if (overlay == NULL)
{
fprintf(stderr, "create overlay error!\n");
exit(1);
}
printf("w:%d, h:%d, planes:%d\n", overlay->w, overlay->h, overlay->planes);
printf("pitches:%d, %d, %d\n", overlay->pitches[0], overlay->pitches[1], overlay->pitches[2]);
pY = (unsigned char*)malloc(w*h);
pU = (unsigned char*)malloc(w*h/4);
pV = (unsigned char*)malloc(w*h/4);
while (i<=96)
{
SDL_LockSurface(screen);
SDL_LockYUVOverlay(overlay);
sprintf(filename, "./carphone/carphone%03d.yuv", i);
printf("%s\n", filename);
fp = fopen(filename, "rb");
if (fp == NULL)
{
fprintf(stderr, "open file error!\n");
exit(1);
}
fread(pY, 1, w*h, fp);
fread(pU, 1, w*h/4, fp);
fread(pV, 1, w*h/4, fp);
memcpy(overlay->pixels[0], pY, w*h);
memcpy(overlay->pixels[1], pV, w*h/4);
memcpy(overlay->pixels[2], pU, w*h/4);
fclose(fp);
SDL_UnlockYUVOverlay(overlay);
SDL_UnlockSurface(screen);
rect.w = w;
rect.h = h;
rect.x = rect.y = 0;
SDL_DisplayYUVOverlay(overlay, &rect);
SDL_Delay(40);
i += 1;
}
free(pY);
free(pU);
free(pV);
while (c != 'q')
scanf("%c", &c);
SDL_FreeYUVOverlay(overlay);
SDL_FreeSurface(screen);
return 0;
}
其中测试序列是我在网上找的,url链接为:http://www.cipr.rpi.edu/resource/sequences/sequences/qcif/yuv/qcif_yuv_carphone.zip
代码比较粗糙,有改进意见的欢迎发邮件给我,其它的就免了
【转载】使用SDL播放YUV图像数据(转)的更多相关文章
- FFMPEG学习----使用SDL播放YUV数据
命令行下配置: G:\Coding\Video\SDL\proj>tree /F 文件夹 PATH 列表 卷序列号为 0FD5-0CC8 G:. │ sdl.cpp │ SDL2.dll │ S ...
- SDL播放YUV——循环
#include "SDL.h" #include "as_lesson_log.h" #define PATH_YUV420 "/sdcard/ou ...
- SDL 开发实战(六): 使用 SDL 实现 YUV 播放器
前面铺垫了这么多,现在终于进入核心的主题了,那就是使用SDL播放视频,本节我们将使用SDL播放YUV视频,也就是做一个YUV播放器. 下面说明一下使用SDL播放YUV视频的基本流程,主要分为两大部分: ...
- OpenCV Mat格式存储YUV图像
YUV图像用的比较多,而且YUV图像的格式众多(YUV格式可以参考YUV pixel formats),如何用OpenCV的Mat类型来存储YUV图像也是经常遇到的问题. 对于YUV444图像来说,就 ...
- RGB图像数据字符叠加,图像压缩(ijl库),YUV转RGB
jackyhwei 发布于 2010-01-01 12:02 点击:3218次 来自:CSDN.NET 一些非常有用的图像格式转换及使用的源代码,包括RGB图像数据字符叠加,图像压缩(ijl库),Y ...
- luvcview,使用mplayer查看摄像头和luvcview保存YUV图像视频的播放(转)
luvcview,使用mplayer查看摄像头和luvcview保存YUV图像视频的播放 在mplayer中查看摄像头,可使用如下命令:mplayer tv:// -tv driver=v4l2:in ...
- linux mplayer 播放yuv格式 (转载)
转自:http://blog.csdn.net/ly0303521/article/details/38713791 在mplayer中查看YUV格式的图片或视频,可使用如下命令: mplayer - ...
- SDL播放YUV----单帧
用到的项目:Tocy-Android-SDLv2 C中的 入口: main.c as_lesson_XXX.c bmp_main : 在C中定义文件的路径: char *filepath = &quo ...
- iOS面向编码|iOSVideoToolbox:读写解码回调函数CVImageBufferRef的YUV图像
iOS面向编码|iOSVideoToolbox:读写解码回调函数CVImageBufferRef的YUV图像 本文档基于H.264的解码,介绍读写Video Toolbox解码回调函数参数CVImag ...
随机推荐
- appium问题整理
在刚进入appium的世界时,遇到无数的坑,趟过无数的浑水,现在整理一些常用的报错讯息,供大家参考 1.org.openqa.selenium.remote.UnreachableBrowserExc ...
- Tomcat8远程访问manager,host-manager被拒绝403
Tomcat部署在服务器之后在服务器本地访问manager和host-manager成功(即127.0.0.1:8080或者localhost:8080),但使用测试主机访问tomcat的manage ...
- Tensorflow滑动平均模型tf.train.ExponentialMovingAverage解析
觉得有用的话,欢迎一起讨论相互学习~Follow Me 移动平均法相关知识 移动平均法又称滑动平均法.滑动平均模型法(Moving average,MA) 什么是移动平均法 移动平均法是用一组最近的实 ...
- 开源中文分词工具探析(五):Stanford CoreNLP
CoreNLP是由斯坦福大学开源的一套Java NLP工具,提供诸如:词性标注(part-of-speech (POS) tagger).命名实体识别(named entity recognizer ...
- python函数式编程之装饰器(一)
1.开放封闭原则 简单来说,就是对扩展开放,对修改封闭 在面向对象的编程方式中,经常会定义各种函数. 一个函数的使用分为定义阶段和使用阶段,一个函数定义完成以后,可能会在很多位置被调用 这意味着如果函 ...
- 自用lca模板
人丑常数大,总是卡在1000多ms... #include <cstdio> #include <cstring> #include <iostream> #def ...
- 除了使用URLSearchParams处理axios发送的数据,但是兼容性不好,其他的兼容方法
在使用axios这个ajax插件的时候,我们有些时候会遇到一些问题,比如:数据格式不正确 以最简单的例子为基础(这里使用post方法): 在上面的例子中我们直接调用axios的post方法,传给后台的 ...
- redis requires ruby version 2.2.2的解决方案
在执行gem install redis时 提示: gem install redis ERROR: Error installing redis: redis requires Ruby versi ...
- jQuery源码研究——解决命名冲突
在项目中难免不去使用多个插件,如此一来这些插件就有可能出现一样的名称,当出现同名变量时后一个将会覆盖上一个,这样的话我们就无法同时使用多个插件了. 当遇到这种情况我们可以手动去修改插件源码把它的名字改 ...
- 01-vagrant安装centos7
1. 安装VirtualBox 2. 安装Vagrant 3. 下载 centos-7.0-x86_64.box [安装命令] $ mkdir vagrant $ cd vagrant $ vag ...