summaryrefslogtreecommitdiffstats
path: root/video/mp_image.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-11-10 02:02:24 +0100
committerwm4 <wm4@nowhere>2013-01-13 17:39:32 +0100
commitd77d9fb933e0e7dc34de02f3d0c13791ddd80114 (patch)
treeca45e0f9d753e7ee7b5bd142eb2aed1638bf391c /video/mp_image.c
parent1568161aadf24ee3a6d982612b7380f8b1dc4a58 (diff)
downloadmpv-d77d9fb933e0e7dc34de02f3d0c13791ddd80114.tar.bz2
mpv-d77d9fb933e0e7dc34de02f3d0c13791ddd80114.tar.xz
mp_image: require using mp_image_set_size() for setting w/h
Setting the size of a mp_image must be done with mp_image_set_size() now. Do this to guarantee that the redundant fields (like chroma_width) are updated consistently. Replacing the redundant fields by function calls would probably be better, but there are too many uses of them, and is a bit less convenient. Most code actually called mp_image_setfmt(), which did this as well. This commit just makes things a bit more explicit. Warning: the video filter chain still sets up mp_images manually, and vf_get_image() is not updated.
Diffstat (limited to 'video/mp_image.c')
-rw-r--r--video/mp_image.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/video/mp_image.c b/video/mp_image.c
index 1de8abaed5..c829464a4e 100644
--- a/video/mp_image.c
+++ b/video/mp_image.c
@@ -309,11 +309,26 @@ struct mp_image *mp_image_new_empty(int w, int h)
{
struct mp_image *mpi = talloc_zero(NULL, struct mp_image);
talloc_set_destructor(mpi, mp_image_destructor);
- mpi->width=mpi->w=w;
- mpi->height=mpi->h=h;
+ mp_image_set_size(mpi, w, h);
return mpi;
}
+// Caller has to make sure this doesn't exceed the allocated plane data/strides.
+void mp_image_set_size(struct mp_image *mpi, int w, int h)
+{
+ mpi->w = mpi->width = w;
+ mpi->h = mpi->height = h;
+ mpi->chroma_width = mpi->w >> mpi->chroma_x_shift;
+ mpi->chroma_height = mpi->h >> mpi->chroma_y_shift;
+ mpi->display_w = mpi->display_h = 0;
+}
+
+void mp_image_set_display_size(struct mp_image *mpi, int dw, int dh)
+{
+ mpi->display_w = dw;
+ mpi->display_h = dh;
+}
+
struct mp_image *mp_image_alloc(unsigned int imgfmt, int w, int h)
{
struct mp_image *mpi = mp_image_new_empty(w, h);