From 558f8fd8d99d7d7764840d63eb0e5c24de4ad8fd Mon Sep 17 00:00:00 2001 From: miosakuma Date: Thu, 28 Sep 2023 15:57:27 +0900 Subject: [PATCH 01/11] =?UTF-8?q?JetPack=20=E3=82=92=205.1.2=20=E3=81=AB?= =?UTF-8?q?=E4=B8=8A=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- multistrap/ubuntu-20.04_armv8_jetson.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/multistrap/ubuntu-20.04_armv8_jetson.conf b/multistrap/ubuntu-20.04_armv8_jetson.conf index e769636d..ef5e19a3 100644 --- a/multistrap/ubuntu-20.04_armv8_jetson.conf +++ b/multistrap/ubuntu-20.04_armv8_jetson.conf @@ -13,11 +13,11 @@ components=main universe [Jetson] packages= source=https://repo.download.nvidia.com/jetson/common -suite=r35.2 +suite=r35.4 components=main [T194] packages=nvidia-l4t-camera nvidia-l4t-jetson-multimedia-api source=https://repo.download.nvidia.com/jetson/t194 -suite=r35.2 +suite=r35.4 components=main \ No newline at end of file From 9413cf0eb30a37f199de6a5cdb33906675f773a5 Mon Sep 17 00:00:00 2001 From: enm10k Date: Tue, 3 Oct 2023 17:23:11 +0900 Subject: [PATCH 02/11] =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E3=81=8C?= =?UTF-8?q?=E9=80=9A=E3=82=8B=E3=81=A8=E3=81=93=E3=82=8D=E3=81=BE=E3=81=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 7 +- .../sora/hwenc_jetson/jetson_video_decoder.h | 4 +- src/hwenc_jetson/jetson_buffer.cpp | 88 +++++++++++-------- src/hwenc_jetson/jetson_video_decoder.cpp | 84 ++++++++++-------- src/hwenc_jetson/jetson_video_encoder.cpp | 17 +++- 5 files changed, 120 insertions(+), 80 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 01f734de..2710f872 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -577,13 +577,18 @@ elseif (SORA_TARGET_OS STREQUAL "jetson") PUBLIC nvv4l2 nvv4lconvert - nvbuf_utils #nvbuf_fdmap #nvddk_vic #nvddk_2d_v2 nvjpeg nvbufsurface nvbufsurftransform + + # nvbuf_utils を NvUtils に移行した際、ドキュメントには libnvbuf_utils.so を参照するように記載があったが、 + # そのような so ファイルは存在しないためリンクが失敗した + # nvbuf_fdmap を追加したらリンクが通った + # https://developer.nvidia.com/sites/default/files/akamai/embedded/nvbuf_utils_to_nvutils_migration_guide.pdf + nvbuf_fdmap #nvos ) endif(USE_JETSON_ENCODER) diff --git a/include/sora/hwenc_jetson/jetson_video_decoder.h b/include/sora/hwenc_jetson/jetson_video_decoder.h index b8cc9566..bb5c483e 100644 --- a/include/sora/hwenc_jetson/jetson_video_decoder.h +++ b/include/sora/hwenc_jetson/jetson_video_decoder.h @@ -17,6 +17,8 @@ #include #include +#include + struct v4l2_crop; class NvV4l2Element; class NvVideoDecoder; @@ -59,7 +61,7 @@ class JetsonVideoDecoder : public webrtc::VideoDecoder { rtc::PlatformThread capture_loop_; std::atomic eos_; std::atomic got_error_; - int dst_dma_fd_; + NvBufSurface* dst_surface_; std::shared_ptr capture_crop_; }; diff --git a/src/hwenc_jetson/jetson_buffer.cpp b/src/hwenc_jetson/jetson_buffer.cpp index a475ab1a..6ef8bf9f 100644 --- a/src/hwenc_jetson/jetson_buffer.cpp +++ b/src/hwenc_jetson/jetson_buffer.cpp @@ -9,7 +9,8 @@ #include // Jetson Linux Multimedia API -#include +#include +#include namespace sora { @@ -62,62 +63,70 @@ rtc::scoped_refptr JetsonBuffer::ToI420() { int32_t buffer_width = ((scaled_width_ + 15) / 16) * 16; int32_t buffer_height = ((scaled_height_ + 15) / 16) * 16; - NvBufferCreateParams input_params = {0}; - input_params.payloadType = NvBufferPayload_SurfArray; - input_params.width = buffer_width; - input_params.height = buffer_height; - input_params.layout = NvBufferLayout_Pitch; - input_params.colorFormat = NvBufferColorFormat_YUV420; - input_params.nvbuf_tag = NvBufferTag_NONE; - - int dmabuf_fd; - if (NvBufferCreateEx(&dmabuf_fd, &input_params) == -1) { - RTC_LOG(LS_ERROR) << __FUNCTION__ << " Failed to NvBufferCreateEx"; - return scaled_buffer; - } + NvBufSurfaceAllocateParams input_params = {0}; + input_params.params.width = buffer_width; + input_params.params.height = buffer_height; + input_params.params.layout = NVBUF_LAYOUT_PITCH; + input_params.params.colorFormat = NVBUF_COLOR_FORMAT_YUV420; + input_params.memtag = NvBufSurfaceTag_NONE; + + NvBufSurface* dst_surface = new NvBufSurface; + dst_surface->memType = NVBUF_MEM_SURFACE_ARRAY; + + NvBufSurface* dst_surfaces[] = {dst_surface}; - NvBufferParams params = {0}; - if (NvBufferGetParams(fd_, ¶ms) == -1) { - RTC_LOG(LS_ERROR) << __FUNCTION__ << " Failed to NvBufferGetParams"; + if (-1 == + NvBufSurfaceAllocate( + dst_surfaces, + 1, /* NvUtils では複数のバッファーを同時に初期化できるようになったため、バッファーの数を指定する */ + &input_params)) { + RTC_LOG(LS_ERROR) << __FUNCTION__ << " Failed to NvBufSurfaceAllocate"; return scaled_buffer; } + NvBufSurfaceParams params = dst_surfaces[0]->surfaceList[0]; - NvBufferRect src_rect, dest_rect; + NvBufSurfTransformRect src_rect, dest_rect; src_rect.top = 0; src_rect.left = 0; - src_rect.width = params.width[0]; - src_rect.height = params.height[0]; + src_rect.width = params.width; + src_rect.height = params.height; dest_rect.top = 0; dest_rect.left = 0; dest_rect.width = buffer_width; dest_rect.height = buffer_height; - NvBufferTransformParams trans_params; + NvBufSurfTransformParams trans_params; memset(&trans_params, 0, sizeof(trans_params)); - trans_params.transform_flag = NVBUFFER_TRANSFORM_FILTER; - trans_params.transform_flip = NvBufferTransform_None; - trans_params.transform_filter = NvBufferTransform_Filter_Smart; - trans_params.src_rect = src_rect; - trans_params.dst_rect = dest_rect; - - if (NvBufferTransform(fd_, dmabuf_fd, &trans_params) == -1) { - RTC_LOG(LS_ERROR) << __FUNCTION__ << " Failed to NvBufferTransform"; + trans_params.transform_flag = NVBUFSURF_TRANSFORM_FILTER; + trans_params.transform_flip = NvBufSurfTransform_None; + trans_params.transform_filter = NvBufSurfTransformInter_Algo3; + trans_params.src_rect = &src_rect; + trans_params.dst_rect = &dest_rect; + + // NvBufSurfaceFromFd で fd_ を NvBufSurface に変換する + // 参照:_install/ubuntu-20.04_armv8_jetson/release/rootfs/usr/src/jetson_multimedia_api/samples/12_v4l2_camera_cuda/camera_v4l2_cuda.cpp + NvBufSurface* src_surface = NULL; + if (-1 == NvBufSurfaceFromFd(fd_, (void**)(&src_surface))) { + RTC_LOG(LS_ERROR) << __FUNCTION__ << "Failed to get NvBufSurface from FD"; return scaled_buffer; } - NvBufferParams dmabuf_params = {0}; - if (NvBufferGetParams(dmabuf_fd, &dmabuf_params) == -1) { - RTC_LOG(LS_ERROR) << __FUNCTION__ << " Failed to NvBufferGetParams"; + if (NvBufSurfTransform(src_surface, dst_surface, &trans_params) != + NvBufSurfTransformError_Success) { + RTC_LOG(LS_ERROR) << __FUNCTION__ << " Failed to NvBufSurfTransform"; return scaled_buffer; } int ret; void* data_addr; uint8_t* dest_addr; - for (int plane = 0; plane < dmabuf_params.num_planes; plane++) { - ret = NvBufferMemMap(dmabuf_fd, plane, NvBufferMem_Read, &data_addr); + int num_planes = dst_surface->surfaceList[0].planeParams.num_planes; + int index = 0; + for (int plane = 0; plane < num_planes; plane++) { + ret = NvBufSurfaceMap(dst_surface, index, plane, NVBUF_MAP_READ); if (ret == 0) { - NvBufferMemSyncForCpu(dmabuf_fd, plane, &data_addr); + NvBufSurfaceSyncForCpu(dst_surface, index, plane); + data_addr = dst_surface->surfaceList->mappedAddr.addr; int height, width; if (plane == 0) { dest_addr = scaled_buffer.get()->MutableDataY(); @@ -134,18 +143,19 @@ rtc::scoped_refptr JetsonBuffer::ToI420() { } for (int i = 0; i < height; i++) { memcpy(dest_addr + width * i, - (uint8_t*)data_addr + dmabuf_params.pitch[plane] * i, width); + (uint8_t*)data_addr + dst_surface->surfaceList->pitch * i, + width); } } - NvBufferMemUnMap(dmabuf_fd, plane, &data_addr); + NvBufSurfaceUnMap(dst_surface, index, plane); if (ret == -1) { RTC_LOG(LS_ERROR) << __FUNCTION__ - << " Failed to NvBufferMemMap plane=" << plane; + << " Failed to NvBufSurfaceMap plane=" << plane; return scaled_buffer; } } - NvBufferDestroy(dmabuf_fd); + NvBufSurfaceDestroy(dst_surface); return scaled_buffer; } else { diff --git a/src/hwenc_jetson/jetson_video_decoder.cpp b/src/hwenc_jetson/jetson_video_decoder.cpp index 4bb9d805..9de4b63f 100644 --- a/src/hwenc_jetson/jetson_video_decoder.cpp +++ b/src/hwenc_jetson/jetson_video_decoder.cpp @@ -22,7 +22,8 @@ #include // L4T Multimedia API -#include +#include +#include // Jetson Linux Multimedia API #include @@ -48,7 +49,7 @@ JetsonVideoDecoder::JetsonVideoDecoder(webrtc::VideoCodecType codec) buffer_pool_(false, 300 /* max_number_of_buffers*/), eos_(false), got_error_(false), - dst_dma_fd_(-1) {} + dst_surface_(nullptr) {} JetsonVideoDecoder::~JetsonVideoDecoder() { Release(); @@ -217,9 +218,8 @@ bool JetsonVideoDecoder::JetsonRelease() { delete decoder_; decoder_ = nullptr; } - if (dst_dma_fd_ != -1) { - NvBufferDestroy(dst_dma_fd_); - dst_dma_fd_ = -1; + if (dst_surface_ != nullptr) { + NvBufSurfaceDestroy(dst_surface_); } return true; } @@ -282,6 +282,7 @@ void JetsonVideoDecoder::CaptureLoop() { } NvBuffer* buffer; + while (1) { struct v4l2_buffer v4l2_buf; struct v4l2_plane planes[MAX_PLANES]; @@ -305,7 +306,7 @@ void JetsonVideoDecoder::CaptureLoop() { uint64_t pts = v4l2_buf.timestamp.tv_sec * rtc::kNumMicrosecsPerSec + v4l2_buf.timestamp.tv_usec; - NvBufferRect src_rect, dest_rect; + NvBufSurfTransformRect src_rect, dest_rect; src_rect.top = capture_crop_->c.top; src_rect.left = capture_crop_->c.left; src_rect.width = capture_crop_->c.width; @@ -315,16 +316,24 @@ void JetsonVideoDecoder::CaptureLoop() { dest_rect.width = capture_crop_->c.width; dest_rect.height = capture_crop_->c.height; - NvBufferTransformParams transform_params; + NvBufSurfTransformParams transform_params; memset(&transform_params, 0, sizeof(transform_params)); - transform_params.transform_flag = NVBUFFER_TRANSFORM_FILTER; - transform_params.transform_flip = NvBufferTransform_None; - transform_params.transform_filter = NvBufferTransform_Filter_Smart; - transform_params.src_rect = src_rect; - transform_params.dst_rect = dest_rect; + transform_params.transform_flag = NVBUFSURF_TRANSFORM_FILTER; + transform_params.transform_flip = NvBufSurfTransform_None; + transform_params.transform_filter = NvBufSurfTransformInter_Algo3; + transform_params.src_rect = &src_rect; + transform_params.dst_rect = &dest_rect; + + NvBufSurface* src_surface = NULL; + if (-1 == + NvBufSurfaceFromFd(buffer->planes[0].fd, (void**)(&src_surface))) { + RTC_LOG(LS_ERROR) << __FUNCTION__ << "Failed to NvBufSurfaceFromFd"; + got_error_ = true; + break; + } + // 何が来ても YUV420 に変換する - ret = NvBufferTransform(buffer->planes[0].fd, dst_dma_fd_, - &transform_params); + ret = NvBufSurfTransform(src_surface, dst_surface_, &transform_params); if (ret == -1) { RTC_LOG(LS_ERROR) << __FUNCTION__ << " Transform failed"; break; @@ -341,9 +350,6 @@ void JetsonVideoDecoder::CaptureLoop() { break; } - NvBufferParams parm; - ret = NvBufferGetParams(dst_dma_fd_, &parm); - void* src_data; uint8_t* dst_data; int dst_stride; @@ -360,13 +366,18 @@ void JetsonVideoDecoder::CaptureLoop() { } else { break; } - ret = NvBufferMemMap(dst_dma_fd_, i, NvBufferMem_Read, &src_data); - NvBufferMemSyncForCpu(dst_dma_fd_, i, &src_data); - for (uint32_t j = 0; j < parm.height[i]; j++) { - memcpy(dst_data + j * dst_stride, (char*)src_data + j * parm.pitch[i], - parm.width[i]); + + ret = NvBufSurfaceMap(dst_surface_, 0, i, NVBUF_MAP_READ); + NvBufSurfaceSyncForCpu(dst_surface_, 0, i); + src_data = dst_surface_->surfaceList[0].mappedAddr.addr; + + NvBufSurfacePlaneParams params = + dst_surface_->surfaceList[0].planeParams; + for (uint32_t j = 0; j < params.height[i]; j++) { + memcpy(dst_data + j * dst_stride, + (char*)src_data + j * params.pitch[i], params.width[i]); } - NvBufferMemUnMap(dst_dma_fd_, i, &src_data); + NvBufSurfaceUnMap(dst_surface_, 0, i); } webrtc::VideoFrame decoded_image = @@ -406,21 +417,24 @@ int JetsonVideoDecoder::SetCapture() { << capture_crop_->c.left << " " << capture_crop_->c.width << "x" << format.fmt.pix_mp.height; - if (dst_dma_fd_ != -1) { - NvBufferDestroy(dst_dma_fd_); - dst_dma_fd_ = -1; + if (dst_surface_ != nullptr) { + NvBufSurfaceDestroy(dst_surface_); } - NvBufferCreateParams input_params = {0}; - input_params.payloadType = NvBufferPayload_SurfArray; - input_params.width = capture_crop_->c.width; - input_params.height = capture_crop_->c.height; - input_params.layout = NvBufferLayout_Pitch; - input_params.colorFormat = NvBufferColorFormat_YUV420; - input_params.nvbuf_tag = NvBufferTag_VIDEO_DEC; + NvBufSurfaceAllocateParams input_params = {0}; + input_params.params.width = capture_crop_->c.width; + input_params.params.height = capture_crop_->c.height; + input_params.params.layout = NVBUF_LAYOUT_PITCH; + input_params.params.colorFormat = NVBUF_COLOR_FORMAT_YUV420; + input_params.memtag = NvBufSurfaceTag_VIDEO_DEC; + + dst_surface_ = new NvBufSurface; + dst_surface_->memType = NVBUF_MEM_SURFACE_ARRAY; + + NvBufSurface* dst_surfaces[] = {dst_surface_}; - ret = NvBufferCreateEx(&dst_dma_fd_, &input_params); - INIT_ERROR(ret == -1, "create dmabuf failed"); + ret = NvBufSurfaceAllocate(dst_surfaces, 1, &input_params); + INIT_ERROR(ret == -1, "failed to NvBufSurfaceAllocate"); decoder_->capture_plane.deinitPlane(); diff --git a/src/hwenc_jetson/jetson_video_encoder.cpp b/src/hwenc_jetson/jetson_video_encoder.cpp index bbf8c582..a224d2be 100644 --- a/src/hwenc_jetson/jetson_video_encoder.cpp +++ b/src/hwenc_jetson/jetson_video_encoder.cpp @@ -28,7 +28,7 @@ // L4T Multimedia API #include #include -#include +#include #include "sora/hwenc_jetson/jetson_buffer.h" @@ -748,11 +748,20 @@ int32_t JetsonVideoEncoder::Encode( input_frame.timestamp_us() % rtc::kNumMicrosecsPerSec; for (int i = 0; i < MAX_PLANES; i++) { - if (NvBufferMemSyncForDevice(buffer->planes[i].fd, i, - (void**)&buffer->planes[i].data) < 0) { - RTC_LOG(LS_ERROR) << "Failed to NvBufferMemSyncForDevice"; + // JetPack 5.2.1 対応で NvBufferMemSyncForDevice を NvBufSurfaceSyncForDevice に置き換える際に、 + // fd から NvBufSurface を作成する必要があった + NvBufSurface* surface = NULL; + if (-1 == NvBufSurfaceFromFd(buffer->planes[i].fd, (void**)(&surface))) { + RTC_LOG(LS_ERROR) << __FUNCTION__ << "Failed to NvBufSurfaceFromFd"; return WEBRTC_VIDEO_CODEC_ERROR; } + + if (NvBufSurfaceSyncForDevice(surface, 0, i) < 0) { + RTC_LOG(LS_ERROR) << "Failed to NvBufSurfaceSyncForDevice"; + return WEBRTC_VIDEO_CODEC_ERROR; + } + + NvBufSurfaceDestroy(surface); } if (encoder_->output_plane.qBuffer(v4l2_buf, nullptr) < 0) { From 01998f5cc93b077655710b0a8ff5da496e0d9b49 Mon Sep 17 00:00:00 2001 From: enm10k Date: Thu, 5 Oct 2023 17:15:42 +0900 Subject: [PATCH 03/11] =?UTF-8?q?jetson=5Fvideo=5Fdecoder=20=E3=81=8C?= =?UTF-8?q?=E8=90=BD=E3=81=A1=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=9F?= =?UTF-8?q?=20(=E7=B7=91=E3=81=AE=E7=94=BB=E9=9D=A2=E3=81=8C=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=81=95=E3=82=8C=E3=82=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hwenc_jetson/jetson_buffer.cpp | 3 ++- src/hwenc_jetson/jetson_video_decoder.cpp | 10 ++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/hwenc_jetson/jetson_buffer.cpp b/src/hwenc_jetson/jetson_buffer.cpp index 6ef8bf9f..77832a99 100644 --- a/src/hwenc_jetson/jetson_buffer.cpp +++ b/src/hwenc_jetson/jetson_buffer.cpp @@ -143,7 +143,8 @@ rtc::scoped_refptr JetsonBuffer::ToI420() { } for (int i = 0; i < height; i++) { memcpy(dest_addr + width * i, - (uint8_t*)data_addr + dst_surface->surfaceList->pitch * i, + (uint8_t*)data_addr + + dst_surface->surfaceList->planeParams.pitch[i] * i, width); } } diff --git a/src/hwenc_jetson/jetson_video_decoder.cpp b/src/hwenc_jetson/jetson_video_decoder.cpp index 9de4b63f..9bcf9e04 100644 --- a/src/hwenc_jetson/jetson_video_decoder.cpp +++ b/src/hwenc_jetson/jetson_video_decoder.cpp @@ -220,6 +220,7 @@ bool JetsonVideoDecoder::JetsonRelease() { } if (dst_surface_ != nullptr) { NvBufSurfaceDestroy(dst_surface_); + dst_surface_ = nullptr; } return true; } @@ -419,6 +420,7 @@ int JetsonVideoDecoder::SetCapture() { if (dst_surface_ != nullptr) { NvBufSurfaceDestroy(dst_surface_); + dst_surface_ = nullptr; } NvBufSurfaceAllocateParams input_params = {0}; @@ -426,14 +428,10 @@ int JetsonVideoDecoder::SetCapture() { input_params.params.height = capture_crop_->c.height; input_params.params.layout = NVBUF_LAYOUT_PITCH; input_params.params.colorFormat = NVBUF_COLOR_FORMAT_YUV420; + input_params.params.memType = NVBUF_MEM_SURFACE_ARRAY; input_params.memtag = NvBufSurfaceTag_VIDEO_DEC; - dst_surface_ = new NvBufSurface; - dst_surface_->memType = NVBUF_MEM_SURFACE_ARRAY; - - NvBufSurface* dst_surfaces[] = {dst_surface_}; - - ret = NvBufSurfaceAllocate(dst_surfaces, 1, &input_params); + ret = NvBufSurfaceAllocate(&dst_surface_, 1, &input_params); INIT_ERROR(ret == -1, "failed to NvBufSurfaceAllocate"); decoder_->capture_plane.deinitPlane(); From 1d354ed7a431eeb37fee0a97ed0cb61731865ea7 Mon Sep 17 00:00:00 2001 From: enm10k Date: Thu, 5 Oct 2023 18:32:52 +0900 Subject: [PATCH 04/11] =?UTF-8?q?jetson=5Fvideo=5Fdecoder=20=E3=81=A7?= =?UTF-8?q?=E6=98=A0=E5=83=8F=E3=81=8C=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sora/hwenc_jetson/jetson_video_decoder.h | 4 +- src/hwenc_jetson/jetson_buffer.cpp | 14 ++-- src/hwenc_jetson/jetson_video_decoder.cpp | 76 ++++++++++--------- src/hwenc_jetson/jetson_video_encoder.cpp | 2 +- 4 files changed, 49 insertions(+), 47 deletions(-) diff --git a/include/sora/hwenc_jetson/jetson_video_decoder.h b/include/sora/hwenc_jetson/jetson_video_decoder.h index bb5c483e..b8cc9566 100644 --- a/include/sora/hwenc_jetson/jetson_video_decoder.h +++ b/include/sora/hwenc_jetson/jetson_video_decoder.h @@ -17,8 +17,6 @@ #include #include -#include - struct v4l2_crop; class NvV4l2Element; class NvVideoDecoder; @@ -61,7 +59,7 @@ class JetsonVideoDecoder : public webrtc::VideoDecoder { rtc::PlatformThread capture_loop_; std::atomic eos_; std::atomic got_error_; - NvBufSurface* dst_surface_; + int dst_dma_fd_; std::shared_ptr capture_crop_; }; diff --git a/src/hwenc_jetson/jetson_buffer.cpp b/src/hwenc_jetson/jetson_buffer.cpp index 77832a99..6cd5b9ae 100644 --- a/src/hwenc_jetson/jetson_buffer.cpp +++ b/src/hwenc_jetson/jetson_buffer.cpp @@ -68,22 +68,20 @@ rtc::scoped_refptr JetsonBuffer::ToI420() { input_params.params.height = buffer_height; input_params.params.layout = NVBUF_LAYOUT_PITCH; input_params.params.colorFormat = NVBUF_COLOR_FORMAT_YUV420; + input_params.params.memType = NVBUF_MEM_SURFACE_ARRAY; input_params.memtag = NvBufSurfaceTag_NONE; - NvBufSurface* dst_surface = new NvBufSurface; - dst_surface->memType = NVBUF_MEM_SURFACE_ARRAY; - - NvBufSurface* dst_surfaces[] = {dst_surface}; + NvBufSurface* dst_surface = 0; if (-1 == NvBufSurfaceAllocate( - dst_surfaces, + &dst_surface, 1, /* NvUtils では複数のバッファーを同時に初期化できるようになったため、バッファーの数を指定する */ &input_params)) { RTC_LOG(LS_ERROR) << __FUNCTION__ << " Failed to NvBufSurfaceAllocate"; return scaled_buffer; } - NvBufSurfaceParams params = dst_surfaces[0]->surfaceList[0]; + NvBufSurfaceParams params = dst_surface->surfaceList[0]; NvBufSurfTransformRect src_rect, dest_rect; src_rect.top = 0; @@ -120,13 +118,13 @@ rtc::scoped_refptr JetsonBuffer::ToI420() { int ret; void* data_addr; uint8_t* dest_addr; - int num_planes = dst_surface->surfaceList[0].planeParams.num_planes; + int num_planes = dst_surface->surfaceList->planeParams.num_planes; int index = 0; for (int plane = 0; plane < num_planes; plane++) { ret = NvBufSurfaceMap(dst_surface, index, plane, NVBUF_MAP_READ); if (ret == 0) { NvBufSurfaceSyncForCpu(dst_surface, index, plane); - data_addr = dst_surface->surfaceList->mappedAddr.addr; + data_addr = dst_surface->surfaceList->mappedAddr.addr[plane]; int height, width; if (plane == 0) { dest_addr = scaled_buffer.get()->MutableDataY(); diff --git a/src/hwenc_jetson/jetson_video_decoder.cpp b/src/hwenc_jetson/jetson_video_decoder.cpp index 9bcf9e04..091fe3b2 100644 --- a/src/hwenc_jetson/jetson_video_decoder.cpp +++ b/src/hwenc_jetson/jetson_video_decoder.cpp @@ -26,6 +26,7 @@ #include // Jetson Linux Multimedia API +#include #include #define INIT_ERROR(cond, desc) \ @@ -49,7 +50,7 @@ JetsonVideoDecoder::JetsonVideoDecoder(webrtc::VideoCodecType codec) buffer_pool_(false, 300 /* max_number_of_buffers*/), eos_(false), got_error_(false), - dst_surface_(nullptr) {} + dst_dma_fd_(-1) {} JetsonVideoDecoder::~JetsonVideoDecoder() { Release(); @@ -218,9 +219,9 @@ bool JetsonVideoDecoder::JetsonRelease() { delete decoder_; decoder_ = nullptr; } - if (dst_surface_ != nullptr) { - NvBufSurfaceDestroy(dst_surface_); - dst_surface_ = nullptr; + if (dst_dma_fd_ != -1) { + NvBufSurf::NvDestroy(dst_dma_fd_); + dst_dma_fd_ = -1; } return true; } @@ -317,24 +318,23 @@ void JetsonVideoDecoder::CaptureLoop() { dest_rect.width = capture_crop_->c.width; dest_rect.height = capture_crop_->c.height; - NvBufSurfTransformParams transform_params; + NvBufSurf::NvCommonTransformParams transform_params; memset(&transform_params, 0, sizeof(transform_params)); - transform_params.transform_flag = NVBUFSURF_TRANSFORM_FILTER; - transform_params.transform_flip = NvBufSurfTransform_None; - transform_params.transform_filter = NvBufSurfTransformInter_Algo3; - transform_params.src_rect = &src_rect; - transform_params.dst_rect = &dest_rect; - - NvBufSurface* src_surface = NULL; - if (-1 == - NvBufSurfaceFromFd(buffer->planes[0].fd, (void**)(&src_surface))) { - RTC_LOG(LS_ERROR) << __FUNCTION__ << "Failed to NvBufSurfaceFromFd"; - got_error_ = true; - break; - } + transform_params.src_top = capture_crop_->c.top; + transform_params.src_left = capture_crop_->c.left; + transform_params.src_width = capture_crop_->c.width; + transform_params.src_height = capture_crop_->c.height; + transform_params.dst_top = 0; + transform_params.dst_left = 0; + transform_params.dst_width = capture_crop_->c.width; + transform_params.dst_height = capture_crop_->c.height; + transform_params.flag = NVBUFSURF_TRANSFORM_FILTER; + transform_params.flip = NvBufSurfTransform_None; + transform_params.filter = NvBufSurfTransformInter_Algo3; // 何が来ても YUV420 に変換する - ret = NvBufSurfTransform(src_surface, dst_surface_, &transform_params); + ret = NvBufSurf::NvTransform(&transform_params, buffer->planes[0].fd, + dst_dma_fd_); if (ret == -1) { RTC_LOG(LS_ERROR) << __FUNCTION__ << " Transform failed"; break; @@ -368,17 +368,23 @@ void JetsonVideoDecoder::CaptureLoop() { break; } - ret = NvBufSurfaceMap(dst_surface_, 0, i, NVBUF_MAP_READ); - NvBufSurfaceSyncForCpu(dst_surface_, 0, i); - src_data = dst_surface_->surfaceList[0].mappedAddr.addr; + NvBufSurface* dst_surface = 0; + if (-1 == NvBufSurfaceFromFd(dst_dma_fd_, (void**)(&dst_surface))) { + RTC_LOG(LS_ERROR) << __FUNCTION__ << "Failed to NvBufSurfaceFromFd"; + break; + } + + ret = NvBufSurfaceMap(dst_surface, 0, i, NVBUF_MAP_READ); + NvBufSurfaceSyncForCpu(dst_surface, 0, i); + src_data = dst_surface->surfaceList[0].mappedAddr.addr[i]; NvBufSurfacePlaneParams params = - dst_surface_->surfaceList[0].planeParams; + dst_surface->surfaceList[0].planeParams; for (uint32_t j = 0; j < params.height[i]; j++) { memcpy(dst_data + j * dst_stride, (char*)src_data + j * params.pitch[i], params.width[i]); } - NvBufSurfaceUnMap(dst_surface_, 0, i); + NvBufSurfaceUnMap(dst_surface, 0, i); } webrtc::VideoFrame decoded_image = @@ -418,20 +424,20 @@ int JetsonVideoDecoder::SetCapture() { << capture_crop_->c.left << " " << capture_crop_->c.width << "x" << format.fmt.pix_mp.height; - if (dst_surface_ != nullptr) { - NvBufSurfaceDestroy(dst_surface_); - dst_surface_ = nullptr; + if (dst_dma_fd_ != -1) { + NvBufSurf::NvDestroy(dst_dma_fd_); + dst_dma_fd_ = -1; } - NvBufSurfaceAllocateParams input_params = {0}; - input_params.params.width = capture_crop_->c.width; - input_params.params.height = capture_crop_->c.height; - input_params.params.layout = NVBUF_LAYOUT_PITCH; - input_params.params.colorFormat = NVBUF_COLOR_FORMAT_YUV420; - input_params.params.memType = NVBUF_MEM_SURFACE_ARRAY; - input_params.memtag = NvBufSurfaceTag_VIDEO_DEC; + NvBufSurf::NvCommonAllocateParams cParams; + cParams.width = capture_crop_->c.width; + cParams.height = capture_crop_->c.height; + cParams.layout = NVBUF_LAYOUT_PITCH; + cParams.colorFormat = NVBUF_COLOR_FORMAT_YUV420; + cParams.memtag = NvBufSurfaceTag_VIDEO_ENC; + cParams.memType = NVBUF_MEM_SURFACE_ARRAY; - ret = NvBufSurfaceAllocate(&dst_surface_, 1, &input_params); + ret = NvBufSurf::NvAllocate(&cParams, 1, &dst_dma_fd_); INIT_ERROR(ret == -1, "failed to NvBufSurfaceAllocate"); decoder_->capture_plane.deinitPlane(); diff --git a/src/hwenc_jetson/jetson_video_encoder.cpp b/src/hwenc_jetson/jetson_video_encoder.cpp index a224d2be..914eaf92 100644 --- a/src/hwenc_jetson/jetson_video_encoder.cpp +++ b/src/hwenc_jetson/jetson_video_encoder.cpp @@ -750,7 +750,7 @@ int32_t JetsonVideoEncoder::Encode( for (int i = 0; i < MAX_PLANES; i++) { // JetPack 5.2.1 対応で NvBufferMemSyncForDevice を NvBufSurfaceSyncForDevice に置き換える際に、 // fd から NvBufSurface を作成する必要があった - NvBufSurface* surface = NULL; + NvBufSurface* surface = 0; if (-1 == NvBufSurfaceFromFd(buffer->planes[i].fd, (void**)(&surface))) { RTC_LOG(LS_ERROR) << __FUNCTION__ << "Failed to NvBufSurfaceFromFd"; return WEBRTC_VIDEO_CODEC_ERROR; From e6ca0622894a65ac9e273ec0310701717c532452 Mon Sep 17 00:00:00 2001 From: enm10k Date: Fri, 6 Oct 2023 14:04:11 +0900 Subject: [PATCH 05/11] =?UTF-8?q?jetson=5Fvideo=5Fencoder=20=E3=81=8C?= =?UTF-8?q?=E5=8B=95=E3=81=84=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hwenc_jetson/jetson_video_encoder.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hwenc_jetson/jetson_video_encoder.cpp b/src/hwenc_jetson/jetson_video_encoder.cpp index 914eaf92..c227d9a0 100644 --- a/src/hwenc_jetson/jetson_video_encoder.cpp +++ b/src/hwenc_jetson/jetson_video_encoder.cpp @@ -748,8 +748,6 @@ int32_t JetsonVideoEncoder::Encode( input_frame.timestamp_us() % rtc::kNumMicrosecsPerSec; for (int i = 0; i < MAX_PLANES; i++) { - // JetPack 5.2.1 対応で NvBufferMemSyncForDevice を NvBufSurfaceSyncForDevice に置き換える際に、 - // fd から NvBufSurface を作成する必要があった NvBufSurface* surface = 0; if (-1 == NvBufSurfaceFromFd(buffer->planes[i].fd, (void**)(&surface))) { RTC_LOG(LS_ERROR) << __FUNCTION__ << "Failed to NvBufSurfaceFromFd"; @@ -761,7 +759,9 @@ int32_t JetsonVideoEncoder::Encode( return WEBRTC_VIDEO_CODEC_ERROR; } - NvBufSurfaceDestroy(surface); + // ここで NvBufSurfaceDestroy が必要かなと思ったが、以下のサンプル・コードを確認したところ不要そうだった + // 参照: jetson_multimedia_api/samples/01_video_encode/video_encode_main.cpp + // NvBufSurfaceDestroy(surface); } if (encoder_->output_plane.qBuffer(v4l2_buf, nullptr) < 0) { From c9f432edcaeee71512599540ba9ddb904ad2a9a9 Mon Sep 17 00:00:00 2001 From: enm10k Date: Fri, 6 Oct 2023 14:36:31 +0900 Subject: [PATCH 06/11] =?UTF-8?q?=E5=A4=89=E6=95=B0=E5=90=8D=E3=82=84?= =?UTF-8?q?=E6=9B=B8=E3=81=8D=E6=96=B9=E3=82=92=E6=8F=83=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hwenc_jetson/jetson_buffer.cpp | 39 +++++++++++------------ src/hwenc_jetson/jetson_video_decoder.cpp | 15 ++++----- src/hwenc_jetson/jetson_video_encoder.cpp | 8 ++--- 3 files changed, 29 insertions(+), 33 deletions(-) diff --git a/src/hwenc_jetson/jetson_buffer.cpp b/src/hwenc_jetson/jetson_buffer.cpp index 6cd5b9ae..3fdd31aa 100644 --- a/src/hwenc_jetson/jetson_buffer.cpp +++ b/src/hwenc_jetson/jetson_buffer.cpp @@ -71,17 +71,16 @@ rtc::scoped_refptr JetsonBuffer::ToI420() { input_params.params.memType = NVBUF_MEM_SURFACE_ARRAY; input_params.memtag = NvBufSurfaceTag_NONE; - NvBufSurface* dst_surface = 0; + NvBufSurface* dst_surf = 0; - if (-1 == - NvBufSurfaceAllocate( - &dst_surface, - 1, /* NvUtils では複数のバッファーを同時に初期化できるようになったため、バッファーの数を指定する */ - &input_params)) { + if (NvBufSurfaceAllocate( + &dst_surf, + 1, /* NvUtils では複数のバッファーを同時に初期化できるため、バッファーの数を指定する */ + &input_params) == -1) { RTC_LOG(LS_ERROR) << __FUNCTION__ << " Failed to NvBufSurfaceAllocate"; return scaled_buffer; } - NvBufSurfaceParams params = dst_surface->surfaceList[0]; + NvBufSurfaceParams params = dst_surf->surfaceList[0]; NvBufSurfTransformRect src_rect, dest_rect; src_rect.top = 0; @@ -101,15 +100,13 @@ rtc::scoped_refptr JetsonBuffer::ToI420() { trans_params.src_rect = &src_rect; trans_params.dst_rect = &dest_rect; - // NvBufSurfaceFromFd で fd_ を NvBufSurface に変換する - // 参照:_install/ubuntu-20.04_armv8_jetson/release/rootfs/usr/src/jetson_multimedia_api/samples/12_v4l2_camera_cuda/camera_v4l2_cuda.cpp - NvBufSurface* src_surface = NULL; - if (-1 == NvBufSurfaceFromFd(fd_, (void**)(&src_surface))) { - RTC_LOG(LS_ERROR) << __FUNCTION__ << "Failed to get NvBufSurface from FD"; + NvBufSurface* src_surf = 0; + if (NvBufSurfaceFromFd(fd_, (void**)(&src_surf)) == -1) { + RTC_LOG(LS_ERROR) << __FUNCTION__ << " Failed to NvBufSurfaceFromFd"; return scaled_buffer; } - if (NvBufSurfTransform(src_surface, dst_surface, &trans_params) != + if (NvBufSurfTransform(src_surf, dst_surf, &trans_params) != NvBufSurfTransformError_Success) { RTC_LOG(LS_ERROR) << __FUNCTION__ << " Failed to NvBufSurfTransform"; return scaled_buffer; @@ -118,13 +115,13 @@ rtc::scoped_refptr JetsonBuffer::ToI420() { int ret; void* data_addr; uint8_t* dest_addr; - int num_planes = dst_surface->surfaceList->planeParams.num_planes; + int num_planes = dst_surf->surfaceList->planeParams.num_planes; int index = 0; for (int plane = 0; plane < num_planes; plane++) { - ret = NvBufSurfaceMap(dst_surface, index, plane, NVBUF_MAP_READ); + ret = NvBufSurfaceMap(dst_surf, index, plane, NVBUF_MAP_READ); if (ret == 0) { - NvBufSurfaceSyncForCpu(dst_surface, index, plane); - data_addr = dst_surface->surfaceList->mappedAddr.addr[plane]; + NvBufSurfaceSyncForCpu(dst_surf, index, plane); + data_addr = dst_surf->surfaceList->mappedAddr.addr[plane]; int height, width; if (plane == 0) { dest_addr = scaled_buffer.get()->MutableDataY(); @@ -142,19 +139,19 @@ rtc::scoped_refptr JetsonBuffer::ToI420() { for (int i = 0; i < height; i++) { memcpy(dest_addr + width * i, (uint8_t*)data_addr + - dst_surface->surfaceList->planeParams.pitch[i] * i, + dst_surf->surfaceList->planeParams.pitch[i] * i, width); } } - NvBufSurfaceUnMap(dst_surface, index, plane); + NvBufSurfaceUnMap(dst_surf, index, plane); if (ret == -1) { RTC_LOG(LS_ERROR) << __FUNCTION__ - << " Failed to NvBufSurfaceMap plane=" << plane; + << " Failed to NvBufSurfaceUnMap plane=" << plane; return scaled_buffer; } } - NvBufSurfaceDestroy(dst_surface); + NvBufSurfaceDestroy(dst_surf); return scaled_buffer; } else { diff --git a/src/hwenc_jetson/jetson_video_decoder.cpp b/src/hwenc_jetson/jetson_video_decoder.cpp index 091fe3b2..4394dbe9 100644 --- a/src/hwenc_jetson/jetson_video_decoder.cpp +++ b/src/hwenc_jetson/jetson_video_decoder.cpp @@ -368,23 +368,22 @@ void JetsonVideoDecoder::CaptureLoop() { break; } - NvBufSurface* dst_surface = 0; - if (-1 == NvBufSurfaceFromFd(dst_dma_fd_, (void**)(&dst_surface))) { + NvBufSurface* dst_surf = 0; + if (NvBufSurfaceFromFd(dst_dma_fd_, (void**)(&dst_surf)) == -1) { RTC_LOG(LS_ERROR) << __FUNCTION__ << "Failed to NvBufSurfaceFromFd"; break; } - ret = NvBufSurfaceMap(dst_surface, 0, i, NVBUF_MAP_READ); - NvBufSurfaceSyncForCpu(dst_surface, 0, i); - src_data = dst_surface->surfaceList[0].mappedAddr.addr[i]; + ret = NvBufSurfaceMap(dst_surf, 0, i, NVBUF_MAP_READ); + NvBufSurfaceSyncForCpu(dst_surf, 0, i); + src_data = dst_surf->surfaceList[0].mappedAddr.addr[i]; - NvBufSurfacePlaneParams params = - dst_surface->surfaceList[0].planeParams; + NvBufSurfacePlaneParams params = dst_surf->surfaceList[0].planeParams; for (uint32_t j = 0; j < params.height[i]; j++) { memcpy(dst_data + j * dst_stride, (char*)src_data + j * params.pitch[i], params.width[i]); } - NvBufSurfaceUnMap(dst_surface, 0, i); + NvBufSurfaceUnMap(dst_surf, 0, i); } webrtc::VideoFrame decoded_image = diff --git a/src/hwenc_jetson/jetson_video_encoder.cpp b/src/hwenc_jetson/jetson_video_encoder.cpp index c227d9a0..2118d746 100644 --- a/src/hwenc_jetson/jetson_video_encoder.cpp +++ b/src/hwenc_jetson/jetson_video_encoder.cpp @@ -748,20 +748,20 @@ int32_t JetsonVideoEncoder::Encode( input_frame.timestamp_us() % rtc::kNumMicrosecsPerSec; for (int i = 0; i < MAX_PLANES; i++) { - NvBufSurface* surface = 0; - if (-1 == NvBufSurfaceFromFd(buffer->planes[i].fd, (void**)(&surface))) { + NvBufSurface* surf = 0; + if (NvBufSurfaceFromFd(buffer->planes[i].fd, (void**)(&surf)) == -1) { RTC_LOG(LS_ERROR) << __FUNCTION__ << "Failed to NvBufSurfaceFromFd"; return WEBRTC_VIDEO_CODEC_ERROR; } - if (NvBufSurfaceSyncForDevice(surface, 0, i) < 0) { + if (NvBufSurfaceSyncForDevice(surf, 0, i) == -1) { RTC_LOG(LS_ERROR) << "Failed to NvBufSurfaceSyncForDevice"; return WEBRTC_VIDEO_CODEC_ERROR; } // ここで NvBufSurfaceDestroy が必要かなと思ったが、以下のサンプル・コードを確認したところ不要そうだった // 参照: jetson_multimedia_api/samples/01_video_encode/video_encode_main.cpp - // NvBufSurfaceDestroy(surface); + // NvBufSurfaceDestroy(surf); } if (encoder_->output_plane.qBuffer(v4l2_buf, nullptr) < 0) { From e45af9bcaf6acd899dded46309a1cb68371edea0 Mon Sep 17 00:00:00 2001 From: enm10k Date: Fri, 6 Oct 2023 17:40:34 +0900 Subject: [PATCH 07/11] =?UTF-8?q?jetson=5Fbuffer=20=E3=81=A7=E8=90=BD?= =?UTF-8?q?=E3=81=A1=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=9F=E3=81=8C?= =?UTF-8?q?=E3=80=81=E5=90=8C=E3=81=98=E3=83=95=E3=83=AC=E3=83=BC=E3=83=A0?= =?UTF-8?q?=E3=81=8C=E9=80=81=E4=BF=A1=E3=81=95=E3=82=8C=E7=B6=9A=E3=81=91?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hwenc_jetson/jetson_buffer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hwenc_jetson/jetson_buffer.cpp b/src/hwenc_jetson/jetson_buffer.cpp index 3fdd31aa..b1a695fd 100644 --- a/src/hwenc_jetson/jetson_buffer.cpp +++ b/src/hwenc_jetson/jetson_buffer.cpp @@ -139,7 +139,7 @@ rtc::scoped_refptr JetsonBuffer::ToI420() { for (int i = 0; i < height; i++) { memcpy(dest_addr + width * i, (uint8_t*)data_addr + - dst_surf->surfaceList->planeParams.pitch[i] * i, + dst_surf->surfaceList->planeParams.pitch[plane] * i, width); } } From 7e5c4d47414bd6bae74beeb869ef84ccd7c6bc57 Mon Sep 17 00:00:00 2001 From: enm10k Date: Tue, 26 Dec 2023 14:10:22 +0900 Subject: [PATCH 08/11] =?UTF-8?q?JetPack=205.1.2=20=E3=81=A7=E5=90=8C?= =?UTF-8?q?=E3=81=98=E3=83=95=E3=83=AC=E3=83=BC=E3=83=A0=E3=81=8C=E9=80=81?= =?UTF-8?q?=E4=BF=A1=E3=81=95=E3=82=8C=E7=B6=9A=E3=81=91=E3=82=8B=E5=95=8F?= =?UTF-8?q?=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hwenc_jetson/jetson_jpeg_decoder_pool.cpp | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/hwenc_jetson/jetson_jpeg_decoder_pool.cpp b/src/hwenc_jetson/jetson_jpeg_decoder_pool.cpp index 84c279aa..f0b33176 100644 --- a/src/hwenc_jetson/jetson_jpeg_decoder_pool.cpp +++ b/src/hwenc_jetson/jetson_jpeg_decoder_pool.cpp @@ -11,15 +11,19 @@ namespace sora { std::shared_ptr JetsonJpegDecoderPool::Pop() { std::shared_ptr nv_decoder; - { - std::lock_guard lock(mtx_); - if (decoder_queue_.size() == 0) { - nv_decoder.reset(NvJPEGDecoder::createJPEGDecoder("jpegdec")); - } else { - nv_decoder = std::move(decoder_queue_.front()); - decoder_queue_.pop(); - } - } + // JetPack 5.1.2 で同じフレームが送信され続ける問題が発生したため、キューを無効化した + // JetPack 5.1.1 では正常に動作していた + // momo で同様の問題に対応した際の PR: https://github.com/shiguredo/momo/pull/297/ + // { + // std::lock_guard lock(mtx_); + // if (decoder_queue_.size() == 0) { + // nv_decoder.reset(NvJPEGDecoder::createJPEGDecoder("jpegdec")); + // } else { + // nv_decoder = std::move(decoder_queue_.front()); + // decoder_queue_.pop(); + // } + // } + nv_decoder.reset(NvJPEGDecoder::createJPEGDecoder("jpegdec")); std::shared_ptr decoder( new JetsonJpegDecoder(shared_from_this(), std::move(nv_decoder))); @@ -28,7 +32,7 @@ std::shared_ptr JetsonJpegDecoderPool::Pop() { void JetsonJpegDecoderPool::Push(std::shared_ptr decoder) { std::lock_guard lock(mtx_); - decoder_queue_.push(std::move(decoder)); + // decoder_queue_.push(std::move(decoder)); } } // namespace sora From 6a0463a6b7c88bc4fc1c6230d5feaf7405575d12 Mon Sep 17 00:00:00 2001 From: enm10k Date: Tue, 26 Dec 2023 15:28:55 +0900 Subject: [PATCH 09/11] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AB=E3=81=AA?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hwenc_jetson/jetson_video_decoder.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/hwenc_jetson/jetson_video_decoder.cpp b/src/hwenc_jetson/jetson_video_decoder.cpp index 4394dbe9..3bb00be6 100644 --- a/src/hwenc_jetson/jetson_video_decoder.cpp +++ b/src/hwenc_jetson/jetson_video_decoder.cpp @@ -308,16 +308,6 @@ void JetsonVideoDecoder::CaptureLoop() { uint64_t pts = v4l2_buf.timestamp.tv_sec * rtc::kNumMicrosecsPerSec + v4l2_buf.timestamp.tv_usec; - NvBufSurfTransformRect src_rect, dest_rect; - src_rect.top = capture_crop_->c.top; - src_rect.left = capture_crop_->c.left; - src_rect.width = capture_crop_->c.width; - src_rect.height = capture_crop_->c.height; - dest_rect.top = 0; - dest_rect.left = 0; - dest_rect.width = capture_crop_->c.width; - dest_rect.height = capture_crop_->c.height; - NvBufSurf::NvCommonTransformParams transform_params; memset(&transform_params, 0, sizeof(transform_params)); transform_params.src_top = capture_crop_->c.top; From 9698501abe33a005d2d50014f84a65a55907a4bd Mon Sep 17 00:00:00 2001 From: enm10k Date: Tue, 26 Dec 2023 17:48:14 +0900 Subject: [PATCH 10/11] =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=83=A1=E3=83=83?= =?UTF-8?q?=E3=82=BB=E3=83=BC=E3=82=B8=E3=81=8C=E8=AA=A4=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=81=AE=E3=81=A7=E4=BF=AE=E6=AD=A3=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hwenc_jetson/jetson_buffer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hwenc_jetson/jetson_buffer.cpp b/src/hwenc_jetson/jetson_buffer.cpp index b1a695fd..d1e41417 100644 --- a/src/hwenc_jetson/jetson_buffer.cpp +++ b/src/hwenc_jetson/jetson_buffer.cpp @@ -146,7 +146,7 @@ rtc::scoped_refptr JetsonBuffer::ToI420() { NvBufSurfaceUnMap(dst_surf, index, plane); if (ret == -1) { RTC_LOG(LS_ERROR) << __FUNCTION__ - << " Failed to NvBufSurfaceUnMap plane=" << plane; + << " Failed to NvBufSurfaceMap plane=" << plane; return scaled_buffer; } } From 20379775e68aeab1105f819030a9de7a5caded89 Mon Sep 17 00:00:00 2001 From: enm10k Date: Tue, 26 Dec 2023 17:49:58 +0900 Subject: [PATCH 11/11] =?UTF-8?q?NvBufSurfaceTag=20=E3=81=AE=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E3=82=92=E8=AA=A4=E3=81=A3=E3=81=A6=E3=81=84=E3=82=8B?= =?UTF-8?q?=E7=AE=87=E6=89=80=E3=81=8C=E3=81=82=E3=81=A3=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hwenc_jetson/jetson_video_decoder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hwenc_jetson/jetson_video_decoder.cpp b/src/hwenc_jetson/jetson_video_decoder.cpp index 3bb00be6..8b2b5762 100644 --- a/src/hwenc_jetson/jetson_video_decoder.cpp +++ b/src/hwenc_jetson/jetson_video_decoder.cpp @@ -423,7 +423,7 @@ int JetsonVideoDecoder::SetCapture() { cParams.height = capture_crop_->c.height; cParams.layout = NVBUF_LAYOUT_PITCH; cParams.colorFormat = NVBUF_COLOR_FORMAT_YUV420; - cParams.memtag = NvBufSurfaceTag_VIDEO_ENC; + cParams.memtag = NvBufSurfaceTag_VIDEO_DEC; cParams.memType = NVBUF_MEM_SURFACE_ARRAY; ret = NvBufSurf::NvAllocate(&cParams, 1, &dst_dma_fd_);