soc_mediabus.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /*
  2. * SoC-camera Media Bus API extensions
  3. *
  4. * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License version 2 as
  8. * published by the Free Software Foundation.
  9. */
  10. #ifndef SOC_MEDIABUS_H
  11. #define SOC_MEDIABUS_H
  12. #include <linux/videodev2.h>
  13. #include <linux/v4l2-mediabus.h>
  14. /**
  15. * enum soc_mbus_packing - data packing types on the media-bus
  16. * @SOC_MBUS_PACKING_NONE: no packing, bit-for-bit transfer to RAM, one
  17. * sample represents one pixel
  18. * @SOC_MBUS_PACKING_2X8_PADHI: 16 bits transferred in 2 8-bit samples, in the
  19. * possibly incomplete byte high bits are padding
  20. * @SOC_MBUS_PACKING_2X8_PADLO: as above, but low bits are padding
  21. * @SOC_MBUS_PACKING_EXTEND16: sample width (e.g., 10 bits) has to be extended
  22. * to 16 bits
  23. * @SOC_MBUS_PACKING_VARIABLE: compressed formats with variable packing
  24. * @SOC_MBUS_PACKING_1_5X8: used for packed YUV 4:2:0 formats, where 4
  25. * pixels occupy 6 bytes in RAM
  26. */
  27. enum soc_mbus_packing {
  28. SOC_MBUS_PACKING_NONE,
  29. SOC_MBUS_PACKING_2X8_PADHI,
  30. SOC_MBUS_PACKING_2X8_PADLO,
  31. SOC_MBUS_PACKING_EXTEND16,
  32. SOC_MBUS_PACKING_VARIABLE,
  33. SOC_MBUS_PACKING_1_5X8,
  34. };
  35. /**
  36. * enum soc_mbus_order - sample order on the media bus
  37. * @SOC_MBUS_ORDER_LE: least significant sample first
  38. * @SOC_MBUS_ORDER_BE: most significant sample first
  39. */
  40. enum soc_mbus_order {
  41. SOC_MBUS_ORDER_LE,
  42. SOC_MBUS_ORDER_BE,
  43. };
  44. /**
  45. * enum soc_mbus_layout - planes layout in memory
  46. * @SOC_MBUS_LAYOUT_PACKED: color components packed
  47. * @SOC_MBUS_LAYOUT_PLANAR_2Y_U_V: YUV components stored in 3 planes (4:2:2)
  48. * @SOC_MBUS_LAYOUT_PLANAR_2Y_C: YUV components stored in a luma and a
  49. * chroma plane (C plane is half the size
  50. * of Y plane)
  51. * @SOC_MBUS_LAYOUT_PLANAR_Y_C: YUV components stored in a luma and a
  52. * chroma plane (C plane is the same size
  53. * as Y plane)
  54. */
  55. enum soc_mbus_layout {
  56. SOC_MBUS_LAYOUT_PACKED = 0,
  57. SOC_MBUS_LAYOUT_PLANAR_2Y_U_V,
  58. SOC_MBUS_LAYOUT_PLANAR_2Y_C,
  59. SOC_MBUS_LAYOUT_PLANAR_Y_C,
  60. };
  61. /**
  62. * struct soc_mbus_pixelfmt - Data format on the media bus
  63. * @name: Name of the format
  64. * @fourcc: Fourcc code, that will be obtained if the data is
  65. * stored in memory in the following way:
  66. * @packing: Type of sample-packing, that has to be used
  67. * @order: Sample order when storing in memory
  68. * @bits_per_sample: How many bits the bridge has to sample
  69. */
  70. struct soc_mbus_pixelfmt {
  71. const char *name;
  72. u32 fourcc;
  73. enum soc_mbus_packing packing;
  74. enum soc_mbus_order order;
  75. enum soc_mbus_layout layout;
  76. u8 bits_per_sample;
  77. };
  78. /**
  79. * struct soc_mbus_lookup - Lookup FOURCC IDs by mediabus codes for pass-through
  80. * @code: mediabus pixel-code
  81. * @fmt: pixel format description
  82. */
  83. struct soc_mbus_lookup {
  84. enum v4l2_mbus_pixelcode code;
  85. struct soc_mbus_pixelfmt fmt;
  86. };
  87. const struct soc_mbus_pixelfmt *soc_mbus_find_fmtdesc(
  88. enum v4l2_mbus_pixelcode code,
  89. const struct soc_mbus_lookup *lookup,
  90. int n);
  91. const struct soc_mbus_pixelfmt *soc_mbus_get_fmtdesc(
  92. enum v4l2_mbus_pixelcode code);
  93. s32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf);
  94. s32 soc_mbus_image_size(const struct soc_mbus_pixelfmt *mf,
  95. u32 bytes_per_line, u32 height);
  96. int soc_mbus_samples_per_pixel(const struct soc_mbus_pixelfmt *mf,
  97. unsigned int *numerator, unsigned int *denominator);
  98. unsigned int soc_mbus_config_compatible(const struct v4l2_mbus_config *cfg,
  99. unsigned int flags);
  100. #endif