SensorPrivateMetadata.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*
  2. * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * * Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * * Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. * * Neither the name of NVIDIA CORPORATION nor the names of its
  13. * contributors may be used to endorse or promote products derived
  14. * from this software without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
  17. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  19. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  20. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  21. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  22. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  23. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  24. * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  26. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. */
  28. /**
  29. * @file
  30. * <b>Libargus Extension: Sensor Private Metadata API</b>
  31. *
  32. * @b Description: This file defines the SensorPrivateMetadata extension.
  33. */
  34. #ifndef _ARGUS_SENSOR_PRIVATE_METADATA_H
  35. #define _ARGUS_SENSOR_PRIVATE_METADATA_H
  36. namespace Argus
  37. {
  38. /**
  39. * Adds accessors for sensor embedded metadata. This data is metadata that the sensor embeds
  40. * inside the frame, the type and formating of which depends on the sensor. It is up to the
  41. * user to correctly parse the data based on the specifics of the sensor used.
  42. *
  43. * - Ext::ISensorPrivateMetadataCaps: Determines whether a device is capable of
  44. * private metadata output.
  45. * - Ext::ISensorPrivateMetadataRequest: Enables private metadata output from a capture request.
  46. * - Ext::ISensorPrivateMetadata: Accesses the sensor private metadata.
  47. *
  48. * @defgroup ArgusExtSensorPrivateMetadata Ext::SensorPrivateMetadata
  49. * @ingroup ArgusExtensions
  50. */
  51. DEFINE_UUID(ExtensionName, EXT_SENSOR_PRIVATE_METADATA, 7acf4352,3a75,46e7,9af1,8d,71,da,83,15,23);
  52. namespace Ext
  53. {
  54. /**
  55. * @class ISensorPrivateMetadataCaps
  56. *
  57. * Interface used to query the availability and size in bytes of sensor private metadata.
  58. *
  59. * @ingroup ArgusCameraDevice ArgusExtSensorPrivateMetadata
  60. */
  61. DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_CAPS, e492d2bf,5285,476e,94c5,ee,64,d5,3d,94,ef);
  62. class ISensorPrivateMetadataCaps : public Interface
  63. {
  64. public:
  65. static const InterfaceID& id() { return IID_SENSOR_PRIVATE_METADATA_CAPS; }
  66. /**
  67. * Returns the size in bytes of the private metadata.
  68. */
  69. virtual size_t getMetadataSize() const = 0;
  70. protected:
  71. ~ISensorPrivateMetadataCaps() {}
  72. };
  73. /**
  74. * @class ISensorPrivateMetadataRequest
  75. *
  76. * Interface used enable the output of sensor private metadata for a request.
  77. *
  78. * @ingroup ArgusRequest ArgusExtSensorPrivateMetadata
  79. */
  80. DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_REQUEST, 5c868b69,42f5,4ec9,9b93,44,11,c9,6c,02,e3);
  81. class ISensorPrivateMetadataRequest : public Interface
  82. {
  83. public:
  84. static const InterfaceID& id() { return IID_SENSOR_PRIVATE_METADATA_REQUEST; }
  85. /**
  86. * Enables the sensor private metadata, will only work if the sensor supports embedded metadata.
  87. * @param[in] enable whether to output embedded metadata.
  88. */
  89. virtual void setMetadataEnable(bool enable) = 0;
  90. /**
  91. * Returns if the metadata is enabled for this request.
  92. */
  93. virtual bool getMetadataEnable() const = 0;
  94. protected:
  95. ~ISensorPrivateMetadataRequest() {}
  96. };
  97. /**
  98. * @class ISensorPrivateMetadata
  99. *
  100. * Interface used to access sensor private metadata.
  101. *
  102. * @ingroup ArgusCaptureMetadata ArgusExtSensorPrivateMetadata
  103. */
  104. DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA, 68cf6680,70d7,4b52,9a99,33,fb,65,81,a2,61);
  105. class ISensorPrivateMetadata : public Interface
  106. {
  107. public:
  108. static const InterfaceID& id() { return IID_SENSOR_PRIVATE_METADATA; }
  109. /**
  110. * Returns the size of the embedded metadata.
  111. */
  112. virtual size_t getMetadataSize() const = 0;
  113. /**
  114. * Copies back the metadata to the provided memory location.
  115. * If the size of @a dst is smaller than the total size of the metadata, only the first
  116. * bytes up to size are copied.
  117. * @param [in,out] dst The pointer to the location where the data will be copied.
  118. * The caller is responsible for allocating and managing the memory.
  119. * @param [in] size The size of the destination.
  120. */
  121. virtual Status getMetadata(void *dst, size_t size) const = 0;
  122. protected:
  123. ~ISensorPrivateMetadata() {}
  124. };
  125. } // namespace Ext
  126. } // namespace Argus
  127. #endif // _ARGUS_SENSOR_PRIVATE_METADATA_H