aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2012-03-21 07:03:25 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-05-15 15:10:20 -0400
commit8929c96378a162263c8e3e547975e283dfd17e7f (patch)
treee5fad4df40a1e6848b370e34e9d072058c44ccde
parent4e0e620ce713893b2883522a16a71b5589e8e3db (diff)
[media] soc-camera: Add soc_mbus_image_size
The function returns the minimum size of an image for a given number of bytes per line (as per the V4L2 specification), width and format. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/soc_mediabus.c18
-rw-r--r--include/media/soc_mediabus.h2
2 files changed, 20 insertions, 0 deletions
diff --git a/drivers/media/video/soc_mediabus.c b/drivers/media/video/soc_mediabus.c
index a7073142f9f1..89dce097a827 100644
--- a/drivers/media/video/soc_mediabus.c
+++ b/drivers/media/video/soc_mediabus.c
@@ -397,6 +397,24 @@ s32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf)
397} 397}
398EXPORT_SYMBOL(soc_mbus_bytes_per_line); 398EXPORT_SYMBOL(soc_mbus_bytes_per_line);
399 399
400s32 soc_mbus_image_size(const struct soc_mbus_pixelfmt *mf,
401 u32 bytes_per_line, u32 height)
402{
403 if (mf->layout == SOC_MBUS_LAYOUT_PACKED)
404 return bytes_per_line * height;
405
406 switch (mf->packing) {
407 case SOC_MBUS_PACKING_2X8_PADHI:
408 case SOC_MBUS_PACKING_2X8_PADLO:
409 return bytes_per_line * height * 2;
410 case SOC_MBUS_PACKING_1_5X8:
411 return bytes_per_line * height * 3 / 2;
412 default:
413 return -EINVAL;
414 }
415}
416EXPORT_SYMBOL(soc_mbus_image_size);
417
400const struct soc_mbus_pixelfmt *soc_mbus_find_fmtdesc( 418const struct soc_mbus_pixelfmt *soc_mbus_find_fmtdesc(
401 enum v4l2_mbus_pixelcode code, 419 enum v4l2_mbus_pixelcode code,
402 const struct soc_mbus_lookup *lookup, 420 const struct soc_mbus_lookup *lookup,
diff --git a/include/media/soc_mediabus.h b/include/media/soc_mediabus.h
index e18eed4e5678..0dc6f4625b92 100644
--- a/include/media/soc_mediabus.h
+++ b/include/media/soc_mediabus.h
@@ -99,6 +99,8 @@ const struct soc_mbus_pixelfmt *soc_mbus_find_fmtdesc(
99const struct soc_mbus_pixelfmt *soc_mbus_get_fmtdesc( 99const struct soc_mbus_pixelfmt *soc_mbus_get_fmtdesc(
100 enum v4l2_mbus_pixelcode code); 100 enum v4l2_mbus_pixelcode code);
101s32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf); 101s32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf);
102s32 soc_mbus_image_size(const struct soc_mbus_pixelfmt *mf,
103 u32 bytes_per_line, u32 height);
102int soc_mbus_samples_per_pixel(const struct soc_mbus_pixelfmt *mf, 104int soc_mbus_samples_per_pixel(const struct soc_mbus_pixelfmt *mf,
103 unsigned int *numerator, unsigned int *denominator); 105 unsigned int *numerator, unsigned int *denominator);
104unsigned int soc_mbus_config_compatible(const struct v4l2_mbus_config *cfg, 106unsigned int soc_mbus_config_compatible(const struct v4l2_mbus_config *cfg,