validate.test.nle.urisource.play
validate.test.playbin.check_active_stream
validate.test.playbin3.ignore_raw_audio_from_demuxer
+validate.test.playbin3.ogv_vp8
validate.test.playbin3.sourcebin_check_mixed_static_and_dyanmic_pads
validate.test.rtp.h264.payloader_fail_nego_force_profile
validate.test.rtp.h264.payloader_nego_profile
--- /dev/null
+set-globals, media_dir="$(test_dir)/../../../medias/"
+meta,
+ args = {
+ "playbin3 uri=file://$(media_dir)/defaults/ogg/wpt-test-ogg-vp8.ogv name=playbin video-sink=\"$(videosink) name=videosink\" audio-sink=\"$(audiosink)\"",
+ },
+ scenario=play_5s
if ((packet->bytes >= 7 && memcmp (packet->packet, "OVP80\2 ", 7) == 0) ||
packet->b_o_s ||
(packet->bytes >= 5 && memcmp (packet->packet, "OVP80", 5) == 0)) {
+ /* Request the first packet being pushed downstream to have the header
+ flag set, unblocking the keyframe_waiter_probe in decodebin3. */
+ pad->need_header_flag = TRUE;
/* We don't push header packets for VP8 */
goto done;
}
if (delta_unit)
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT);
- /* set header flag for buffers that are also in the streamheaders */
- if (is_header)
+ /* set header flag for buffers that are also in the streamheaders or when explicitely requested (VP8). */
+ if (is_header || pad->need_header_flag) {
+ pad->need_header_flag = FALSE;
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_HEADER);
+ }
if (packet->packet != NULL) {
/* copy packet in buffer */
GList *continued;
+ gboolean need_header_flag;
+
gboolean discont;
GstFlowReturn last_ret; /* last return of _pad_push() */
gboolean is_eos;
return ((gpos & 0x07ffffff) == 0);
}
+static gboolean
+is_packet_keyframe_vp8 (GstOggStream * pad, ogg_packet * packet)
+{
+ guint32 hdr;
+ gboolean is_kf = FALSE;
+
+ if (packet->bytes < 3) {
+ return FALSE;
+ }
+
+ hdr = GST_READ_UINT24_LE (packet->packet);
+
+ is_kf = (hdr & 0x1);
+ return is_kf;
+}
+
static gint64
granulepos_to_granule_vp8 (GstOggStream * pad, gint64 gpos)
{
granulepos_to_granule_vp8,
granule_to_granulepos_vp8,
is_keyframe_vp8,
- NULL,
+ is_packet_keyframe_vp8,
is_header_vp8,
packet_duration_vp8,
granulepos_to_key_granule_vp8,