SDL入门Demo

2017-07-25  本文已影响585人  大批

:) 本文主要是记录入门SDL的时候遇到的一些问题

侵删

首先要感谢雷神 --


SDL简介


大概梳理一下视频播放的步骤


SDL操作也比较固定(后面贴代码)~

盗一张雷神的图吧

说说Demo主要遇到的问题(IDE是vs2015)


Demo代码吧(里面的yuv文件可以去雷神哪里下载)

#include "stdafx.h"
#include <stdio.h>

extern "C" {

#include "libavcodec\avcodec.h"
#include "libavformat\avformat.h"
#include "libswresample\swresample.h"
#include "libswscale\swscale.h"
    FILE __iob_func[3] = { *stdin,*stdout,*stderr };
#include "SDL.h"
}


const int bpp = 12;
int screen_w = 640, screen_h = 360;
const int pixel_w = 640, pixel_h = 360;

unsigned char buffer[pixel_h * pixel_h * bpp / 8];


int main(int argc, char* argv[]) { //这里的main函数的参数主要是sdl里面也有一个main函数

    //yuv到屏幕的过程
    //SDL Simple DirectMedia Layer
    if (SDL_Init(SDL_INIT_VIDEO)) {
        printf("Could not initialize SDL - %s\n", SDL_GetError());
        return -1;
    }

    SDL_Window *screen;
    //SDL 2.0 Support for multiple windows
    screen = SDL_CreateWindow("Simplest Video Play SDL2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
        screen_w, screen_h, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
    if (!screen) {
        printf("SDL: could not create window - exiting:%s\n", SDL_GetError());
        return -1;
    }
    SDL_Renderer* sdlRenderer = SDL_CreateRenderer(screen, -1, 0);

    Uint32 pixformat = 0;
    //IYUV: Y + U + V  (3 planes)
    //YV12: Y + V + U  (3 planes)
    pixformat = SDL_PIXELFORMAT_IYUV;

    SDL_Texture* sdlTexture = SDL_CreateTexture(sdlRenderer, pixformat, SDL_TEXTUREACCESS_STREAMING, pixel_w, pixel_h);

    FILE *fp = NULL;
    fp = fopen("demo.yuv", "rb+");

    if (fp == NULL) {
        printf("cannot open this file\n");
        return -1;
    }

    SDL_Rect sdlRect;

    while (1) {
        if (fread(buffer, 1, pixel_w*pixel_h*bpp / 8, fp) != pixel_w*pixel_h*bpp / 8) {
            // Loop
            fseek(fp, 0, SEEK_SET);
            fread(buffer, 1, pixel_w*pixel_h*bpp / 8, fp);
        }

        SDL_UpdateTexture(sdlTexture, NULL, buffer, pixel_w);

        sdlRect.x = 0;
        sdlRect.y = 0;
        sdlRect.w = screen_w;
        sdlRect.h = screen_h;

        SDL_RenderClear(sdlRenderer);
        SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, &sdlRect);
        SDL_RenderPresent(sdlRenderer);
        //Delay 40ms
        SDL_Delay(40);

    }
    SDL_Quit();
    return 0;

}

Nothing is certain in this life. The only thing i know for sure is that. I love you and my life. That is the only thing i know. have a good day

上一篇 下一篇

猜你喜欢

热点阅读