static int android_scaler_process(MSScalerContext *ctx, uint8_t *src[], int src_strides[], uint8_t *dst[], int dst_strides[]){ AndroidScalerCtx *actx=(AndroidScalerCtx*)ctx; if (actx->use_omx){ int ret; OMX_U8 *osrc[3]; OMX_INT osrc_strides[3]; OMX_INT xrr_max; OMX_INT yrr_max; osrc[0]=src[0]; osrc[1]=src[1]; osrc[2]=src[2]; osrc_strides[0]=src_strides[0]; osrc_strides[1]=src_strides[1]; osrc_strides[2]=src_strides[2]; xrr_max = (OMX_INT) ((( (OMX_F32) ((actx->src_size.width&~1)-1) / ((actx->dst_size.width&~1)-1))) * (1<<16) +0.5); yrr_max = (OMX_INT) ((( (OMX_F32) ((actx->src_size.height&~1)-1) / ((actx->dst_size.height&~1)-1))) * (1<< 16) +0.5); ret=omxIPCS_YCbCr420RszCscRotBGR_U8_P3C3R((const OMX_U8**)osrc,osrc_strides,actx->src_size,dst[0],dst_strides[0],actx->dst_size,actx->cs, OMX_IP_BILINEAR, OMX_IP_DISABLE, xrr_max,yrr_max); if (ret!=OMX_Sts_NoErr){ ms_error("omxIPCS_YCbCr420RszCscRotBGR_U8_P3C3R() failed : %i",ret); return -1; } return 0; } return ff_sws_scale(ctx,src,src_strides,dst,dst_strides); }
static void YV12_RGB_Scale (filter_t *filter, picture_t *src, picture_t *dst) { const OMX_U8 *in[3] = { src->Y_PIXELS, src->V_PIXELS, src->U_PIXELS }; OMX_INT instep[3] = { src->Y_PITCH, src->V_PITCH, src->U_PITCH }; OMXSize insize = { SRC_WIDTH, SRC_HEIGHT }; OMX_U8 *out = dst->p->p_pixels; OMX_INT outstep = dst->p->i_pitch; OMXSize outsize = { DST_WIDTH, DST_HEIGHT }; omxIPCS_YCbCr420RszCscRotBGR_U8_P3C3R ( in, instep, insize, out, outstep, outsize, CNV, OMX_IP_NEAREST, OMX_IP_DISABLE, XRR_MAX, YRR_MAX); }