Skip to content

Commit 3d843bf

Browse files
authored
[fix] camera frame error
1 parent 125038e commit 3d843bf

1 file changed

Lines changed: 45 additions & 21 deletions

File tree

  • projects/llm_framework/main_camera/src

projects/llm_framework/main_camera/src/main.cpp

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -52,35 +52,59 @@ class llm_task {
5252
static void on_cap_fream(uint8_t *pData, uint32_t width, uint32_t height, uint32_t Length, void *ctx)
5353
{
5454
llm_task *self = static_cast<llm_task *>(ctx);
55+
int src_offsetX;
56+
int src_offsetY;
57+
int src_W;
58+
int src_H;
59+
int dst_offsetX;
60+
int dst_offsetY;
61+
int dst_W;
62+
int dst_H;
5563
if ((self->frame_height_ == height) && (self->frame_width_ == width)) {
5664
if (self->out_callback_) self->out_callback_(pData, Length);
5765
} else {
58-
cv::Mat yuv_src(height, width, CV_8UC2, pData);
5966
if ((self->frame_height_ >= height) && (self->frame_width_ >= width)) {
60-
int offsetX = (self->frame_width_ == width) ? 0 : (self->frame_width_ - width) / 2;
61-
int offsetY = (self->frame_height_ == height) ? 0 : (self->frame_height_ - height) / 2;
62-
yuv_src.copyTo(self->yuv_dist_(cv::Rect(offsetX, offsetY, width, height)));
63-
if (self->out_callback_)
64-
self->out_callback_(self->yuv_dist_.data, self->frame_height_ * self->frame_width_ * 2);
67+
src_offsetX = 0;
68+
src_offsetY = 0;
69+
src_W = width;
70+
src_H = height;
71+
dst_offsetX = (self->frame_width_ == src_W) ? 0 : (self->frame_width_ - src_W) / 2;
72+
dst_offsetY = (self->frame_height_ == src_H) ? 0 : (self->frame_height_ - src_H) / 2;
73+
dst_W = width;
74+
dst_H = height;
6575
} else if ((self->frame_height_ <= height) && (self->frame_width_ <= width)) {
66-
int offsetX = (self->frame_width_ == width) ? 0 : (width - self->frame_width_) / 2;
67-
int offsetY = (self->frame_height_ == height) ? 0 : (height - self->frame_height_) / 2;
68-
yuv_src(cv::Rect(offsetX, offsetY, self->frame_width_, self->frame_height_)).copyTo(self->yuv_dist_);
69-
if (self->out_callback_)
70-
self->out_callback_(self->yuv_dist_.data, self->frame_height_ * self->frame_width_ * 2);
76+
src_offsetX = (self->frame_width_ == width) ? 0 : (width - self->frame_width_) / 2;
77+
src_offsetY = (self->frame_height_ == height) ? 0 : (height - self->frame_height_) / 2;
78+
src_W = self->frame_width_;
79+
src_H = self->frame_height_;
80+
dst_offsetX = 0;
81+
dst_offsetY = 0;
82+
dst_W = src_W;
83+
dst_H = src_H;
7184
} else if ((self->frame_height_ >= height) && (self->frame_width_ <= width)) {
72-
int offsetX = (self->frame_width_ == width) ? 0 : (width - self->frame_width_) / 2;
73-
int offsetY = (self->frame_height_ == height) ? 0 : (self->frame_height_ - height) / 2;
74-
yuv_src(cv::Rect(offsetX, offsetY, self->frame_width_, height)).copyTo(self->yuv_dist_);
75-
if (self->out_callback_)
76-
self->out_callback_(self->yuv_dist_.data, self->frame_height_ * self->frame_width_ * 2);
85+
src_offsetX = (self->frame_width_ == width) ? 0 : (width - self->frame_width_) / 2;
86+
src_offsetY = 0;
87+
src_W = self->frame_width_;
88+
src_H = height;
89+
dst_offsetX = 0;
90+
dst_offsetY = (self->frame_height_ == src_H) ? 0 : (self->frame_height_ - src_H) / 2;
91+
dst_W = src_W;
92+
dst_H = src_H;
7793
} else {
78-
int offsetX = (self->frame_width_ == width) ? 0 : (self->frame_width_ - width) / 2;
79-
int offsetY = (self->frame_height_ == height) ? 0 : (self->frame_height_ - height) / 2;
80-
yuv_src(cv::Rect(offsetX, offsetY, width, self->frame_height_)).copyTo(self->yuv_dist_);
81-
if (self->out_callback_)
82-
self->out_callback_(self->yuv_dist_.data, self->frame_height_ * self->frame_width_ * 2);
94+
src_offsetX = 0;
95+
src_offsetY = (self->frame_height_ == height) ? 0 : (height - self->frame_height_) / 2;
96+
src_W = width;
97+
src_H = self->frame_height_;
98+
dst_offsetX = (self->frame_width_ == src_W) ? 0 : (self->frame_width_ - src_W) / 2;
99+
dst_offsetY = 0;
100+
dst_W = src_W;
101+
dst_H = src_H;
83102
}
103+
cv::Mat yuv_src(height, width, CV_8UC2, pData);
104+
yuv_src(cv::Rect(src_offsetX, src_offsetY, src_W, src_H))
105+
.copyTo(self->yuv_dist_(cv::Rect(dst_offsetX, dst_offsetY, dst_W, dst_H)));
106+
if (self->out_callback_)
107+
self->out_callback_(self->yuv_dist_.data, self->frame_height_ * self->frame_width_ * 2);
84108
}
85109
}
86110

0 commit comments

Comments
 (0)