ROS2ImageEncodingConversionComponent.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <AzCore/Component/Component.h>
  10. #include <AzCore/RTTI/TypeInfoSimple.h>
  11. #include <ROS2Sensors/Camera/CameraPostProcessingRequestBus.h>
  12. #include <ROS2Sensors/ROS2SensorsTypeIds.h>
  13. namespace ROS2
  14. {
  15. enum class ImageEncoding : AZ::u8
  16. {
  17. RGBA8,
  18. RGB8,
  19. Mono8,
  20. Mono16,
  21. };
  22. struct EncodingConversion
  23. {
  24. AZ_TYPE_INFO(EncodingConversion, ROS2Sensors::EncodingConversionTypeId);
  25. static void Reflect(AZ::ReflectContext* context);
  26. AZ::Outcome<void, AZStd::string> ValidateInputEncoding(void* newValue, const AZ::Uuid& valueType);
  27. AZ::Outcome<void, AZStd::string> ValidateOutputEncoding(void* newValue, const AZ::Uuid& valueType);
  28. bool operator==(const ROS2::EncodingConversion& rhs) const
  29. {
  30. return encodingIn == rhs.encodingIn && encodingOut == rhs.encodingOut;
  31. }
  32. ImageEncoding encodingIn = ImageEncoding::RGBA8;
  33. ImageEncoding encodingOut = ImageEncoding::RGB8;
  34. };
  35. //! Change image format
  36. class ROS2ImageEncodingConversionComponent
  37. : public AZ::Component
  38. , public CameraPostProcessingRequestBus::Handler
  39. {
  40. public:
  41. AZ_COMPONENT(ROS2ImageEncodingConversionComponent, ROS2Sensors::ROS2ImageEncodingConversionComponentTypeId, AZ::Component);
  42. static void Reflect(AZ::ReflectContext* context);
  43. ROS2ImageEncodingConversionComponent() = default;
  44. ~ROS2ImageEncodingConversionComponent() override = default;
  45. void Activate() override;
  46. void Deactivate() override;
  47. //! CameraPostProcessingRequestBus::Handler overrides
  48. void ApplyPostProcessing(sensor_msgs::msg::Image& image) override;
  49. AZ::u8 GetPriority() const override;
  50. private:
  51. AZ::u8 m_priority = CameraPostProcessingRequests::DEFAULT_PRIORITY;
  52. EncodingConversion m_encodingConvertData;
  53. };
  54. } // namespace ROS2