Skip to content

Commit a8186a3

Browse files
committed
fix: csri impl use proper apply func
1 parent 04efba1 commit a8186a3

3 files changed

Lines changed: 40 additions & 2 deletions

File tree

src/csriapi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ CSRIAPI int csri_request_fmt(csri_inst *inst, const struct csri_fmt *fmt)
107107

108108
switch (fmt->pixfmt) {
109109
case CSRI_F_BGR_:
110-
inst->ud->apply = apply_rgba;
110+
inst->ud->apply = apply_bgr_;
111111
break;
112112
default:
113113
return -1;

src/render.c

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,43 @@ void apply_rgba(uint8_t** sub_img, uint8_t** data, int32_t* pitch, uint32_t widt
268268
}
269269
}
270270

271+
void apply_bgr_(uint8_t** sub_img, uint8_t** data, int32_t* pitch, uint32_t width, uint32_t height)
272+
{
273+
uint8_t *srcA, *srcR, *srcG, *srcB, *dstA, *dstR, *dstG, *dstB;
274+
uint32_t i, j, k;
275+
276+
srcR = sub_img[1];
277+
srcG = sub_img[2];
278+
srcB = sub_img[3];
279+
srcA = sub_img[0];
280+
281+
dstB = data[0];
282+
dstG = dstB + 1;
283+
dstR = dstB + 2;
284+
dstA = dstB + 3;
285+
286+
for (i = 0; i < height; i++) {
287+
for (j = 0; j < width; j++) {
288+
if (srcA[j]) {
289+
k = j * 4;
290+
dstR[k] = blend(srcA[j], srcR[j], dstR[k]);
291+
dstG[k] = blend(srcA[j], srcG[j], dstG[k]);
292+
dstB[k] = blend(srcA[j], srcB[j], dstB[k]);
293+
dstA[k] = 0;
294+
}
295+
}
296+
297+
srcR += width;
298+
srcG += width;
299+
srcB += width;
300+
srcA += width;
301+
dstR += pitch[0];
302+
dstG += pitch[0];
303+
dstB += pitch[0];
304+
dstA += pitch[0];
305+
}
306+
}
307+
271308
void apply_rgb(uint8_t** sub_img, uint8_t** data, int32_t* pitch, uint32_t width, uint32_t height)
272309
{
273310
uint8_t *srcR, *srcG, *srcB, *srcA, *dstR, *dstG, *dstB;
@@ -964,4 +1001,4 @@ const VSFrameRef* VS_CC assrender_get_frame_vs(int n, int activationReason, void
9641001
return dst;
9651002
}
9661003
return NULL;
967-
}
1004+
}

src/render.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ void FillMatrix(ConversionMatrix* matrix, matrix_type mt);
2929
void make_sub_img(ASS_Image* img, uint8_t** sub_img, uint32_t width, int bits_per_pixel, int rgb, ConversionMatrix *mx);
3030
void make_sub_img16(ASS_Image* img, uint8_t** sub_img, uint32_t width, int bits_per_pixel, int rgb, ConversionMatrix* mx);
3131

32+
void apply_bgr_(uint8_t** sub_img, uint8_t** data, int32_t* pitch, uint32_t width, uint32_t height);
3233
void apply_rgba(uint8_t** sub_img, uint8_t** data, int32_t* pitch, uint32_t width, uint32_t height);
3334
void apply_rgb(uint8_t** sub_img, uint8_t** data, int32_t* pitch, uint32_t width, uint32_t height);
3435
void apply_rgb48(uint8_t** sub_img, uint8_t** data, int32_t* pitch, uint32_t width, uint32_t height);

0 commit comments

Comments
 (0)