static MSScalerContext *android_create_scaler_context(int src_w, int src_h, MSPixFmt src_fmt, int dst_w, int dst_h, MSPixFmt dst_fmt, int flags){ AndroidScalerCtx *ctx=ms_new0(AndroidScalerCtx,1); if (src_fmt==MS_YUV420P && dst_fmt==MS_RGB565){ ctx->use_omx=TRUE; ctx->cs=OMX_IP_BGR565; ctx->src_size.width=src_w; ctx->src_size.height=src_h; ctx->dst_size.width=dst_w; ctx->dst_size.height=dst_h; }else{ unsigned int ff_flags=0; ctx->base.src_h=src_h; if (flags & MS_SCALER_METHOD_BILINEAR) ff_flags|=SWS_BILINEAR; else if (flags & MS_SCALER_METHOD_NEIGHBOUR) ff_flags|=SWS_BILINEAR; ctx->base.ctx=sws_getContext (src_w,src_h,ms_pix_fmt_to_ffmpeg (src_fmt), dst_w,dst_h,ms_pix_fmt_to_ffmpeg (dst_fmt),ff_flags,NULL,NULL,NULL); if (ctx->base.ctx==NULL){ ms_free(ctx); ctx=NULL; } } return (MSScalerContext *)ctx; }
static MSScalerContext *ff_create_swscale_context(int src_w, int src_h, MSPixFmt src_fmt, int dst_w, int dst_h, MSPixFmt dst_fmt, int flags){ int ff_flags=0; MSFFScalerContext *ctx=ms_new(MSFFScalerContext,1); ctx->src_h=src_h; #if __arm__ ff_flags|=SWS_FAST_BILINEAR; #else if (flags & MS_SCALER_METHOD_BILINEAR) ff_flags|=SWS_BILINEAR; else if (flags & MS_SCALER_METHOD_NEIGHBOUR) ff_flags|=SWS_BILINEAR; #endif ctx->ctx=sws_getContext (src_w,src_h,ms_pix_fmt_to_ffmpeg (src_fmt), dst_w,dst_h,ms_pix_fmt_to_ffmpeg (dst_fmt),ff_flags,NULL,NULL,NULL); if (ctx->ctx==NULL){ ms_free(ctx); ctx=NULL; } return (MSScalerContext*)ctx; }
static int pixconv_set_pixfmt(MSFilter *f, void *arg){ MSPixFmt fmt=*(MSPixFmt*)arg; PixConvState *s=(PixConvState*)f->data; s->in_fmt=(enum PixelFormat)ms_pix_fmt_to_ffmpeg(fmt); return 0; }