2005-06-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+ * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_frame):
+ Only do timestamp interpolation for delayed streams (containing
+ B-frames). Fixes stuttering playback of ASF files (#306770).
+
+2005-06-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
* ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
(gst_ffmpeg_caps_with_codecid):
Remove weird flags from SVQ3 flags and just give full atom,
if (ffmpegdec->picture->opaque != NULL) {
outbuf = (GstBuffer *) ffmpegdec->picture->opaque;
- }else {
+ } else {
AVPicture pic;
gint fsize = gst_ffmpeg_avpicture_get_size (ffmpegdec->context->pix_fmt,
ffmpegdec->context->width, ffmpegdec->context->height);
* For B-frame containing movies, we get all pictures delayed
* except for the I frames, so we synchronize only on I frames
* and keep an internal counter based on FPS for the others. */
- if ((ffmpegdec->picture->pict_type == FF_I_TYPE ||
- !GST_CLOCK_TIME_IS_VALID (ffmpegdec->next_ts)) &&
- GST_CLOCK_TIME_IS_VALID (*in_ts)) {
+ if (!(oclass->in_plugin->capabilities & CODEC_CAP_DELAY) ||
+ ((ffmpegdec->picture->pict_type == FF_I_TYPE ||
+ !GST_CLOCK_TIME_IS_VALID (ffmpegdec->next_ts)) &&
+ GST_CLOCK_TIME_IS_VALID (*in_ts))) {
ffmpegdec->next_ts = *in_ts;
+ *in_ts = GST_CLOCK_TIME_NONE;
}
GST_BUFFER_TIMESTAMP (outbuf) = ffmpegdec->next_ts;
} else {
ffmpegdec->next_ts = GST_CLOCK_TIME_NONE;
}
- } else if (ffmpegdec->picture->pict_type != -1) {
+ } else if (ffmpegdec->picture->pict_type != -1 &&
+ oclass->in_plugin->capabilities & CODEC_CAP_DELAY) {
/* update time for skip-frame */
if ((ffmpegdec->picture->pict_type == FF_I_TYPE ||
!GST_CLOCK_TIME_IS_VALID (ffmpegdec->next_ts)) &&
GST_CLOCK_TIME_IS_VALID (*in_ts)) {
ffmpegdec->next_ts = *in_ts;
+ *in_ts = GST_CLOCK_TIME_NONE;
}
if (ffmpegdec->context->frame_rate_base != 0 &&