goto error;
}
- if (!gst_nv_decoder_finish_frame (self->decoder, vdec, decoder_frame,
- &frame->output_buffer)) {
+ if (!gst_nv_decoder_finish_frame (self->decoder, vdec, picture->discont_state,
+ decoder_frame, &frame->output_buffer)) {
GST_ERROR_OBJECT (self, "Failed to handle output picture");
goto error;
}
gboolean
gst_nv_decoder_finish_frame (GstNvDecoder * decoder, GstVideoDecoder * videodec,
- GstNvDecoderFrame * frame, GstBuffer ** buffer)
+ GstVideoCodecState * input_state, GstNvDecoderFrame * frame,
+ GstBuffer ** buffer)
{
GstBuffer *outbuf = NULL;
gboolean ret = FALSE;
g_return_val_if_fail (frame != NULL, GST_FLOW_ERROR);
g_return_val_if_fail (buffer != NULL, GST_FLOW_ERROR);
+ if (input_state) {
+ if (!gst_nv_decoder_negotiate (decoder, videodec, input_state)) {
+ GST_ERROR_OBJECT (videodec, "Couldn't re-negotiate with updated state");
+ return FALSE;
+ }
+ }
+
outbuf = gst_video_decoder_allocate_output_buffer (videodec);
if (!outbuf) {
GST_ERROR_OBJECT (videodec, "Couldn't allocate output buffer");
gboolean gst_nv_decoder_finish_frame (GstNvDecoder * decoder,
GstVideoDecoder * videodec,
+ GstVideoCodecState * input_state,
GstNvDecoderFrame *frame,
GstBuffer ** buffer);
goto error;
}
- if (!gst_nv_decoder_finish_frame (self->decoder, vdec, decoder_frame,
- &frame->output_buffer)) {
+ if (!gst_nv_decoder_finish_frame (self->decoder, vdec, picture->discont_state,
+ decoder_frame, &frame->output_buffer)) {
GST_ERROR_OBJECT (self, "Failed to handle output picture");
goto error;
}
goto error;
}
- if (!gst_nv_decoder_finish_frame (self->decoder, vdec, decoder_frame,
- &frame->output_buffer)) {
+ if (!gst_nv_decoder_finish_frame (self->decoder, vdec, picture->discont_state,
+ decoder_frame, &frame->output_buffer)) {
GST_ERROR_OBJECT (self, "Failed to handle output picture");
goto error;
}
goto error;
}
- if (!gst_nv_decoder_finish_frame (self->decoder, vdec, decoder_frame,
- &frame->output_buffer)) {
+ if (!gst_nv_decoder_finish_frame (self->decoder, vdec, picture->discont_state,
+ decoder_frame, &frame->output_buffer)) {
GST_ERROR_OBJECT (self, "Failed to handle output picture");
goto error;
}
goto error;
}
- if (!gst_nv_decoder_finish_frame (self->decoder, vdec, decoder_frame,
- &frame->output_buffer)) {
+ if (!gst_nv_decoder_finish_frame (self->decoder, vdec, picture->discont_state,
+ decoder_frame, &frame->output_buffer)) {
GST_ERROR_OBJECT (self, "Failed to handle output picture");
goto error;
}