mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-19 14:56:36 +00:00
vp8dec: Fix for handling resolution changes when decoding VP8
If the resolution changes in the bitstream without the input caps changing we would previously output corrupted video or crash. https://bugzilla.gnome.org/show_bug.cgi?id=719359
This commit is contained in:
parent
8bee49c85e
commit
5430b6c351
1 changed files with 22 additions and 1 deletions
|
@ -497,8 +497,10 @@ gst_vp8_dec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
|
|||
long decoder_deadline = 0;
|
||||
GstClockTimeDiff deadline;
|
||||
GstMapInfo minfo;
|
||||
GstVideoInfo *info;
|
||||
GstVideoCodecState *new_output_state;
|
||||
|
||||
GST_DEBUG_OBJECT (decoder, "handle_frame");
|
||||
GST_LOG_OBJECT (decoder, "handle_frame");
|
||||
|
||||
dec = GST_VP8_DEC (decoder);
|
||||
|
||||
|
@ -550,6 +552,25 @@ gst_vp8_dec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
|
|||
(double) -deadline / GST_SECOND);
|
||||
gst_video_decoder_drop_frame (decoder, frame);
|
||||
} else {
|
||||
info = &dec->output_state->info;
|
||||
if (GST_VIDEO_INFO_WIDTH (info) != img->d_w
|
||||
|| GST_VIDEO_INFO_HEIGHT (info) != img->d_h) {
|
||||
GST_DEBUG_OBJECT (dec,
|
||||
"Changed output resolution was %d x %d now is got %u x %u (display %u x %u)",
|
||||
GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info), img->w,
|
||||
img->h, img->d_w, img->d_h);
|
||||
|
||||
new_output_state =
|
||||
gst_video_decoder_set_output_state (GST_VIDEO_DECODER (dec),
|
||||
GST_VIDEO_FORMAT_I420, img->d_w, img->d_h, dec->output_state);
|
||||
if (dec->output_state) {
|
||||
gst_video_codec_state_unref (dec->output_state);
|
||||
}
|
||||
dec->output_state = new_output_state;
|
||||
/* No need to call negotiate() here, it will be automatically called
|
||||
* by allocate_output_frame() below */
|
||||
}
|
||||
|
||||
ret = gst_video_decoder_allocate_output_frame (decoder, frame);
|
||||
|
||||
if (ret == GST_FLOW_OK) {
|
||||
|
|
Loading…
Reference in a new issue