|
32 | 32 | #include "upipe/uref.h" |
33 | 33 | #include "upipe/ubuf.h" |
34 | 34 | #include "upipe/uref_pic_flow.h" |
| 35 | +#include "upipe/uref_pic_flow_formats.h" |
35 | 36 | #include "upipe/uref_pic.h" |
36 | 37 | #include "upipe/ubuf_pic.h" |
37 | 38 | #include "upipe/uref_flow.h" |
@@ -471,13 +472,31 @@ static int upipe_blit_sub_provide_flow_format(struct upipe *upipe) |
471 | 472 | UBASE_ALLOC_RETURN(chroma); |
472 | 473 | } |
473 | 474 |
|
| 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 | + |
474 | 481 | 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); |
476 | 497 | uref_pic_flow_copy_full_range(uref, upipe_blit->flow_def); |
477 | 498 |
|
478 | | - /* If the alpha was found add the alpha back into the flow format. */ |
479 | 499 | if (alpha) { |
480 | | - uref_pic_flow_add_plane(uref, 1, 1, macropixel_size, chroma); |
481 | 500 | free((void*)chroma); |
482 | 501 | } |
483 | 502 |
|
|
0 commit comments