From 18a05d269516a5e33d8460291c2f93e73d95adce Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期二, 26 十二月 2023 10:45:31 +0800 Subject: [PATCH] GetYUV format is NV12 --- csrc/worker/decoder.cpp | 43 ++++++++++++++++++++++++------------------- 1 files changed, 24 insertions(+), 19 deletions(-) diff --git a/csrc/worker/decoder.cpp b/csrc/worker/decoder.cpp index 5e8a7c9..4d5a3b7 100644 --- a/csrc/worker/decoder.cpp +++ b/csrc/worker/decoder.cpp @@ -95,6 +95,8 @@ next_idx_ = i.id + 1; if (frame) {av_frame_free(&frame); frame = NULL;} frame = frm; + }else { + av_frame_free(&frm); } } } @@ -103,30 +105,33 @@ int pix_fmt = frame->format; int width = frame->width; int height = frame->height; - int len = 0; - uint8_t *origin = cvbridge::extractFrame(frame, &len); - av_frame_free(&frame); - if (!origin) return; - - uint8_t *finale = NULL; if (pix_fmt != AV_PIX_FMT_NV12){ - finale = (uint8_t*)malloc(len); - unsigned char* SrcU = origin + width * height; - unsigned char* SrcV = SrcU + width * height / 4 ; - unsigned char* DstU = finale + width * height; - memcpy(finale, origin, width * height); - int i = 0; - for( i = 0 ; i < width * height / 4 ; i++ ){ - *(DstU++) = *(SrcU++); - *(DstU++) = *(SrcV++); - } - free(origin); - }else{ - finale = origin; + cvbridge* bridge = new cvbridge(width, height, pix_fmt, + width, height, AV_PIX_FMT_NV12); + AVFrame* nv12 = bridge->convert2Frame(frame); + av_frame_free(&frame); + frame = nv12; + delete bridge; + + // finale = (uint8_t*)malloc(len); + // unsigned char* SrcU = origin + width * height; + // unsigned char* SrcV = SrcU + width * height / 4 ; + // unsigned char* DstU = finale + width * height; + // memcpy(finale, origin, width * height); + // int i = 0; + // for( i = 0 ; i < width * height / 4 ; i++ ){ + // *(DstU++) = *(SrcU++); + // *(DstU++) = *(SrcV++); + // } + // free(origin); } + int len = 0; + uint8_t* finale = cvbridge::extractFrame(frame, &len); + av_frame_free(&frame); + *data = finale; *w = width; *h = height; -- Gitblit v1.8.0