X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=jpeg_frame_view.h;h=d0cd47c200833a961469fd0b1522f3c928268d1d;hb=56ad3ab910de5679cba6f110d287e8bad9ecc5cf;hp=5ef68d01cb56d50ef7b1677455e2a7fc75fad4a0;hpb=c015224d38abb896d92c55f1b4517f0600828f68;p=nageru diff --git a/jpeg_frame_view.h b/jpeg_frame_view.h index 5ef68d0..d0cd47c 100644 --- a/jpeg_frame_view.h +++ b/jpeg_frame_view.h @@ -11,18 +11,15 @@ #include #include +#include + +#include "jpeg_frame.h" struct JPEGID { unsigned stream_idx; int64_t pts; bool interpolated; }; -struct Frame { - std::unique_ptr y, cb, cr; - unsigned width, height; - unsigned chroma_subsampling_x, chroma_subsampling_y; - unsigned pitch_y, pitch_chroma; -}; enum CacheMissBehavior { DECODE_IF_NOT_IN_CACHE, RETURN_NULLPTR_IF_NOT_IN_CACHE @@ -48,6 +45,8 @@ public: void setDecodedFrame(std::shared_ptr frame); void set_overlay(const std::string &text); // Blank for none. + static void shutdown(); + signals: void clicked(); @@ -58,18 +57,26 @@ protected: private: // The stream index of the latest frame we displayed. - unsigned current_stream_idx; + unsigned current_stream_idx = 0; - std::unique_ptr chain; + std::unique_ptr planar_chain; std::shared_ptr current_frame; // So that we hold on to the pixels. - movit::YCbCrInput *ycbcr_input; + movit::YCbCrInput *ycbcr_planar_input; movit::YCbCrFormat ycbcr_format; - static constexpr int overlay_width = 16, overlay_height = 16; + std::unique_ptr semiplanar_chain; + movit::YCbCrInput *ycbcr_semiplanar_input; + + static constexpr int overlay_base_width = 16, overlay_base_height = 16; + int overlay_width = overlay_base_width, overlay_height = overlay_base_height; std::unique_ptr overlay_image; // If nullptr, no overlay. std::unique_ptr overlay_chain; // Just to get the overlay on screen in the easiest way possible. movit::FlatInput *overlay_input; bool overlay_input_needs_refresh = false; + + int gl_width, gl_height; + + static std::thread jpeg_decoder_thread; }; #endif // !defined(_JPEG_FRAME_VIEW_H)