forked from Minki/linux
drm: Share the code to compute color plane dimesions
framebuffer_check() has some hand rolled code to compute the color plane dimensions based on the subsampled information. Let's share the code between framebuffer_check() and drm_framebuffer_plane_{width,height}(). Cc: Ben Widawsky <ben@bwidawsk.net> Cc: Jason Ekstrand <jason@jlekstrand.net> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170321181218.10042-2-ville.syrjala@linux.intel.com Reviewed-by: Ben Widawsky <ben@bwidawsk.net>
This commit is contained in:
parent
eea54ed46e
commit
568c5e4536
@ -126,6 +126,24 @@ int drm_mode_addfb(struct drm_device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fb_plane_width(int width,
|
||||
const struct drm_format_info *format, int plane)
|
||||
{
|
||||
if (plane == 0)
|
||||
return width;
|
||||
|
||||
return width / format->hsub;
|
||||
}
|
||||
|
||||
static int fb_plane_height(int height,
|
||||
const struct drm_format_info *format, int plane)
|
||||
{
|
||||
if (plane == 0)
|
||||
return height;
|
||||
|
||||
return height / format->vsub;
|
||||
}
|
||||
|
||||
static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
|
||||
{
|
||||
const struct drm_format_info *info;
|
||||
@ -151,8 +169,8 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
|
||||
}
|
||||
|
||||
for (i = 0; i < info->num_planes; i++) {
|
||||
unsigned int width = r->width / (i != 0 ? info->hsub : 1);
|
||||
unsigned int height = r->height / (i != 0 ? info->vsub : 1);
|
||||
unsigned int width = fb_plane_width(r->width, info, i);
|
||||
unsigned int height = fb_plane_height(r->height, info, i);
|
||||
unsigned int cpp = info->cpp[i];
|
||||
|
||||
if (!r->handles[i]) {
|
||||
@ -816,10 +834,7 @@ int drm_framebuffer_plane_width(int width,
|
||||
if (plane >= fb->format->num_planes)
|
||||
return 0;
|
||||
|
||||
if (plane == 0)
|
||||
return width;
|
||||
|
||||
return width / fb->format->hsub;
|
||||
return fb_plane_width(width, fb->format, plane);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_framebuffer_plane_width);
|
||||
|
||||
@ -838,9 +853,6 @@ int drm_framebuffer_plane_height(int height,
|
||||
if (plane >= fb->format->num_planes)
|
||||
return 0;
|
||||
|
||||
if (plane == 0)
|
||||
return height;
|
||||
|
||||
return height / fb->format->vsub;
|
||||
return fb_plane_height(height, fb->format, plane);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_framebuffer_plane_height);
|
||||
|
Loading…
Reference in New Issue
Block a user