diff options
-rw-r--r-- | player/playloop.c | 4 | ||||
-rw-r--r-- | player/video.c | 3 | ||||
-rw-r--r-- | video/out/vo.c | 12 | ||||
-rw-r--r-- | video/out/vo.h | 2 |
4 files changed, 12 insertions, 9 deletions
diff --git a/player/playloop.c b/player/playloop.c index 1a0f8fbdd5..fc55b9bf05 100644 --- a/player/playloop.c +++ b/player/playloop.c @@ -848,8 +848,10 @@ void handle_force_window(struct MPContext *mpctx, bool reconfig) MP_INFO(mpctx, "Creating non-video VO window.\n"); // Pick whatever works int config_format = 0; + uint8_t fmts[IMGFMT_END - IMGFMT_START] = {0}; + vo_query_formats(vo, fmts); for (int fmt = IMGFMT_START; fmt < IMGFMT_END; fmt++) { - if (vo_query_format(vo, fmt)) { + if (fmts[fmt - IMGFMT_START]) { config_format = fmt; break; } diff --git a/player/video.c b/player/video.c index d2210b691d..21b8e58f3a 100644 --- a/player/video.c +++ b/player/video.c @@ -88,8 +88,7 @@ void update_fps(struct MPContext *mpctx) static void set_allowed_vo_formats(struct vf_chain *c, struct vo *vo) { - for (int fmt = IMGFMT_START; fmt < IMGFMT_END; fmt++) - c->allowed_output_formats[fmt - IMGFMT_START] = vo_query_format(vo, fmt); + vo_query_formats(vo, c->allowed_output_formats); } static int try_filter(struct MPContext *mpctx, struct mp_image_params params, diff --git a/video/out/vo.c b/video/out/vo.c index 82da6b5369..b7b017138d 100644 --- a/video/out/vo.c +++ b/video/out/vo.c @@ -782,15 +782,17 @@ static void run_query_format(void *p) { void **pp = p; struct vo *vo = pp[0]; - *(int *)pp[2] = vo->driver->query_format(vo, *(int *)pp[1]); + uint8_t *list = pp[1]; + for (int format = IMGFMT_START; format < IMGFMT_END; format++) + list[format - IMGFMT_START] = vo->driver->query_format(vo, format); } -int vo_query_format(struct vo *vo, int format) +// For each item in the list (allocated as uint8_t[IMGFMT_END - IMGFMT_START]), +// set the supported format flags. +void vo_query_formats(struct vo *vo, uint8_t *list) { - int ret; - void *p[] = {vo, &format, &ret}; + void *p[] = {vo, list}; mp_dispatch_run(vo->in->dispatch, run_query_format, p); - return ret; } // Calculate the appropriate source and destination rectangle to diff --git a/video/out/vo.h b/video/out/vo.h index 3d4d654738..383f47c7d7 100644 --- a/video/out/vo.h +++ b/video/out/vo.h @@ -319,7 +319,7 @@ void vo_seek_reset(struct vo *vo); void vo_destroy(struct vo *vo); void vo_set_paused(struct vo *vo, bool paused); int64_t vo_get_drop_count(struct vo *vo); -int vo_query_format(struct vo *vo, int format); +void vo_query_formats(struct vo *vo, uint8_t *list); void vo_event(struct vo *vo, int event); int vo_query_and_reset_events(struct vo *vo, int events); |