6298ef095f
When the scrcpy window is minimized on Windows with D3D9, texture creation and update fail. In that case, do not terminate scrcpy. Instead, store the pending size or frame to update, to attempt again during the next update or rendering. Fixes #3947 <https://github.com/Genymobile/scrcpy/issues/3947>
60 lines
1.2 KiB
C
60 lines
1.2 KiB
C
#ifndef SC_DISPLAY_H
|
|
#define SC_DISPLAY_H
|
|
|
|
#include "common.h"
|
|
|
|
#include <stdbool.h>
|
|
#include <libavformat/avformat.h>
|
|
#include <SDL2/SDL.h>
|
|
|
|
#include "coords.h"
|
|
#include "opengl.h"
|
|
|
|
#ifdef __APPLE__
|
|
# define SC_DISPLAY_FORCE_OPENGL_CORE_PROFILE
|
|
#endif
|
|
|
|
struct sc_display {
|
|
SDL_Renderer *renderer;
|
|
SDL_Texture *texture;
|
|
|
|
struct sc_opengl gl;
|
|
#ifdef SC_DISPLAY_FORCE_OPENGL_CORE_PROFILE
|
|
SDL_GLContext *gl_context;
|
|
#endif
|
|
|
|
bool mipmaps;
|
|
|
|
struct {
|
|
#define SC_DISPLAY_PENDING_FLAG_SIZE 1
|
|
#define SC_DISPLAY_PENDING_FLAG_FRAME 2
|
|
int8_t flags;
|
|
struct sc_size size;
|
|
AVFrame *frame;
|
|
} pending;
|
|
};
|
|
|
|
enum sc_display_result {
|
|
SC_DISPLAY_RESULT_OK,
|
|
SC_DISPLAY_RESULT_PENDING,
|
|
SC_DISPLAY_RESULT_ERROR,
|
|
};
|
|
|
|
bool
|
|
sc_display_init(struct sc_display *display, SDL_Window *window, bool mipmaps);
|
|
|
|
void
|
|
sc_display_destroy(struct sc_display *display);
|
|
|
|
enum sc_display_result
|
|
sc_display_set_texture_size(struct sc_display *display, struct sc_size size);
|
|
|
|
enum sc_display_result
|
|
sc_display_update_texture(struct sc_display *display, const AVFrame *frame);
|
|
|
|
enum sc_display_result
|
|
sc_display_render(struct sc_display *display, const SDL_Rect *geometry,
|
|
unsigned rotation);
|
|
|
|
#endif
|