NvBufSurface.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*
  2. * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
  3. * NVIDIA CORPORATION and its licensors retain all intellectual property
  4. * and proprietary rights in and to this software, related documentation
  5. * and any modifications thereto. Any use, reproduction, disclosure or
  6. * distribution of this software and related documentation without an express
  7. * license agreement from NVIDIA CORPORATION is strictly prohibited.
  8. */
  9. #include "NvBufSurface.h"
  10. using namespace std;
  11. int
  12. NvBufSurf::NvDestroy(int fd)
  13. {
  14. int ret = 0;
  15. NvBufSurface *nvbuf_surf = 0;
  16. if (fd <= 0)
  17. return -1;
  18. NvBufSurfaceFromFd(fd, (void**)(&nvbuf_surf));
  19. if (nvbuf_surf != NULL)
  20. {
  21. ret = NvBufSurfaceDestroy(nvbuf_surf);
  22. }
  23. return ret;
  24. }
  25. int
  26. NvBufSurf::NvAllocate(NvCommonAllocateParams *allocateParams, uint32_t numBuffers, int *fd)
  27. {
  28. int ret = 0;
  29. NvBufSurfaceAllocateParams input_params = {{0}};
  30. if (numBuffers < 1 || allocateParams == NULL)
  31. return -1;
  32. input_params.params.width = allocateParams->width;
  33. input_params.params.height = allocateParams->height;
  34. input_params.params.memType = allocateParams->memType;
  35. input_params.params.layout = allocateParams->layout;
  36. input_params.params.colorFormat = allocateParams->colorFormat;
  37. input_params.memtag = allocateParams->memtag;
  38. for (uint32_t index = 0; index < numBuffers; index++) {
  39. NvBufSurface *nvbuf_surf = 0;
  40. ret = NvBufSurfaceAllocate(&nvbuf_surf, 1, &input_params);
  41. fd[index] = nvbuf_surf->surfaceList[0].bufferDesc;
  42. nvbuf_surf->numFilled = 1;
  43. }
  44. return ret;
  45. }
  46. int
  47. NvBufSurf::NvTransform(NvCommonTransformParams *transformParams, int src_fd, int dst_fd)
  48. {
  49. int ret = 0;
  50. if (transformParams == NULL)
  51. return -1;
  52. NvBufSurfTransformRect src_rect = {0};
  53. NvBufSurfTransformRect dest_rect = {0};
  54. NvBufSurfTransformParams transform_params;
  55. NvBufSurface *nvbuf_surf_src = 0;
  56. NvBufSurface *nvbuf_surf_dst = 0;
  57. src_rect.top = transformParams->src_top;
  58. src_rect.left = transformParams->src_left;
  59. src_rect.width = transformParams->src_width;
  60. src_rect.height = transformParams->src_height;
  61. dest_rect.top = transformParams->dst_top;
  62. dest_rect.left = transformParams->dst_left;
  63. dest_rect.width = transformParams->dst_width;
  64. dest_rect.height = transformParams->dst_height;
  65. memset(&transform_params,0,sizeof(transform_params));
  66. /* Indicates which of the transform parameters are valid. */
  67. transform_params.transform_flag = transformParams->flag;
  68. transform_params.transform_flip = transformParams->flip;
  69. transform_params.transform_filter = transformParams->filter;
  70. transform_params.src_rect = &src_rect;
  71. transform_params.dst_rect = &dest_rect;
  72. NvBufSurfaceFromFd(src_fd, (void**)(&nvbuf_surf_src));
  73. NvBufSurfaceFromFd(dst_fd, (void**)(&nvbuf_surf_dst));
  74. ret = NvBufSurfTransform(nvbuf_surf_src, nvbuf_surf_dst, &transform_params);
  75. return ret;
  76. }
  77. int
  78. NvBufSurf::NvTransformAsync(NvCommonTransformParams *transformParams, NvBufSurfTransformSyncObj_t *sync_obj, int src_fd, int dst_fd)
  79. {
  80. int ret = 0;
  81. NvBufSurfTransformRect dest_rect, src_rect;
  82. NvBufSurfTransformParams transform_params;
  83. NvBufSurface *nvbuf_surf_src = 0;
  84. NvBufSurface *nvbuf_surf_dst = 0;
  85. src_rect.top = transformParams->src_top;
  86. src_rect.left = transformParams->src_left;
  87. src_rect.width = transformParams->src_width;
  88. src_rect.height = transformParams->src_height;
  89. dest_rect.top = transformParams->dst_top;
  90. dest_rect.left = transformParams->dst_left;
  91. dest_rect.width = transformParams->dst_width;
  92. dest_rect.height = transformParams->dst_height;
  93. memset(&transform_params,0,sizeof(transform_params));
  94. /* Indicates which of the transform parameters are valid. */
  95. transform_params.transform_flag = transformParams->flag;
  96. transform_params.transform_flip = transformParams->flip;
  97. transform_params.transform_filter = transformParams->filter;
  98. transform_params.src_rect = &src_rect;
  99. transform_params.dst_rect = &dest_rect;
  100. NvBufSurfaceFromFd(src_fd, (void**)(&nvbuf_surf_src));
  101. NvBufSurfaceFromFd(dst_fd, (void**)(&nvbuf_surf_dst));
  102. ret = NvBufSurfTransformAsync(nvbuf_surf_src, nvbuf_surf_dst, &transform_params, sync_obj);
  103. return ret;
  104. }