Created
February 20, 2017 20:18
-
-
Save mkosler/60e56a9d62e66e6a9fa1e6e82cf95447 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdlib> | |
#include <iostream> | |
#include <SDL.h> | |
#include <theoraplayer\TheoraPlayer.h> | |
int main(int argc, char *argv[]) | |
{ | |
if (SDL_Init(SDL_INIT_VIDEO)) { | |
std::cerr << "Failed to initialize SDL: " << SDL_GetError() << std::endl; | |
return EXIT_FAILURE; | |
} | |
auto manager = new TheoraVideoManager(); | |
auto clip = manager->createVideoClip("[[[ FILEPATH HERE ]]]", TH_RGB, 16); | |
auto window = SDL_CreateWindow("SDLTheoraPlayer", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, | |
clip->getWidth(), clip->getHeight(), 0); | |
if (window == nullptr) { | |
std::cerr << "Failed to create window: " << SDL_GetError() << std::endl; | |
delete manager; | |
SDL_Quit(); | |
return EXIT_FAILURE; | |
} | |
auto renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); | |
if (renderer == nullptr) { | |
std::cerr << "Failed to create renderer: " << SDL_GetError() << std::endl; | |
delete manager; | |
SDL_DestroyWindow(window); | |
SDL_Quit(); | |
return EXIT_FAILURE; | |
} | |
auto texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB24, SDL_TEXTUREACCESS_STREAMING, clip->getWidth(), | |
clip->getHeight()); | |
if (texture == nullptr) { | |
std::cerr << "Failed to create texture: " << SDL_GetError() << std::endl; | |
delete manager; | |
SDL_DestroyRenderer(renderer); | |
SDL_DestroyWindow(window); | |
SDL_Quit(); | |
return EXIT_FAILURE; | |
} | |
auto quit = false; | |
SDL_Event e; | |
Uint32 now = SDL_GetTicks(), last = 0; | |
while (!quit) { | |
last = now; | |
now = SDL_GetTicks(); | |
const float dt = (float)(now - last) / 1000.0f; | |
manager->update(dt); | |
SDL_PollEvent(&e); | |
switch (e.type) { | |
case SDL_QUIT: | |
quit = true; | |
break; | |
case SDL_KEYDOWN: | |
if (e.key.keysym.sym == SDLK_ESCAPE) quit = true; | |
break; | |
} | |
auto frame = clip->getNextFrame(); | |
if (frame != nullptr) { | |
void *pixels; | |
int pitch; | |
SDL_LockTexture(texture, nullptr, &pixels, &pitch); | |
memcpy(pixels, frame->getBuffer(), sizeof(Uint8) * pitch * frame->getHeight()); | |
SDL_UnlockTexture(texture); | |
clip->popFrame(); | |
} | |
SDL_RenderClear(renderer); | |
SDL_RenderCopy(renderer, texture, nullptr, nullptr); | |
SDL_RenderPresent(renderer); | |
} | |
delete manager; | |
SDL_DestroyTexture(texture); | |
SDL_DestroyRenderer(renderer); | |
SDL_DestroyWindow(window); | |
SDL_Quit(); | |
return EXIT_SUCCESS; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment