Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@member.fsf.org>2009-04-25 04:23:32 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2009-04-25 04:23:32 (GMT)
commitc6e113145409bf5ea5868b270507083462be64d1 (patch)
treec59bfcbd7fe8f8a835cf1a5efa4a0aea82f973c0
parent3082ebf9d266a9c11802a1744c99e682001c80e3 (diff)
Let theoraenc treat first buffer as a buffer with keyframe
-rw-r--r--gst/gstvideorate.c11
-rw-r--r--gst/gstvideorate.h4
2 files changed, 15 insertions, 0 deletions
diff --git a/gst/gstvideorate.c b/gst/gstvideorate.c
index 8ba9ede..b728357 100644
--- a/gst/gstvideorate.c
+++ b/gst/gstvideorate.c
@@ -396,6 +396,8 @@ gst_video_rate_init (GstVideoRate * videorate, GstVideoRateClass * klass)
videorate->from_rate_denominator = 0;
videorate->to_rate_numerator = 0;
videorate->to_rate_denominator = 0;
+
+ videorate->first_pass_buffer = TRUE;
}
/* flush the oldest buffer */
@@ -714,6 +716,13 @@ gst_video_rate_chain (GstPad * pad, GstBuffer * buffer)
gst_buffer_unref (buffer);
goto done;
}
+
+ // XXX let downstream theoraenc treat first buffer
+ // as a buffer with keyframe
+ if (videorate->first_pass_buffer == TRUE) {
+ videorate->first_pass_buffer = FALSE;
+ break;
+ }
}
/* continue while the first one was the best */
}
@@ -842,6 +851,8 @@ gst_video_rate_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_PAUSED_TO_READY:
gst_video_rate_reset (videorate);
break;
+ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+ videorate->first_pass_buffer = TRUE;
default:
break;
}
diff --git a/gst/gstvideorate.h b/gst/gstvideorate.h
index 76e690d..01abcae 100644
--- a/gst/gstvideorate.h
+++ b/gst/gstvideorate.h
@@ -65,6 +65,10 @@ struct _GstVideoRate
gboolean silent;
gdouble new_pref;
gboolean skip_to_first;
+
+ // XXX let downstream theoraenc treat first buffer
+ // as a buffer with keyframe
+ gboolean first_pass_buffer;
};
struct _GstVideoRateClass