diff options
-rw-r--r-- | video/mp_image.c | 22 | ||||
-rw-r--r-- | video/mp_image.h | 3 |
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); |