36 explicit Impl(SDL_Renderer* renderer)
37 : mutex_(
"SdlManualVideoRenderer"), renderer_(renderer) {
42 std::unique_lock<Mutex> lock(mutex_);
48 std::unique_lock<Mutex> lock(mutex_);
52 double Render(
const SDL_Rect* region) {
53 std::shared_ptr<DecodedFrame>
frame;
56 std::unique_lock<Mutex> lock(mutex_);
57 if (frame && renderer_) {
62 region_shaka = {region->
x, region->y, region->w, region->h};
64 int w = frame->stream_info->width;
65 int h = frame->stream_info->height;
66 SDL_GetRendererOutputSize(renderer_, &w, &h);
67 region_shaka.
x = region_shaka.
y = 0;
74 frame->stream_info->height};
76 frame->stream_info->sample_aspect_ratio,
fill_mode(),
78 SDL_Rect src_sdl = {src.
x, src.
y, src.
w, src.
h};
79 SDL_Rect dest_sdl = {dest.
x, dest.
y, dest.
w, dest.
h};
80 SDL_RenderCopy(renderer_, texture, &src_sdl, &dest_sdl);
90 SDL_Renderer* renderer_;
96 : renderer_(renderer),
99 thread_(
"SdlThreadVideo",
std::bind(&
Impl::ThreadMain, this)) {}
101 shutdown_.store(
true, std::memory_order_relaxed);
109 while (!shutdown_.load(std::memory_order_relaxed)) {
111 renderer_->Render(region_.has_value() ? ®ion_.value() :
nullptr);
112 SDL_RenderPresent(renderer_->GetRenderer());
120 std::atomic<bool> shutdown_;
126 : impl_(new
Impl(renderer)) {}
130 impl_->SetRenderer(renderer);
133 return impl_->GetRenderer();
137 return impl_->Render(region);
141 impl_->SetPlayer(player);
144 impl_->Attach(stream);
150 return impl_->VideoPlaybackQuality();
153 return impl_->SetVideoFillMode(mode);
160 const SDL_Rect* region)
SDL_Texture * Draw(std::shared_ptr< media::DecodedFrame > frame)
std::shared_ptr< shaka::media::DecodedFrame > frame
#define SHAKA_NON_COPYABLE_OR_MOVABLE_TYPE(Type)
void SetRenderer(SDL_Renderer *renderer)
void FitVideoToRegion(ShakaRect< uint32_t > frame, ShakaRect< uint32_t > bounds, Rational< uint32_t > sample_aspect_ratio, VideoFillMode mode, ShakaRect< uint32_t > *src, ShakaRect< uint32_t > *dest)
static const Clock Instance
virtual void SleepSeconds(double seconds) const