isomp4: fix wrong DAR calculation for PAR <= 1

CID #1226452

https://bugzilla.gnome.org/show_bug.cgi?id=736396
This commit is contained in:
Reynaldo H. Verdejo Pinochet 2014-09-11 13:48:44 -03:00
parent ba4b9b22d0
commit e655d47dfc

View file

@ -48,6 +48,7 @@
#include <gst/gst.h> #include <gst/gst.h>
#include <gst/base/gstbytewriter.h> #include <gst/base/gstbytewriter.h>
#include <gst/tag/tag.h> #include <gst/tag/tag.h>
#include <gst/video/video.h>
/** /**
* Creates a new AtomsContext for the given flavor. * Creates a new AtomsContext for the given flavor.
@ -3483,7 +3484,7 @@ atom_trak_set_video_type (AtomTRAK * trak, AtomsContext * context,
VisualSampleEntry * entry, guint32 scale, GList * ext_atoms_list) VisualSampleEntry * entry, guint32 scale, GList * ext_atoms_list)
{ {
SampleTableEntryMP4V *ste; SampleTableEntryMP4V *ste;
gint dwidth, dheight; guint dwidth, dheight;
gint par_n = 0, par_d = 0; gint par_n = 0, par_d = 0;
if ((entry->par_n != 1 || entry->par_d != 1) && if ((entry->par_n != 1 || entry->par_d != 1) &&
@ -3497,12 +3498,10 @@ atom_trak_set_video_type (AtomTRAK * trak, AtomsContext * context,
/* ISO file spec says track header w/h indicates track's visual presentation /* ISO file spec says track header w/h indicates track's visual presentation
* (so this together with pixels w/h implicitly defines PAR) */ * (so this together with pixels w/h implicitly defines PAR) */
if (par_n && (context->flavor != ATOMS_TREE_FLAVOR_MOV)) { if (par_n && (context->flavor != ATOMS_TREE_FLAVOR_MOV)) {
if (par_n > par_d) { /* Assumes square pixels display */
dwidth = entry->width * par_n / par_d; if (!gst_video_calculate_display_ratio (&dwidth, &dheight, entry->width,
dheight = entry->height; entry->height, par_n, par_d, 1, 1)) {
} else { GST_WARNING ("Could not calculate display ratio");
dwidth = entry->width * par_n / par_d;
dheight = entry->height;
} }
} }