gst/matroska/: Try harder to extract the framerate for video tracks correctly and save it directly instead of convert...
Original commit message from CVS: * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream), (gst_matroska_demux_video_caps): * gst/matroska/matroska-ids.c: (gst_matroska_track_init_video_context): * gst/matroska/matroska-ids.h: Try harder to extract the framerate for video tracks correctly and save it directly instead of converting it back and forth a few times. Mostly makes a difference for very small framerates (<1). Fixes #380199.
This commit is contained in:
parent
2f992c783e
commit
0d3b023699
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
2006-12-11 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
|
* gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream),
|
||||||
|
(gst_matroska_demux_video_caps):
|
||||||
|
* gst/matroska/matroska-ids.c:
|
||||||
|
(gst_matroska_track_init_video_context):
|
||||||
|
* gst/matroska/matroska-ids.h:
|
||||||
|
Try harder to extract the framerate for video tracks correctly and
|
||||||
|
save it directly instead of converting it back and forth a few
|
||||||
|
times. Mostly makes a difference for very small framerates (<1).
|
||||||
|
Fixes #380199.
|
||||||
|
|
||||||
2006-12-11 Tim-Philipp Müller <tim at centricular dot net>
|
2006-12-11 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
* ext/gconf/gstgconfaudiosrc.c: (gst_gconf_audio_src_init),
|
* ext/gconf/gstgconfaudiosrc.c: (gst_gconf_audio_src_init),
|
||||||
|
@ -660,7 +660,9 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux)
|
|||||||
res = FALSE;
|
res = FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
context->default_duration = GST_SECOND * (1. / num);
|
context->default_duration =
|
||||||
|
gst_gdouble_to_guint64 ((gdouble) GST_SECOND * (1.0 / num));
|
||||||
|
videocontext->default_fps = num;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3615,14 +3617,26 @@ gst_matroska_demux_video_caps (GstMatroskaTrackVideoContext *
|
|||||||
videocontext->display_height * videocontext->pixel_width, NULL);
|
videocontext->display_height * videocontext->pixel_width, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (context->default_duration > 0) {
|
if (videocontext->default_fps > 0.0) {
|
||||||
GValue fps_double = { 0 };
|
GValue fps_double = { 0, };
|
||||||
GValue fps_fraction = { 0 };
|
GValue fps_fraction = { 0, };
|
||||||
|
|
||||||
g_value_init (&fps_double, G_TYPE_DOUBLE);
|
g_value_init (&fps_double, G_TYPE_DOUBLE);
|
||||||
g_value_init (&fps_fraction, GST_TYPE_FRACTION);
|
g_value_init (&fps_fraction, GST_TYPE_FRACTION);
|
||||||
g_value_set_double (&fps_double,
|
g_value_set_double (&fps_double, videocontext->default_fps);
|
||||||
gst_guint64_to_gdouble (GST_SECOND / context->default_duration));
|
g_value_transform (&fps_double, &fps_fraction);
|
||||||
|
|
||||||
|
gst_structure_set_value (structure, "framerate", &fps_fraction);
|
||||||
|
g_value_unset (&fps_double);
|
||||||
|
g_value_unset (&fps_fraction);
|
||||||
|
} else if (context->default_duration > 0) {
|
||||||
|
GValue fps_double = { 0, };
|
||||||
|
GValue fps_fraction = { 0, };
|
||||||
|
|
||||||
|
g_value_init (&fps_double, G_TYPE_DOUBLE);
|
||||||
|
g_value_init (&fps_fraction, GST_TYPE_FRACTION);
|
||||||
|
g_value_set_double (&fps_double, (gdouble) GST_SECOND * 1.0 /
|
||||||
|
gst_guint64_to_gdouble (context->default_duration));
|
||||||
g_value_transform (&fps_double, &fps_fraction);
|
g_value_transform (&fps_double, &fps_fraction);
|
||||||
|
|
||||||
gst_structure_set_value (structure, "framerate", &fps_fraction);
|
gst_structure_set_value (structure, "framerate", &fps_fraction);
|
||||||
|
@ -56,6 +56,7 @@ gst_matroska_track_init_video_context (GstMatroskaTrackContext ** p_context)
|
|||||||
video_context->eye_mode = 0;
|
video_context->eye_mode = 0;
|
||||||
video_context->asr_mode = 0;
|
video_context->asr_mode = 0;
|
||||||
video_context->fourcc = 0;
|
video_context->fourcc = 0;
|
||||||
|
video_context->default_fps = 0.0;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,8 +292,9 @@ typedef struct _GstMatroskaTrackContext {
|
|||||||
typedef struct _GstMatroskaTrackVideoContext {
|
typedef struct _GstMatroskaTrackVideoContext {
|
||||||
GstMatroskaTrackContext parent;
|
GstMatroskaTrackContext parent;
|
||||||
|
|
||||||
guint pixel_width, pixel_height,
|
guint pixel_width, pixel_height;
|
||||||
display_width, display_height;
|
guint display_width, display_height;
|
||||||
|
gdouble default_fps;
|
||||||
GstMatroskaEyeMode eye_mode;
|
GstMatroskaEyeMode eye_mode;
|
||||||
GstMatroskaAspectRatioMode asr_mode;
|
GstMatroskaAspectRatioMode asr_mode;
|
||||||
guint32 fourcc;
|
guint32 fourcc;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user