/* SMPTE 421M Table 7 */ static const struct { gint par_n, par_d; } aspect_ratios[] = { { 0, 0}, { 1, 1}, { 12, 11}, { 10, 11}, { 16, 11}, { 40, 33}, { 24, 11}, { 20, 11}, { 32, 11}, { 80, 33}, { 18, 11}, { 15, 11}, { 64, 33}, { 160, 99}, { 0, 0}, { 0, 0} }; /* SMPTE 421M Table 8 */ static const guint framerates_n[] = { 0, 24 * 1000, 25 * 1000, 30 * 1000, 50 * 1000, 60 * 1000, 48 * 1000, 72 * 1000 }; /* SMPTE 421M Table 9 */ static const guint framerates_d[] = { 0, 1000, 1001 }; if (vc1parse->seq_hdr.advanced.display_ext) { /* Only update PAR if not from input caps */ if (!vc1parse->par_from_caps && vc1parse->seq_hdr.advanced.aspect_ratio_flag) { gint par_n, par_d; if (vc1parse->seq_hdr.advanced.aspect_ratio == 15) { par_n = vc1parse->seq_hdr.advanced.aspect_horiz_size; par_d = vc1parse->seq_hdr.advanced.aspect_vert_size; } else { par_n = aspect_ratios[vc1parse->seq_hdr.advanced.aspect_ratio].par_n; par_d = aspect_ratios[vc1parse->seq_hdr.advanced.aspect_ratio].par_d; } if (par_n != 0 && par_d != 0 && (vc1parse->par_d == 0 || gst_util_fraction_compare (par_n, par_d, vc1parse->par_n, vc1parse->par_d) != 0)) { vc1parse->update_caps = TRUE; vc1parse->par_n = par_n; vc1parse->par_d = par_d; } } if (!vc1parse->fps_from_caps && vc1parse->seq_hdr.advanced.framerate_flag) { gint fps_n = 0, fps_d = 0; if (!vc1parse->seq_hdr.advanced.framerateind) { if (vc1parse->seq_hdr.advanced.frameratenr > 0 && vc1parse->seq_hdr.advanced.frameratenr < 8 && vc1parse->seq_hdr.advanced.frameratedr > 0 && vc1parse->seq_hdr.advanced.frameratedr < 3) { fps_n = framerates_n[vc1parse->seq_hdr.advanced.frameratenr]; fps_d = framerates_d[vc1parse->seq_hdr.advanced.frameratedr]; } } else { fps_n = vc1parse->seq_hdr.advanced.framerateexp + 1; fps_d = 32; } if (fps_n != 0 && fps_d != 0 && (vc1parse->fps_d == 0 || gst_util_fraction_compare (fps_n, fps_d, vc1parse->fps_n, vc1parse->fps_d) != 0)) { vc1parse->update_caps = TRUE; vc1parse->fps_n = fps; vc1parse->fps_d = 1; } } }