fixed incorrect colors when scaling with software
This commit is contained in:
+10
-8
@@ -84,14 +84,14 @@ public:
|
|||||||
|
|
||||||
std::uint8_t *data[4];
|
std::uint8_t *data[4];
|
||||||
|
|
||||||
data[0] = sw_frame->data[0] + offset;
|
data[0] = sw_frame->data[0] + offsetY;
|
||||||
if(sw_frame->format == AV_PIX_FMT_NV12) {
|
if(sw_frame->format == AV_PIX_FMT_NV12) {
|
||||||
data[1] = sw_frame->data[1] + offset / 2;
|
data[1] = sw_frame->data[1] + offsetUV;
|
||||||
data[2] = nullptr;
|
data[2] = nullptr;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
data[1] = sw_frame->data[1] + offset / 4;
|
data[1] = sw_frame->data[1] + offsetUV;
|
||||||
data[2] = sw_frame->data[2] + offset / 4;
|
data[2] = sw_frame->data[2] + offsetUV;
|
||||||
data[3] = nullptr;
|
data[3] = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,9 +207,10 @@ public:
|
|||||||
out_height = in_height * scalar;
|
out_height = in_height * scalar;
|
||||||
|
|
||||||
// result is always positive
|
// result is always positive
|
||||||
auto offsetX = (frame->width - out_width) / 2;
|
auto offsetW = (frame->width - out_width) / 2;
|
||||||
auto offsetY = (frame->height - out_height) / 2;
|
auto offsetH = (frame->height - out_height) / 2;
|
||||||
offset = offsetX + offsetY * frame->width;
|
offsetUV = (offsetW + offsetH * frame->width / 2) / 2;
|
||||||
|
offsetY = offsetW + offsetH * frame->width;
|
||||||
|
|
||||||
sws.reset(sws_getContext(
|
sws.reset(sws_getContext(
|
||||||
in_width, in_height, AV_PIX_FMT_BGR0,
|
in_width, in_height, AV_PIX_FMT_BGR0,
|
||||||
@@ -229,7 +230,8 @@ public:
|
|||||||
sws_t sws;
|
sws_t sws;
|
||||||
|
|
||||||
// offset of input image to output frame in pixels
|
// offset of input image to output frame in pixels
|
||||||
int offset;
|
int offsetUV;
|
||||||
|
int offsetY;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum flag_e {
|
enum flag_e {
|
||||||
|
|||||||
Reference in New Issue
Block a user