summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authorRudolf Polzer <divverent@xonotic.org>2012-10-24 19:11:42 +0200
committerwm4 <wm4@nowhere>2012-10-24 21:56:29 +0200
commitaa1047a35a98606c972cc35e566178703b1f2bff (patch)
treee757c045aee158cbe4bf56f3d142f80e0ef62cb0 /libmpcodecs
parent1282f9d79e09160af67ec13c05c0eed1ae02bd46 (diff)
downloadmpv-aa1047a35a98606c972cc35e566178703b1f2bff.tar.bz2
mpv-aa1047a35a98606c972cc35e566178703b1f2bff.tar.xz
sub: add helper to draw sub-bitmaps into an image
Merged by wm4 from commits 93978f17b76d..13211ef5fc20. Changed copyright header in draw_bmp.c to "mpv", and removed the one in draw_bmp.h.
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/sws_utils.c24
-rw-r--r--libmpcodecs/sws_utils.h3
2 files changed, 27 insertions, 0 deletions
diff --git a/libmpcodecs/sws_utils.c b/libmpcodecs/sws_utils.c
index 438db4a13a..65b079dd84 100644
--- a/libmpcodecs/sws_utils.c
+++ b/libmpcodecs/sws_utils.c
@@ -131,4 +131,28 @@ struct SwsContext *sws_getContextFromCmdLine_hq(int srcW, int srcH,
SWS_ACCURATE_RND | SWS_BITEXACT);
}
+void mp_image_swscale(struct mp_image *dst,
+ const struct mp_image *src,
+ struct mp_csp_details *csp,
+ int my_sws_flags)
+{
+ enum PixelFormat dfmt, sfmt;
+ dfmt = imgfmt2pixfmt(dst->imgfmt);
+ sfmt = imgfmt2pixfmt(src->imgfmt);
+ if (src->imgfmt == IMGFMT_RGB8 || src->imgfmt == IMGFMT_BGR8)
+ sfmt = PIX_FMT_PAL8;
+
+ struct SwsContext *sws =
+ sws_getContext(src->w, src->h, sfmt, dst->w, dst->h, dfmt,
+ my_sws_flags, NULL, NULL, NULL);
+ struct mp_csp_details mycsp = MP_CSP_DETAILS_DEFAULTS;
+ if (csp)
+ mycsp = *csp;
+ mp_sws_set_colorspace(sws, &mycsp);
+ sws_scale(sws, (const unsigned char *const *) src->planes, src->stride,
+ 0, src->h,
+ dst->planes, dst->stride);
+ sws_freeContext(sws);
+}
+
// vim: ts=4 sw=4 et tw=80
diff --git a/libmpcodecs/sws_utils.h b/libmpcodecs/sws_utils.h
index a8dc970d08..b2c55eb407 100644
--- a/libmpcodecs/sws_utils.h
+++ b/libmpcodecs/sws_utils.h
@@ -22,6 +22,9 @@ struct SwsContext *sws_getContextFromCmdLine_hq(int srcW, int srcH,
int dstFormat);
int mp_sws_set_colorspace(struct SwsContext *sws, struct mp_csp_details *csp);
+void mp_image_swscale(struct mp_image *dst, const struct mp_image *src,
+ struct mp_csp_details *csp, int my_sws_flags);
+
#endif /* MP_SWS_UTILS_H */
// vim: ts=4 sw=4 et tw=80