SF_OMX_mjpeg_common.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2021 StarFive Technology Co., Ltd.
  4. */
  5. #ifndef SF_OMX_MJPEG_COMMON
  6. #define SF_OMX_MJPEG_COMMON
  7. #include "OMX_Component.h"
  8. #include "OMX_Image.h"
  9. #include "OMX_Index.h"
  10. #include "OMX_IndexExt.h"
  11. #include "SF_OMX_Core.h"
  12. #include "sf_thread.h"
  13. #include "codaj12/jpuapi/jpuapi.h"
  14. #include "codaj12/jpuapi/jpuapifunc.h"
  15. #include "codaj12/sample/main_helper.h"
  16. #include <sys/queue.h>
  17. #include <sys/ipc.h>
  18. #include <sys/msg.h>
  19. #include <pthread.h>
  20. #include <errno.h>
  21. #define INIT_SET_SIZE_VERSION(_struct_, _structType_) \
  22. do \
  23. { \
  24. memset((_struct_), 0, sizeof(_structType_)); \
  25. (_struct_)->nSize = sizeof(_structType_); \
  26. (_struct_)->nVersion.s.nVersionMajor = 1; \
  27. (_struct_)->nVersion.s.nVersionMinor = 18; \
  28. (_struct_)->nVersion.s.nRevision = 1; \
  29. (_struct_)->nVersion.s.nStep = 0; \
  30. } while (0)
  31. #define DEFAULT_FRAME_WIDTH 1920
  32. #define DEFAULT_FRAME_HEIGHT 1080
  33. #define DEFAULT_MJPEG_INPUT_BUFFER_SIZE (DEFAULT_FRAME_WIDTH * DEFAULT_FRAME_HEIGHT * 3)
  34. #define DEFAULT_MJPEG_OUTPUT_BUFFER_SIZE (DEFAULT_FRAME_WIDTH * DEFAULT_FRAME_HEIGHT * 3)
  35. #define NUM_FRAME_BUF MAX_FRAME
  36. #define DEFAULT_FRAME_FORMAT FORMAT_420
  37. #define CODAJ12_OUTPUT_BUF_NUMBER 4
  38. #define CODAJ12_INPUT_BUF_NUMBER 1
  39. #define MCA_MAX_INDEX 1
  40. typedef struct _SF_CODAJ12_FUNCTIONS
  41. {
  42. JpgRet (*JPU_Init)(void);
  43. JpgRet (*JPU_DecOpen)(JpgDecHandle *pHandle, JpgDecOpenParam *pop);
  44. JpgRet (*JPU_DecGetInitialInfo)(JpgDecHandle handle, JpgDecInitialInfo *info);
  45. JpgRet (*JPU_DecRegisterFrameBuffer2)(JpgDecHandle handle, FrameBuffer *bufArray, int stride);
  46. JpgRet (*JPU_DecRegisterFrameBuffer)(JpgDecHandle handle, FrameBuffer * bufArray, int num, int stride);
  47. JpgRet (*JPU_DecGiveCommand)(JpgDecHandle handle, JpgCommand cmd, void *param);
  48. JpgRet (*JPU_DecStartOneFrameBySerialNum)(JpgDecHandle handle, JpgDecParam *param,int bufferIndex);
  49. JpgRet (*JPU_DecGetOutputInfo)(JpgDecHandle handle, JpgDecOutputInfo *info);
  50. JpgRet (*JPU_SWReset)(JpgHandle handle);
  51. JpgRet (*JPU_DecSetRdPtrEx)(JpgDecHandle handle, PhysicalAddress addr, BOOL updateWrPtr);
  52. JpgRet (*JPU_DecClose)(JpgDecHandle handle);
  53. Int32 (*JPU_WaitInterrupt)(JpgHandle handle, int timeout);
  54. FrameBuffer *(*JPU_GetFrameBufPool)(JpgDecHandle handle);
  55. void (*JPU_ClrStatus)(JpgHandle handle, Uint32 val);
  56. void (*JPU_DeInit)(void);
  57. void (*BSFeederBuffer_SetData)(void *feeder, char *address, Uint32 size);
  58. Uint32 (*BitstreamFeeder_SetData)(BSFeeder feeder, void *data, Uint32 size);
  59. BSFeeder (*BitstreamFeeder_Create)(const char *path, FeedingMethod method, EndianMode endian);
  60. Uint32 (*BitstreamFeeder_Act)(BSFeeder feeder, JpgDecHandle handle, jpu_buffer_t *bsBuffer);
  61. BOOL(*BitstreamFeeder_Destroy)
  62. (BSFeeder feeder);
  63. int (*jdi_allocate_dma_memory)(jpu_buffer_t *vb);
  64. void (*jdi_free_dma_memory)(jpu_buffer_t *vb);
  65. void *(*AllocateOneFrameBuffer)
  66. // (Uint32 instIdx, Uint32 size, Uint32 *bufferIndex);
  67. (Uint32 instIdx, FrameFormat subsample, CbCrInterLeave cbcrIntlv,
  68. PackedFormat packed, Uint32 rotation, BOOL scalerOn, Uint32 width, Uint32 height, Uint32 bitDepth, Uint32 *bufferIndex);
  69. void (*FreeFrameBuffer)(int instIdx);
  70. FRAME_BUF *(*GetFrameBuffer)(int instIdx, int idx);
  71. Uint32 (*GetFrameBufferCount)(int instIdx);
  72. BOOL (*AttachOneFrameBuffer)(Uint32 instIdx, FrameFormat subsample, CbCrInterLeave cbcrIntlv, PackedFormat packed,
  73. Uint32 rotation, BOOL scalerOn, Uint32 width, Uint32 height, Uint32 bitDepth,
  74. void *virtAddress, Uint32 size, Uint32 *bufferIndex);
  75. BOOL (*UpdateFrameBuffers)(Uint32 instIdx, Uint32 num, FRAME_BUF *frameBuf);
  76. // JPU Log
  77. void (*SetMaxLogLevel)(int level);
  78. } SF_CODAJ12_FUNCTIONS;
  79. typedef struct Message
  80. {
  81. long msg_type;
  82. OMX_U32 msg_flag;
  83. OMX_BUFFERHEADERTYPE *pBuffer;
  84. } Message;
  85. typedef struct _SF_CODAJ12_IMPLEMEMT
  86. {
  87. DecConfigParam *config;
  88. SF_CODAJ12_FUNCTIONS *functions;
  89. BSFeeder feeder;
  90. jpu_buffer_t vbStream;
  91. JpgDecOpenParam decOP;
  92. JpgDecHandle handle;
  93. JpgDecInitialInfo initialInfo;
  94. Int32 instIdx;
  95. FrameBuffer frameBuf[NUM_FRAME_BUF];
  96. FRAME_BUF frame[NUM_FRAME_BUF];
  97. OMX_S32 sInputMessageQueue;
  98. OMX_S32 sOutputMessageQueue;
  99. OMX_S32 sBufferDoneQueue;
  100. Message mesCacheArr[MCA_MAX_INDEX];
  101. THREAD_HANDLE_TYPE *pProcessThread;
  102. OMX_BOOL bThreadRunning;
  103. OMX_STATETYPE currentState;
  104. FrameFormat frameFormat;
  105. OMX_BOOL allocBufFlag;
  106. } SF_CODAJ12_IMPLEMEMT;
  107. enum port_index
  108. {
  109. OMX_INPUT_PORT_INDEX = 0,
  110. OMX_OUTPUT_PORT_INDEX = 1,
  111. OMX_PORT_MAX = 2,
  112. };
  113. #ifdef __cplusplus
  114. extern "C"
  115. {
  116. #endif
  117. OMX_ERRORTYPE GetStateMjpegCommon(OMX_IN OMX_HANDLETYPE hComponent, OMX_OUT OMX_STATETYPE *pState);
  118. OMX_ERRORTYPE InitMjpegStructorCommon(SF_OMX_COMPONENT *hComponent);
  119. OMX_BOOL AttachOutputBuffer(SF_OMX_COMPONENT *pSfOMXComponent, OMX_U8* pBuffer, OMX_U32 nSizeBytes);
  120. OMX_U8* AllocateOutputBuffer(SF_OMX_COMPONENT *pSfOMXComponent, OMX_U32 nSizeBytes);
  121. void ThreadExit(void *value_ptr);
  122. void CodaJ12FlushBuffer(SF_OMX_COMPONENT *pSfOMXComponent, OMX_U32 nPortNumber);
  123. #ifdef __cplusplus
  124. }
  125. #endif
  126. #endif