Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/videolan/dav1d.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/dav1dplay.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/examples/dav1dplay.c b/examples/dav1dplay.c
index faf51e7..0bdea05 100644
--- a/examples/dav1dplay.c
+++ b/examples/dav1dplay.c
@@ -28,6 +28,7 @@
#include "vcs_version.h"
#include <getopt.h>
+#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
@@ -48,6 +49,7 @@
*/
typedef struct {
const char *inputfile;
+ int highquality;
} Dav1dPlaySettings;
#define WINDOW_WIDTH 910
@@ -156,7 +158,7 @@ typedef struct rdr_info
// Callback to destroy the renderer
void (*destroy_renderer)(void *cookie);
// Callback to the render function that renders a prevously sent frame
- void (*render)(void *cookie);
+ void (*render)(void *cookie, const Dav1dPlaySettings *settings);
// Callback to the send frame function
int (*update_frame)(void *cookie, Dav1dPicture *dav1d_pic);
} Dav1dPlayRenderInfo;
@@ -325,7 +327,7 @@ static void placebo_renderer_destroy(void *cookie)
pl_context_destroy(&(rd_priv_ctx->ctx));
}
-static void placebo_render(void *cookie)
+static void placebo_render(void *cookie, const Dav1dPlaySettings *settings)
{
Dav1dPlayRendererPrivateContext *rd_priv_ctx = cookie;
assert(rd_priv_ctx != NULL);
@@ -358,8 +360,9 @@ static void placebo_render(void *cookie)
.height = img->params.h,
};
- struct pl_render_params render_params = pl_render_default_params;
- //render_params.upscaler = &pl_filter_ewa_lanczos;
+ struct pl_render_params render_params = {0};
+ if (settings->highquality)
+ render_params = pl_render_default_params;
struct pl_render_target target;
pl_render_target_from_swapchain(&target, &frame);
@@ -516,7 +519,7 @@ static void sdl_renderer_destroy(void *cookie)
free(rd_priv_ctx);
}
-static void sdl_render(void *cookie)
+static void sdl_render(void *cookie, const Dav1dPlaySettings *settings)
{
Dav1dPlayRendererPrivateContext *rd_priv_ctx = cookie;
assert(rd_priv_ctx != NULL);
@@ -649,6 +652,7 @@ static void dp_settings_print_usage(const char *const app,
" --input/-i $file: input file\n"
" --framethreads $num: number of frame threads (default: 1)\n"
" --tilethreads $num: number of tile threads (default: 1)\n"
+ " --highquality: enable high quality rendering\n"
" --version/-v: print version and exit\n");
exit(1);
}
@@ -677,6 +681,7 @@ static void dp_rd_ctx_parse_args(Dav1dPlayRenderContext *rd_ctx,
enum {
ARG_FRAME_THREADS = 256,
ARG_TILE_THREADS,
+ ARG_HIGH_QUALITY,
};
// Long options
@@ -685,6 +690,7 @@ static void dp_rd_ctx_parse_args(Dav1dPlayRenderContext *rd_ctx,
{ "version", 0, NULL, 'v' },
{ "framethreads", 1, NULL, ARG_FRAME_THREADS },
{ "tilethreads", 1, NULL, ARG_TILE_THREADS },
+ { "highquality", 0, NULL, ARG_HIGH_QUALITY },
{ NULL, 0, NULL, 0 },
};
@@ -696,6 +702,12 @@ static void dp_rd_ctx_parse_args(Dav1dPlayRenderContext *rd_ctx,
case 'v':
fprintf(stderr, "%s\n", dav1d_version());
exit(0);
+ case ARG_HIGH_QUALITY:
+ settings->highquality = true;
+#ifndef HAVE_PLACEBO_VULKAN
+ fprintf(stderr, "warning: --highquality requires libplacebo\n");
+#endif
+ break;
case ARG_FRAME_THREADS:
lib_settings->n_frame_threads =
parse_unsigned(optarg, ARG_FRAME_THREADS, argv[0]);
@@ -862,7 +874,7 @@ static void dp_rd_ctx_render(Dav1dPlayRenderContext *rd_ctx)
fprintf(stderr, "Frame displayed %f seconds too late\n", wait_time/(float)1000);
}
- renderer_info.render(rd_ctx->rd_priv);
+ renderer_info.render(rd_ctx->rd_priv, &rd_ctx->settings);
rd_ctx->last_ticks = SDL_GetTicks();
}