sdc_data_src.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /******************************************************************************
  2. 版权所有 (C), 2019-2029, SDC OS 开源软件小组所有
  3. ******************************************************************************
  4. 文 件 名 : sdc_data_src.h
  5. 版 本 号 : 初稿
  6. 作 者 : athina
  7. 生成日期 : 2020年7月27日
  8. 最近修改 :
  9. 功能描述 : 数据源文件
  10. 函数列表 :
  11. 修改历史 :
  12. 1.日 期 : 2020年7月4日
  13. 作 者 : athina
  14. 修改内容 : 创建文件
  15. ******************************************************************************/
  16. #ifndef __SDC_DATA_SRC_H__
  17. #define __SDC_DATA_SRC_H__
  18. #include <memory>
  19. #include "sdc.h"
  20. namespace HWYolov3App
  21. {
  22. enum class YuvDataSrc
  23. {
  24. DATA_SRC_VIDEO_STREAM,
  25. DATA_SRC_IMAGE_FILE,
  26. };
  27. // 创建数据源(VideoStream, ImageFile)
  28. class IYuvDataSrc;
  29. std::shared_ptr<IYuvDataSrc> CreateDataSrcFromVideoStream(uint32_t yuvChnId); // 从Yuv通道获取YuvFrame
  30. std::shared_ptr<IYuvDataSrc> CreateDataSrcFromImageFile(const std::string &filePath); // 从Image文件获取YuvFrame
  31. class IYuvDataSrc
  32. {
  33. public:
  34. IYuvDataSrc(void);
  35. virtual ~IYuvDataSrc(void) = 0;
  36. virtual bool GetYuvData(sdc_yuv_data_s &data) = 0;
  37. virtual void FreeYuvData(sdc_yuv_data_s &data) = 0;
  38. private:
  39. IYuvDataSrc(const IYuvDataSrc&);
  40. IYuvDataSrc& operator=(const IYuvDataSrc&);
  41. IYuvDataSrc(IYuvDataSrc&&);
  42. IYuvDataSrc& operator=(IYuvDataSrc&&);
  43. };
  44. class VideoStream : public IYuvDataSrc
  45. {
  46. public:
  47. VideoStream(void);
  48. virtual ~VideoStream(void);
  49. bool SubscYuvChannel(uint32_t yuvChnId);
  50. virtual bool GetYuvData(sdc_yuv_data_s &data);
  51. virtual void FreeYuvData(sdc_yuv_data_s &data);
  52. private:
  53. static const int MAX_CACHED_COUNT = 10; // 最大缓存YUV帧数量为10(SDC_APP开发指南默认填10)
  54. int32_t m_fd;
  55. };
  56. // 针对于JPEG图片
  57. class ImageFile : public IYuvDataSrc
  58. {
  59. public:
  60. ImageFile(void);
  61. virtual ~ImageFile(void);
  62. bool ReadFile(const std::string &filePath);
  63. virtual bool GetYuvData(sdc_yuv_data_s &data);
  64. virtual void FreeYuvData(sdc_yuv_data_s &data);
  65. private:
  66. uint8_t *m_arr; // YUV帧数据地址
  67. int32_t m_size; // YUV帧的大小
  68. int32_t m_width; // YUV帧的宽
  69. int32_t m_height; // YUV帧的高
  70. bool m_eof; // 视频帧是否读完
  71. };
  72. }
  73. #endif /* __SDC_DATA_SRC_H__ */