Skip to content

Commit e4e8614

Browse files
quariumcmassiot
authored andcommitted
upipe_blit: support planar with alpha to semi-planar blit
1 parent 916abfa commit e4e8614

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

lib/upipe-modules/upipe_blit.c

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "upipe/uref.h"
3333
#include "upipe/ubuf.h"
3434
#include "upipe/uref_pic_flow.h"
35+
#include "upipe/uref_pic_flow_formats.h"
3536
#include "upipe/uref_pic.h"
3637
#include "upipe/ubuf_pic.h"
3738
#include "upipe/uref_flow.h"
@@ -471,13 +472,31 @@ static int upipe_blit_sub_provide_flow_format(struct upipe *upipe)
471472
UBASE_ALLOC_RETURN(chroma);
472473
}
473474

475+
bool input_yuva = false;
476+
if (alpha)
477+
input_yuva = ubase_check(uref_pic_flow_check_yuva420p(uref)) ||
478+
ubase_check(uref_pic_flow_check_yuva422p(uref)) ||
479+
ubase_check(uref_pic_flow_check_yuva444p(uref));
480+
474481
uref_pic_flow_clear_format(uref);
475-
uref_pic_flow_copy_format(uref, upipe_blit->flow_def);
482+
if (input_yuva &&
483+
ubase_check(uref_pic_flow_check_nv12(upipe_blit->flow_def)))
484+
uref_pic_flow_set_yuva420p(uref);
485+
else if (input_yuva &&
486+
ubase_check(uref_pic_flow_check_nv16(upipe_blit->flow_def)))
487+
uref_pic_flow_set_yuva422p(uref);
488+
else if (input_yuva &&
489+
ubase_check(uref_pic_flow_check_nv24(upipe_blit->flow_def)))
490+
uref_pic_flow_set_yuva444p(uref);
491+
else if (alpha) {
492+
/* If the alpha was found add the alpha back into the flow format. */
493+
uref_pic_flow_copy_format(uref, upipe_blit->flow_def);
494+
uref_pic_flow_add_plane(uref, 1, 1, macropixel_size, chroma);
495+
} else
496+
uref_pic_flow_copy_format(uref, upipe_blit->flow_def);
476497
uref_pic_flow_copy_full_range(uref, upipe_blit->flow_def);
477498

478-
/* If the alpha was found add the alpha back into the flow format. */
479499
if (alpha) {
480-
uref_pic_flow_add_plane(uref, 1, 1, macropixel_size, chroma);
481500
free((void*)chroma);
482501
}
483502

0 commit comments

Comments
 (0)