static void copy_mp_to_vs_frame_props_map(struct vf_priv_s *p, VSMap *map, struct mp_image *img) { struct mp_image_params *params = &img->params; p->vsapi->propSetInt(map, "_SARNum", params->p_w, 0); p->vsapi->propSetInt(map, "_SARDen", params->p_h, 0); if (params->color.levels) { p->vsapi->propSetInt(map, "_ColorRange", params->color.levels == MP_CSP_LEVELS_TV, 0); } // The docs explicitly say it uses libavcodec values. p->vsapi->propSetInt(map, "_ColorSpace", mp_csp_to_avcol_spc(params->color.space), 0); if (params->chroma_location) { p->vsapi->propSetInt(map, "_ChromaLocation", params->chroma_location == MP_CHROMA_CENTER, 0); } char pict_type = 0; switch (img->pict_type) { case 1: pict_type = 'I'; break; case 2: pict_type = 'P'; break; case 3: pict_type = 'B'; break; } if (pict_type) p->vsapi->propSetData(map, "_PictType", &pict_type, 1, 0); int field = 0; if (img->fields & MP_IMGFIELD_INTERLACED) field = img->fields & MP_IMGFIELD_TOP_FIRST ? 2 : 1; p->vsapi->propSetInt(map, "_FieldBased", field, 0); }
static void copy_mp_to_vs_frame_props(struct vf_priv_s *p, VSMap *map, struct mp_image *img) { struct mp_image_params *params = &img->params; if (params->d_w > 0 && params->d_h > 0) { AVRational dar = {params->d_w, params->d_h}; AVRational asp = {params->w, params->h}; AVRational par = av_div_q(dar, asp); p->vsapi->propSetInt(map, "_SARNum", par.num, 0); p->vsapi->propSetInt(map, "_SARDen", par.den, 0); } if (params->colorlevels) { p->vsapi->propSetInt(map, "_ColorRange", params->colorlevels == MP_CSP_LEVELS_TV, 0); } // The docs explicitly say it uses libavcodec values. p->vsapi->propSetInt(map, "_ColorSpace", mp_csp_to_avcol_spc(params->colorspace), 0); char pict_type = 0; switch (img->pict_type) { case 1: pict_type = 'I'; break; case 2: pict_type = 'P'; break; case 3: pict_type = 'B'; break; } if (pict_type) p->vsapi->propSetData(map, "_PictType", &pict_type, 1, 0); }