1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
#define AL_LOG_SECTION "renderer_momo"
#include <al/log.h>
#include "renderer_momo.h"
#include "queue_momo.h"
static void renderer_momo_resize(struct camu_renderer *renderer, u32 *width, u32 *height)
{
struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer;
(void)mr;
(void)width;
(void)height;
}
static void renderer_momo_set(struct camu_renderer *renderer, u8 option, u8 value)
{
struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer;
(void)mr;
(void)option;
(void)value;
}
static bool renderer_momo_create_renderer(struct camu_renderer *renderer, u32 *width, u32 *height,
#if defined STELA_API_OPENGL
#ifdef STELA_USE_EGL
EGLDisplay display,
EGLContext context,
#endif
void (*get_gl_proc_address(char const *))(void),
bool (*gl_load_loader)(void *),
bool (*gl_make_current)(void *),
void (*gl_release_current)(void *),
void (*gl_swap_buffers)(void *),
#endif
void *priv)
{
struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer;
(void)width;
(void)height;
#if defined STELA_API_OPENGL
#ifdef STELA_USE_EGL
(void)display;
(void)context;
#endif
(void)get_gl_proc_address;
(void)gl_load_loader;
MOMO_Init(&mr->mmr, gl_make_current, gl_release_current, gl_swap_buffers, priv);
#endif
#ifdef CAMU_HAVE_SUBTITLES
mr->ass = ass_library_init();
// Just to keep these linked in the exe for platform testing.
ASS_Renderer *ar = ass_renderer_init(mr->ass);
ASS_Track *at = ass_new_track(mr->ass);
u32 w = *width, h = *height;
ass_set_frame_size(ar, w, h);
ass_set_storage_size(ar, w, h);
ass_set_fonts(ar, NULL, NULL, ASS_FONTPROVIDER_AUTODETECT, NULL, 0);
ass_set_hinting(ar, ASS_HINTING_NONE);
ass_free_track(at);
ass_renderer_done(ar);
#endif
return true;
}
static struct camu_frame_queue *renderer_momo_create_queue(struct camu_renderer *renderer)
{
struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer;
struct camu_frame_queue *q = camu_frame_queue_momo_create();
struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)q;
(void)mr;
(void)mq;
return q;
}
static void renderer_momo_add_font(struct camu_renderer *renderer, struct camu_codec_stream *attachment)
{
struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer;
(void)mr;
(void)attachment;
}
static u32 renderer_momo_get_latency(struct camu_renderer *renderer)
{
(void)renderer;
return 0;
}
static bool renderer_momo_render(struct camu_renderer *renderer, struct camu_screen *scr, bool force)
{
struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer;
(void)scr;
(void)force;
MOMO_Render(&mr->mmr);
return true;
}
static void renderer_momo_free(struct camu_renderer **renderer)
{
struct camu_renderer_momo *mr = (struct camu_renderer_momo *)*renderer;
#ifdef CAMU_HAVE_SUBTITLES
if (mr->ass) ass_library_done(mr->ass);
#endif
al_free(mr);
*renderer = NULL;
}
struct camu_renderer *camu_renderer_momo_create(void)
{
struct camu_renderer_momo *mr = al_alloc_object(struct camu_renderer_momo);
mr->r.create_renderer = renderer_momo_create_renderer;
mr->r.create_queue = renderer_momo_create_queue;
mr->r.add_font = renderer_momo_add_font;
mr->r.get_latency = renderer_momo_get_latency;
mr->r.resize = renderer_momo_resize;
mr->r.set = renderer_momo_set;
mr->r.render = renderer_momo_render;
mr->r.free = renderer_momo_free;
return (struct camu_renderer *)mr;
}
|