/* Autocrop by default. Gnark gnark */
memcpy( job->crop, title->crop, 4 * sizeof( int ) );
- /* Preserve a source's pixel aspect, if it's available. */
- if (title->geometry.par.num && title->geometry.par.den)
- {
- job->par = title->geometry.par;
- }
- else if (title->dar.num && title->dar.den)
- {
- hb_reduce(&job->par.num, &job->par.den,
- title->geometry.height * title->dar.num,
- title->geometry.width * title->dar.den);
- }
-
- job->width = title->geometry.width - title->crop[2] - title->crop[3];
- job->height = title->geometry.height - title->crop[0] - title->crop[1];
hb_geometry_t resultGeo, srcGeo;
hb_geometry_settings_t uiGeo;
- memset(&uiGeo, 0, sizeof(uiGeo));
- srcGeo.width = title->geometry.width;
- srcGeo.height = title->geometry.height;
- srcGeo.par = title->geometry.par;
+ srcGeo = title->geometry;
- uiGeo.geometry.width = job->width;
- uiGeo.geometry.height = job->height;
- uiGeo.geometry.par = job->par;
+ memset(&uiGeo, 0, sizeof(uiGeo));
+ memcpy(uiGeo.crop, title->crop, 4 * sizeof( int ));
+ uiGeo.geometry.width = srcGeo.width - uiGeo.crop[2] - uiGeo.crop[3];
+ uiGeo.geometry.height = srcGeo.height - uiGeo.crop[0] - uiGeo.crop[1];
uiGeo.mode = HB_ANAMORPHIC_NONE;
uiGeo.keep = HB_KEEP_DISPLAY_ASPECT;
double storage_aspect = (double)cropped_width / cropped_height;
int mod = geo->modulus ? EVEN(geo->modulus) : 2;
+ // Sanitize PAR
+ if (geo->geometry.par.num == 0 || geo->geometry.par.den == 0)
+ {
+ geo->geometry.par.num = geo->geometry.par.den = 1;
+ }
+ if (src_geo->par.num == 0 || src_geo->par.den == 0)
+ {
+ src_geo->par.num = src_geo->par.den = 1;
+ }
+
// Use 64 bits to avoid overflow till the final hb_reduce() call
hb_reduce(&in_par.num, &in_par.den,
geo->geometry.par.num, geo->geometry.par.den);
hb_limit_rational64(&dst_par_num, &dst_par_den,
dst_par_num, dst_par_den, 65535);
- /* If the user is directling updating PAR, don't override his values */
+ // If the user is directling updating PAR, don't override his values.
+ // I.e. don't even reduce the values.
hb_reduce(&out_par.num, &out_par.den, dst_par_num, dst_par_den);
if (geo->mode == HB_ANAMORPHIC_CUSTOM && !keep_display_aspect &&
out_par.num == in_par.num && out_par.den == in_par.den)