mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-20 23:36:38 +00:00
ffmpegdec: Use skip_frame instead of deprecated hurry_up
This commit is contained in:
parent
71f48a1d84
commit
7c85e2d743
1 changed files with 24 additions and 24 deletions
|
@ -115,7 +115,7 @@ struct _GstFFMpegDec
|
|||
gboolean extra_ref; /* keep extra ref around in get/release */
|
||||
|
||||
/* some properties */
|
||||
gint hurry_up;
|
||||
enum AVDiscard skip_frame;
|
||||
gint lowres;
|
||||
gboolean direct_rendering;
|
||||
gboolean do_padding;
|
||||
|
@ -423,7 +423,7 @@ gst_ffmpegdec_init (GstFFMpegDec * ffmpegdec)
|
|||
ffmpegdec->par = NULL;
|
||||
ffmpegdec->opened = FALSE;
|
||||
ffmpegdec->waiting_for_key = TRUE;
|
||||
ffmpegdec->hurry_up = ffmpegdec->lowres = 0;
|
||||
ffmpegdec->skip_frame = ffmpegdec->lowres = 0;
|
||||
ffmpegdec->direct_rendering = DEFAULT_DIRECT_RENDERING;
|
||||
ffmpegdec->do_padding = DEFAULT_DO_PADDING;
|
||||
ffmpegdec->debug_mv = DEFAULT_DEBUG_MV;
|
||||
|
@ -842,7 +842,7 @@ gst_ffmpegdec_setcaps (GstPad * pad, GstCaps * caps)
|
|||
|
||||
/* for slow cpus */
|
||||
ffmpegdec->context->lowres = ffmpegdec->lowres;
|
||||
ffmpegdec->context->hurry_up = ffmpegdec->hurry_up;
|
||||
ffmpegdec->context->skip_frame = ffmpegdec->skip_frame;
|
||||
|
||||
/* ffmpeg can draw motion vectors on top of the image (not every decoder
|
||||
* supports it) */
|
||||
|
@ -1329,7 +1329,7 @@ caps_failed:
|
|||
|
||||
/* perform qos calculations before decoding the next frame.
|
||||
*
|
||||
* Sets the hurry_up flag and if things are really bad, skips to the next
|
||||
* Sets the skip_frame flag and if things are really bad, skips to the next
|
||||
* keyframe.
|
||||
*
|
||||
* Returns TRUE if the frame should be decoded, FALSE if the frame can be dropped
|
||||
|
@ -1354,8 +1354,8 @@ gst_ffmpegdec_do_qos (GstFFMpegDec * ffmpegdec, GstClockTime timestamp,
|
|||
|
||||
/* skip qos if we have no observation (yet) */
|
||||
if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (earliest_time))) {
|
||||
/* no hurry_up initialy */
|
||||
ffmpegdec->context->hurry_up = 0;
|
||||
/* no skip_frame initialy */
|
||||
ffmpegdec->context->skip_frame = AVDISCARD_DEFAULT;
|
||||
goto no_qos;
|
||||
}
|
||||
|
||||
|
@ -1393,8 +1393,8 @@ gst_ffmpegdec_do_qos (GstFFMpegDec * ffmpegdec, GstClockTime timestamp,
|
|||
/* we were waiting for a keyframe, that's ok */
|
||||
goto skipping;
|
||||
}
|
||||
/* switch to hurry_up mode */
|
||||
goto hurry_up;
|
||||
/* switch to skip_frame mode */
|
||||
goto skip_frame;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1407,8 +1407,8 @@ skipping:
|
|||
}
|
||||
normal_mode:
|
||||
{
|
||||
if (ffmpegdec->context->hurry_up != 0) {
|
||||
ffmpegdec->context->hurry_up = 0;
|
||||
if (ffmpegdec->context->skip_frame != AVDISCARD_DEFAULT) {
|
||||
ffmpegdec->context->skip_frame = AVDISCARD_DEFAULT;
|
||||
*mode_switch = TRUE;
|
||||
GST_DEBUG_OBJECT (ffmpegdec, "QOS: normal mode %g < 0.4", proportion);
|
||||
}
|
||||
|
@ -1416,7 +1416,7 @@ normal_mode:
|
|||
}
|
||||
skip_to_keyframe:
|
||||
{
|
||||
ffmpegdec->context->hurry_up = 1;
|
||||
ffmpegdec->context->skip_frame = AVDISCARD_NONKEY;
|
||||
ffmpegdec->waiting_for_key = TRUE;
|
||||
*mode_switch = TRUE;
|
||||
GST_DEBUG_OBJECT (ffmpegdec,
|
||||
|
@ -1424,10 +1424,10 @@ skip_to_keyframe:
|
|||
/* we can skip the current frame */
|
||||
return FALSE;
|
||||
}
|
||||
hurry_up:
|
||||
skip_frame:
|
||||
{
|
||||
if (ffmpegdec->context->hurry_up != 1) {
|
||||
ffmpegdec->context->hurry_up = 1;
|
||||
if (ffmpegdec->context->skip_frame != AVDISCARD_NONREF) {
|
||||
ffmpegdec->context->skip_frame = AVDISCARD_NONREF;
|
||||
*mode_switch = TRUE;
|
||||
GST_DEBUG_OBJECT (ffmpegdec,
|
||||
"QOS: hurry up, diff %" G_GINT64_FORMAT " >= 0", diff);
|
||||
|
@ -1651,7 +1651,7 @@ gst_ffmpegdec_video_frame (GstFFMpegDec * ffmpegdec,
|
|||
gboolean iskeyframe;
|
||||
gboolean mode_switch;
|
||||
gboolean decode;
|
||||
gint hurry_up = 0;
|
||||
gint skip_frame = AVDISCARD_DEFAULT;
|
||||
GstClockTime out_timestamp, out_duration, out_pts;
|
||||
gint64 out_offset;
|
||||
const GstTSInfo *out_info;
|
||||
|
@ -1687,10 +1687,10 @@ gst_ffmpegdec_video_frame (GstFFMpegDec * ffmpegdec,
|
|||
}
|
||||
|
||||
if (!decode) {
|
||||
/* no decoding needed, save previous hurry_up value and brutely skip
|
||||
/* no decoding needed, save previous skip_frame value and brutely skip
|
||||
* decoding everything */
|
||||
hurry_up = ffmpegdec->context->hurry_up;
|
||||
ffmpegdec->context->hurry_up = 2;
|
||||
skip_frame = ffmpegdec->context->skip_frame;
|
||||
ffmpegdec->context->skip_frame = AVDISCARD_NONREF;
|
||||
}
|
||||
|
||||
/* save reference to the timing info */
|
||||
|
@ -1705,18 +1705,18 @@ gst_ffmpegdec_video_frame (GstFFMpegDec * ffmpegdec,
|
|||
|
||||
/* restore previous state */
|
||||
if (!decode)
|
||||
ffmpegdec->context->hurry_up = hurry_up;
|
||||
ffmpegdec->context->skip_frame = skip_frame;
|
||||
|
||||
GST_DEBUG_OBJECT (ffmpegdec, "after decode: len %d, have_data %d",
|
||||
len, have_data);
|
||||
|
||||
/* when we are in hurry_up mode, don't complain when ffmpeg returned
|
||||
/* when we are in skip_frame mode, don't complain when ffmpeg returned
|
||||
* no data because we told it to skip stuff. */
|
||||
if (len < 0 && (mode_switch || ffmpegdec->context->hurry_up))
|
||||
if (len < 0 && (mode_switch || ffmpegdec->context->skip_frame))
|
||||
len = 0;
|
||||
|
||||
if (len > 0 && have_data <= 0 && (mode_switch
|
||||
|| ffmpegdec->context->hurry_up)) {
|
||||
|| ffmpegdec->context->skip_frame)) {
|
||||
/* we consumed some bytes but nothing decoded and we are skipping frames,
|
||||
* disable the interpollation of DTS timestamps */
|
||||
ffmpegdec->last_out = -1;
|
||||
|
@ -2775,7 +2775,7 @@ gst_ffmpegdec_set_property (GObject * object,
|
|||
ffmpegdec->lowres = ffmpegdec->context->lowres = g_value_get_enum (value);
|
||||
break;
|
||||
case PROP_SKIPFRAME:
|
||||
ffmpegdec->hurry_up = ffmpegdec->context->hurry_up =
|
||||
ffmpegdec->skip_frame = ffmpegdec->context->skip_frame =
|
||||
g_value_get_enum (value);
|
||||
break;
|
||||
case PROP_DIRECT_RENDERING:
|
||||
|
@ -2808,7 +2808,7 @@ gst_ffmpegdec_get_property (GObject * object,
|
|||
g_value_set_enum (value, ffmpegdec->context->lowres);
|
||||
break;
|
||||
case PROP_SKIPFRAME:
|
||||
g_value_set_enum (value, ffmpegdec->context->hurry_up);
|
||||
g_value_set_enum (value, ffmpegdec->context->skip_frame);
|
||||
break;
|
||||
case PROP_DIRECT_RENDERING:
|
||||
g_value_set_boolean (value, ffmpegdec->direct_rendering);
|
||||
|
|
Loading…
Reference in a new issue