JetsonEnc.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #ifndef JETSON_ENC_H_
  2. #define JETSON_ENC_H_
  3. #include "NvUtils.h"
  4. #include <fcntl.h>
  5. #include <fstream>
  6. #include <iostream>
  7. #include <linux/videodev2.h>
  8. #include <malloc.h>
  9. #include <poll.h>
  10. #include <sstream>
  11. #include <string.h>
  12. #include "video_encode.h"
  13. #include <list>
  14. #define TEST_ERROR(cond, str, label) \
  15. if (cond) { \
  16. cerr << str << endl; \
  17. error = 1; \
  18. goto label; \
  19. }
  20. #define TEST_PARSE_ERROR(cond, label) \
  21. if (cond) { \
  22. cerr << "Error parsing runtime parameter changes string" << endl; \
  23. goto label; \
  24. }
  25. #define IS_DIGIT(c) (c >= '0' && c <= '9')
  26. #define MICROSECOND_UNIT 1000000
  27. using namespace std;
  28. typedef struct YUVDataSt {
  29. // unsigned char *data;
  30. uint8_t *data;
  31. int len;
  32. YUVDataSt()
  33. {
  34. data = NULL;
  35. len = 0;
  36. };
  37. ~YUVDataSt()
  38. {
  39. if (data) {
  40. free(data);
  41. data = NULL;
  42. }
  43. };
  44. } YUVData;
  45. class JetsonEncListner
  46. {
  47. public:
  48. virtual void OnJetsonEncData(unsigned char *data, int data_len) = 0;
  49. };
  50. class JetsonEnc
  51. {
  52. public:
  53. JetsonEnc(int width, int height, int video_fps);
  54. ~JetsonEnc();
  55. void SetDecCallBack(JetsonEncListner *call_func);
  56. void UnSetDecCallBack();
  57. void AddFrame(unsigned char *data, int len);
  58. int GetQueueSize();
  59. public:
  60. // jetson enc func
  61. static void *encode_proc(void *arg);
  62. static void *encode_out(void *arg);
  63. static bool encoder_capture_plane_dq_callback(struct v4l2_buffer *v4l2_buf, NvBuffer *buffer, NvBuffer *shared_buffer, void *arg);
  64. int encoder_proc_nonblocking(context_t_enc &ctx, bool eos);
  65. int read_video_frame_my(std::ifstream *stream, NvBuffer &buffer);
  66. int encoder_proc_blocking(context_t_enc &ctx, bool eos);
  67. public:
  68. JetsonEncListner *p_callback;
  69. pthread_mutex_t data_mutex;
  70. pthread_cond_t data_cond;
  71. list<YUVData *> data_list;
  72. bool m_abort = false;
  73. int image_width;
  74. int image_height;
  75. int fps;
  76. context_t_enc ctx;
  77. pthread_t job_tid;
  78. pthread_t out_tid;
  79. };
  80. #endif