@@ -480,8 +480,20 @@ static int iris_hfi_gen2_set_colorformat(struct iris_inst *inst, u32 plane)
480480
481481 if (inst -> domain == DECODER ) {
482482 pixelformat = inst -> fmt_dst -> fmt .pix_mp .pixelformat ;
483- hfi_colorformat = pixelformat == V4L2_PIX_FMT_NV12 ?
484- HFI_COLOR_FMT_NV12 : HFI_COLOR_FMT_NV12_UBWC ;
483+ switch (pixelformat ) {
484+ case V4L2_PIX_FMT_NV12 :
485+ hfi_colorformat = HFI_COLOR_FMT_NV12 ;
486+ break ;
487+ case V4L2_PIX_FMT_QC08C :
488+ hfi_colorformat = HFI_COLOR_FMT_NV12_UBWC ;
489+ break ;
490+ case V4L2_PIX_FMT_P010 :
491+ hfi_colorformat = HFI_COLOR_FMT_P010 ;
492+ break ;
493+ case V4L2_PIX_FMT_QC10C :
494+ hfi_colorformat = HFI_COLOR_FMT_TP10_UBWC ;
495+ break ;
496+ }
485497 } else {
486498 pixelformat = inst -> fmt_src -> fmt .pix_mp .pixelformat ;
487499 hfi_colorformat = pixelformat == V4L2_PIX_FMT_NV12 ?
@@ -516,7 +528,8 @@ static int iris_hfi_gen2_set_linear_stride_scanline(struct iris_inst *inst, u32
516528 stride_uv = stride_y ;
517529 scanline_uv = scanline_y / 2 ;
518530
519- if (pixelformat != V4L2_PIX_FMT_NV12 )
531+ if (pixelformat != V4L2_PIX_FMT_NV12 &&
532+ pixelformat != V4L2_PIX_FMT_P010 )
520533 return 0 ;
521534
522535 payload [0 ] = stride_y << 16 | scanline_y ;
@@ -531,6 +544,61 @@ static int iris_hfi_gen2_set_linear_stride_scanline(struct iris_inst *inst, u32
531544 sizeof (u64 ));
532545}
533546
547+ static int iris_hfi_gen2_set_ubwc_stride_scanline (struct iris_inst * inst , u32 plane )
548+ {
549+ u32 meta_stride_y , meta_scanline_y , meta_stride_uv , meta_scanline_uv ;
550+ u32 stride_y , scanline_y , stride_uv , scanline_uv ;
551+ u32 port = iris_hfi_gen2_get_port (inst , plane );
552+ u32 pixelformat , width , height ;
553+ u32 payload [4 ];
554+
555+ if (inst -> domain != DECODER ||
556+ inst -> fmt_src -> fmt .pix_mp .pixelformat != V4L2_PIX_FMT_AV1 )
557+ return 0 ;
558+
559+ pixelformat = inst -> fmt_dst -> fmt .pix_mp .pixelformat ;
560+ width = inst -> fmt_dst -> fmt .pix_mp .width ;
561+ height = inst -> fmt_dst -> fmt .pix_mp .height ;
562+
563+ switch (pixelformat ) {
564+ case V4L2_PIX_FMT_QC08C :
565+ stride_y = ALIGN (width , 128 );
566+ scanline_y = ALIGN (height , 32 );
567+ stride_uv = ALIGN (width , 128 );
568+ scanline_uv = ALIGN ((height + 1 ) >> 1 , 32 );
569+ meta_stride_y = ALIGN (DIV_ROUND_UP (width , 32 ), 64 );
570+ meta_scanline_y = ALIGN (DIV_ROUND_UP (height , 8 ), 16 );
571+ meta_stride_uv = ALIGN (DIV_ROUND_UP ((width + 1 ) >> 1 , 16 ), 64 );
572+ meta_scanline_uv = ALIGN (DIV_ROUND_UP ((height + 1 ) >> 1 , 8 ), 16 );
573+ break ;
574+ case V4L2_PIX_FMT_QC10C :
575+ stride_y = ALIGN (width * 4 / 3 , 256 );
576+ scanline_y = ALIGN (height , 16 );
577+ stride_uv = ALIGN (width * 4 / 3 , 256 );
578+ scanline_uv = ALIGN ((height + 1 ) >> 1 , 16 );
579+ meta_stride_y = ALIGN (DIV_ROUND_UP (width , 48 ), 64 );
580+ meta_scanline_y = ALIGN (DIV_ROUND_UP (height , 4 ), 16 );
581+ meta_stride_uv = ALIGN (DIV_ROUND_UP ((width + 1 ) >> 1 , 24 ), 64 );
582+ meta_scanline_uv = ALIGN (DIV_ROUND_UP ((height + 1 ) >> 1 , 4 ), 16 );
583+ break ;
584+ default :
585+ return 0 ;
586+ }
587+
588+ payload [0 ] = stride_y << 16 | scanline_y ;
589+ payload [1 ] = stride_uv << 16 | scanline_uv ;
590+ payload [2 ] = meta_stride_y << 16 | meta_scanline_y ;
591+ payload [3 ] = meta_stride_uv << 16 | meta_scanline_uv ;
592+
593+ return iris_hfi_gen2_session_set_property (inst ,
594+ HFI_PROP_UBWC_STRIDE_SCANLINE ,
595+ HFI_HOST_FLAGS_NONE ,
596+ port ,
597+ HFI_PAYLOAD_U32_ARRAY ,
598+ & payload [0 ],
599+ sizeof (u32 ) * 4 );
600+ }
601+
534602static int iris_hfi_gen2_set_tier (struct iris_inst * inst , u32 plane )
535603{
536604 u32 port = iris_hfi_gen2_get_port (inst , V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE );
@@ -619,6 +687,7 @@ static int iris_hfi_gen2_session_set_config_params(struct iris_inst *inst, u32 p
619687 {HFI_PROP_OPB_ENABLE , iris_hfi_gen2_set_opb_enable },
620688 {HFI_PROP_COLOR_FORMAT , iris_hfi_gen2_set_colorformat },
621689 {HFI_PROP_LINEAR_STRIDE_SCANLINE , iris_hfi_gen2_set_linear_stride_scanline },
690+ {HFI_PROP_UBWC_STRIDE_SCANLINE , iris_hfi_gen2_set_ubwc_stride_scanline },
622691 {HFI_PROP_TIER , iris_hfi_gen2_set_tier },
623692 {HFI_PROP_FRAME_RATE , iris_hfi_gen2_set_frame_rate },
624693 {HFI_PROP_AV1_FILM_GRAIN_PRESENT , iris_hfi_gen2_set_film_grain },
0 commit comments