summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--video/mp_image.c22
-rw-r--r--video/mp_image.h3
2 files changed, 25 insertions, 0 deletions
diff --git a/video/mp_image.c b/video/mp_image.c
index 3bc76b669e..9b96bab67d 100644
--- a/video/mp_image.c
+++ b/video/mp_image.c
@@ -36,6 +36,8 @@
#include "memcpy_pic.h"
#include "fmt-conversion.h"
+#include "video/filter/vf.h"
+
#if HAVE_PTHREADS
#include <pthread.h>
static pthread_mutex_t refcount_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -468,6 +470,26 @@ void mp_image_set_params(struct mp_image *image,
image->chroma_location = params->chroma_location;
}
+// Set most image parameters, but not image format or size.
+// Display size is used to set the PAR.
+void mp_image_set_attributes(struct mp_image *image,
+ const struct mp_image_params *params)
+{
+ struct mp_image_params nparams = *params;
+ nparams.imgfmt = image->imgfmt;
+ nparams.w = image->w;
+ nparams.h = image->h;
+ if (nparams.imgfmt != params->imgfmt)
+ mp_image_params_guess_csp(&nparams);
+ if (nparams.w != params->w || nparams.h != params->h) {
+ if (nparams.d_w && nparams.d_h) {
+ vf_rescale_dsize(&nparams.d_w, &nparams.d_h,
+ params->w, params->h, nparams.w, nparams.h);
+ }
+ }
+ mp_image_set_params(image, &nparams);
+}
+
void mp_image_set_colorspace_details(struct mp_image *image,
struct mp_csp_details *csp)
{
diff --git a/video/mp_image.h b/video/mp_image.h
index e198c4e547..f7e7353475 100644
--- a/video/mp_image.h
+++ b/video/mp_image.h
@@ -153,6 +153,9 @@ void mp_image_params_from_image(struct mp_image_params *params,
void mp_image_set_params(struct mp_image *image,
const struct mp_image_params *params);
+void mp_image_set_attributes(struct mp_image *image,
+ const struct mp_image_params *params);
+
struct AVFrame;
void mp_image_copy_fields_from_av_frame(struct mp_image *dst,
struct AVFrame *src);