From 5e4e248dc200606e75bc382bebe045afc1962571 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 20 Apr 2014 21:27:45 +0200 Subject: video: make mp_image use mp_image_params directly Minor cleanup, so that we can stuff more information into mp_image_params later. --- video/mp_image.c | 63 ++++++++++++++++++++------------------------------------ 1 file changed, 22 insertions(+), 41 deletions(-) (limited to 'video/mp_image.c') diff --git a/video/mp_image.c b/video/mp_image.c index b9a15de409..6329e408cf 100644 --- a/video/mp_image.c +++ b/video/mp_image.c @@ -152,6 +152,7 @@ static void mp_image_alloc_planes(struct mp_image *mpi) void mp_image_setfmt(struct mp_image *mpi, int out_fmt) { struct mp_imgfmt_desc fmt = mp_imgfmt_get_desc(out_fmt); + mpi->params.imgfmt = fmt.id; mpi->fmt = fmt; mpi->flags = fmt.flags; mpi->imgfmt = fmt.id; @@ -179,8 +180,9 @@ void mp_image_set_size(struct mp_image *mpi, int w, int h) if (w >= (1 << 14) || h >= (1 << 14) || w < 0 || h < 0) abort(); - mpi->w = mpi->display_w = w; - mpi->h = mpi->display_h = h; + mpi->w = mpi->params.w = w; + mpi->h = mpi->params.h = h; + mp_image_set_display_size(mpi, mpi->w, mpi->h); for (int n = 0; n < mpi->num_planes; n++) { mpi->plane_w[n] = mp_chroma_div_up(mpi->w, mpi->fmt.xs[n]); mpi->plane_h[n] = mp_chroma_div_up(mpi->h, mpi->fmt.ys[n]); @@ -191,10 +193,22 @@ void mp_image_set_size(struct mp_image *mpi, int w, int h) void mp_image_set_display_size(struct mp_image *mpi, int dw, int dh) { + mpi->params.d_w = dw; + mpi->params.d_h = dh; mpi->display_w = dw; mpi->display_h = dh; } +void mp_image_set_params(struct mp_image *image, + const struct mp_image_params *params) +{ + image->params = *params; + // possibly reinitialize stuff + mp_image_setfmt(image, params->imgfmt); + mp_image_set_size(image, params->w, params->h); + mp_image_set_display_size(image, params->d_w, params->d_h); +} + struct mp_image *mp_image_alloc(int imgfmt, int w, int h) { struct mp_image *mpi = talloc_zero(NULL, struct mp_image); @@ -349,9 +363,9 @@ void mp_image_copy_attributes(struct mp_image *dst, struct mp_image *src) dst->display_h = src->display_h; } if ((dst->flags & MP_IMGFLAG_YUV) == (src->flags & MP_IMGFLAG_YUV)) { - dst->colorspace = src->colorspace; - dst->levels = src->levels; - dst->chroma_location = src->chroma_location; + dst->params.colorspace = src->params.colorspace; + dst->params.colorlevels = src->params.colorlevels; + dst->params.chroma_location = src->params.chroma_location; } if ((dst->fmt.flags & MP_IMGFLAG_PAL) && (src->fmt.flags & MP_IMGFLAG_PAL)) { if (dst->planes[1] && src->planes[1]) @@ -446,28 +460,7 @@ bool mp_image_params_equals(const struct mp_image_params *p1, void mp_image_params_from_image(struct mp_image_params *params, const struct mp_image *image) { - // (Ideally mp_image should use mp_image_params directly instead) - *params = (struct mp_image_params) { - .imgfmt = image->imgfmt, - .w = image->w, - .h = image->h, - .d_w = image->display_w, - .d_h = image->display_h, - .colorspace = image->colorspace, - .colorlevels = image->levels, - .chroma_location = image->chroma_location, - }; -} - -void mp_image_set_params(struct mp_image *image, - const struct mp_image_params *params) -{ - mp_image_setfmt(image, params->imgfmt); - mp_image_set_size(image, params->w, params->h); - mp_image_set_display_size(image, params->d_w, params->d_h); - image->colorspace = params->colorspace; - image->levels = params->colorlevels; - image->chroma_location = params->chroma_location; + *params = image->params; } // Set most image parameters, but not image format or size. @@ -490,18 +483,6 @@ void mp_image_set_attributes(struct mp_image *image, mp_image_set_params(image, &nparams); } -void mp_image_set_colorspace_details(struct mp_image *image, - struct mp_csp_details *csp) -{ - struct mp_image_params params; - mp_image_params_from_image(¶ms, image); - params.colorspace = csp->format; - params.colorlevels = csp->levels_in; - mp_image_params_guess_csp(¶ms); - image->colorspace = params.colorspace; - image->levels = params.colorlevels; -} - // If details like params->colorspace/colorlevels are missing, guess them from // the other settings. Also, even if they are set, make them consistent with // the colorspace as implied by the pixel format. @@ -592,8 +573,8 @@ void mp_image_copy_fields_to_av_frame(struct AVFrame *dst, dst->repeat_pict = 1; #if HAVE_AVFRAME_COLORSPACE - dst->colorspace = mp_csp_to_avcol_spc(src->colorspace); - dst->color_range = mp_csp_levels_to_avcol_range(src->levels); + dst->colorspace = mp_csp_to_avcol_spc(src->params.colorspace); + dst->color_range = mp_csp_levels_to_avcol_range(src->params.colorlevels); #endif } -- cgit v1.2.3