codecs: vp9decoder: Don't check codec change with show_existing_frame
authorSeungha Yang <seungha@centricular.com>
Sun, 28 Mar 2021 07:11:23 +0000 (16:11 +0900)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 7 Apr 2021 19:32:29 +0000 (19:32 +0000)
Show existing frame will zero frame_type value but it doesn't mean
it's keyframe.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2112>

gst-libs/gst/codecs/gstvp9decoder.c

index f6d14ab..e38ff4e 100644 (file)
@@ -297,7 +297,8 @@ gst_vp9_decoder_handle_frame (GstVideoDecoder * decoder,
     goto unmap_and_error;
   }
 
-  if (priv->wait_keyframe && frame_hdr.frame_type != GST_VP9_KEY_FRAME) {
+  if (priv->wait_keyframe && (frame_hdr.frame_type != GST_VP9_KEY_FRAME
+          || frame_hdr.show_existing_frame)) {
     GST_DEBUG_OBJECT (self, "Drop frame before initial keyframe");
     gst_buffer_unmap (in_buf, &map);
 
@@ -307,6 +308,7 @@ gst_vp9_decoder_handle_frame (GstVideoDecoder * decoder,
   }
 
   if (frame_hdr.frame_type == GST_VP9_KEY_FRAME &&
+      !frame_hdr.show_existing_frame &&
       !gst_vp9_decoder_check_codec_change (self, &frame_hdr)) {
     GST_ERROR_OBJECT (self, "codec change error");
     goto unmap_and_error;