11 #ifndef CVCORE_IMAGE_H
12 #define CVCORE_IMAGE_H
17 #include <type_traits>
82 : std::integral_constant<bool, T == PLANAR_RGB_U8 || T == PLANAR_RGB_U16 || T == PLANAR_RGB_F16 ||
83 T == PLANAR_RGB_F32 || T == PLANAR_BGR_U8 || T == PLANAR_BGR_U16 ||
84 T == PLANAR_BGR_F16 || T == PLANAR_BGR_F32 || T == PLANAR_RGBA_U8 ||
85 T == PLANAR_RGBA_U16 || T == PLANAR_RGBA_F16 || T == PLANAR_RGBA_F32>
90 struct IsInterleavedImage : std::integral_constant<bool, !IsCompositeImage<T>::value && !IsPlanarImage<T>::value>
97 template<ImageType T,
size_t N>
377 size_t imageElementSize;
390 imageElementSize = 1;
409 imageElementSize = 2;
420 imageElementSize = 4;
425 imageElementSize = 0;
429 return imageElementSize;
437 size_t imageChannelCount;
448 imageChannelCount = 1;
468 imageChannelCount = 3;
480 imageChannelCount = 4;
485 imageChannelCount = 0;
489 return imageChannelCount;
492 template<ImageType T>
681 Image(std::size_t width, std::size_t height,
bool isCPU =
true)
682 : m_data(std::make_tuple(
Y(width, height, isCPU),
UV(width / 2, height / 2, isCPU)))
684 assert(width % 2 == 0 && height % 2 == 0);
687 Image(std::size_t width, std::size_t height, std::uint8_t *dataPtrLuma, std::uint8_t *dataPtrChroma,
689 : m_data(std::make_tuple(
Y(width, height, dataPtrLuma, isCPU),
UV(width / 2, height / 2, dataPtrChroma, isCPU)))
691 assert(width % 2 == 0 && height % 2 == 0);
694 Image(std::size_t width, std::size_t height, std::size_t rowPitchLuma, std::size_t rowPitchChroma,
695 std::uint8_t *dataPtrLuma, std::uint8_t *dataPtrChroma,
bool isCPU =
true)
696 : m_data(std::make_tuple(
Y(width, height, rowPitchLuma, dataPtrLuma, isCPU),
697 UV(width / 2, height / 2, rowPitchChroma, dataPtrChroma, isCPU)))
699 assert(width % 2 == 0 && height % 2 == 0);
704 return std::get<0>(m_data).getWidth();
709 return std::get<0>(m_data).getHeight();
714 return std::get<1>(m_data).getWidth();
719 return std::get<1>(m_data).getHeight();
724 return std::get<0>(m_data).getStride(dim);
729 return std::get<1>(m_data).getStride(dim);
734 return std::get<0>(m_data).getData();
739 return std::get<1>(m_data).getData();
744 return std::get<0>(m_data).getData();
749 return std::get<0>(m_data).getDataSize();
754 return std::get<1>(m_data).getData();
759 return std::get<1>(m_data).getDataSize();
764 return std::get<0>(m_data).isCPU();
773 std::tuple<Y, UV> m_data;
780 Image(std::size_t width, std::size_t height,
bool isCPU =
true)
781 : m_data(std::make_tuple(
Y(width, height, isCPU),
UV(width, height, isCPU)))
785 Image(std::size_t width, std::size_t height, std::uint8_t *dataPtrLuma, std::uint8_t *dataPtrChroma,
787 : m_data(std::make_tuple(
Y(width, height, dataPtrLuma, isCPU),
UV(width, height, dataPtrChroma, isCPU)))
791 Image(std::size_t width, std::size_t height, std::size_t rowPitchLuma, std::size_t rowPitchChroma,
792 std::uint8_t *dataPtrLuma, std::uint8_t *dataPtrChroma,
bool isCPU =
true)
793 : m_data(std::make_tuple(
Y(width, height, rowPitchLuma, dataPtrLuma, isCPU),
794 UV(width, height, rowPitchChroma, dataPtrChroma, isCPU)))
800 return std::get<0>(m_data).getWidth();
805 return std::get<0>(m_data).getHeight();
810 return std::get<1>(m_data).getWidth();
815 return std::get<1>(m_data).getHeight();
820 return std::get<0>(m_data).getStride(dim);
825 return std::get<1>(m_data).getStride(dim);
830 return std::get<0>(m_data).getData();
835 return std::get<0>(m_data).getData();
840 return std::get<0>(m_data).getDataSize();
845 return std::get<1>(m_data).getData();
850 return std::get<1>(m_data).getData();
855 return std::get<1>(m_data).getDataSize();
860 return std::get<0>(m_data).isCPU();
869 std::tuple<Y, UV> m_data;
874 Copy(std::get<0>(dst.m_data), std::get<0>(src.m_data), stream);
875 Copy(std::get<1>(dst.m_data), std::get<1>(src.m_data), stream);
880 Copy(std::get<0>(dst.m_data), std::get<0>(src.m_data), stream);
881 Copy(std::get<1>(dst.m_data), std::get<1>(src.m_data), stream);
886 #endif // CVCORE_IMAGE_H