mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 03:35:21 +00:00
msdk: enc: set pts and dts, fix inverted sync_point flag
Set the pts and dts on the frame that we receive from the msdk. Also fix the inverted logic in setting sync points, previously we were marking all frames as sync points except IDRs. https://bugzilla.gnome.org/show_bug.cgi?id=782801
This commit is contained in:
parent
7d53a5cd0a
commit
dcd9032d95
1 changed files with 14 additions and 2 deletions
|
@ -466,8 +466,15 @@ gst_msdkenc_finish_frame (GstMsdkEnc * thiz, MsdkEncTask * task,
|
|||
out_buf = gst_buffer_new_allocate (NULL, size, NULL);
|
||||
gst_buffer_fill (out_buf, 0, data, size);
|
||||
frame->output_buffer = out_buf;
|
||||
if ((task->output_bitstream.FrameType & MFX_FRAMETYPE_IDR) == 0 &&
|
||||
(task->output_bitstream.FrameType & MFX_FRAMETYPE_xIDR) == 0) {
|
||||
frame->pts =
|
||||
gst_util_uint64_scale (task->output_bitstream.TimeStamp, GST_SECOND,
|
||||
90000);
|
||||
frame->dts =
|
||||
gst_util_uint64_scale (task->output_bitstream.DecodeTimeStamp,
|
||||
GST_SECOND, 90000);
|
||||
|
||||
if ((task->output_bitstream.FrameType & MFX_FRAMETYPE_IDR) != 0 ||
|
||||
(task->output_bitstream.FrameType & MFX_FRAMETYPE_xIDR) != 0) {
|
||||
GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
|
||||
}
|
||||
|
||||
|
@ -686,6 +693,11 @@ invalid_frame:
|
|||
static gboolean
|
||||
gst_msdkenc_start (GstVideoEncoder * encoder)
|
||||
{
|
||||
/* Set the minimum pts to some huge value (1000 hours). This keeps
|
||||
the dts at the start of the stream from needing to be
|
||||
negative. */
|
||||
gst_video_encoder_set_min_pts (encoder, GST_SECOND * 60 * 60 * 1000);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue