mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-28 11:55:39 +00:00
codecs: h264dec: Set picture to a small poc when mem_mgmt_5.
When current frame memory_management_control_operation equal to 5, that means we need to drain the dpb and the current picture act as an IDR frame. So it should have smaller poc than the later pictures to ensure the output order. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2373>
This commit is contained in:
parent
7a6bc987a5
commit
23b15aa5d0
1 changed files with 16 additions and 0 deletions
|
@ -991,6 +991,22 @@ gst_h264_dpb_perform_memory_management_control_operation (GstH264Dpb * dpb,
|
|||
}
|
||||
picture->mem_mgmt_5 = TRUE;
|
||||
picture->frame_num = 0;
|
||||
/* When the current picture includes a memory management control operation
|
||||
equal to 5, after the decoding of the current picture, tempPicOrderCnt
|
||||
is set equal to PicOrderCnt( CurrPic ), TopFieldOrderCnt of the current
|
||||
picture (if any) is set equal to TopFieldOrderCnt - tempPicOrderCnt,
|
||||
and BottomFieldOrderCnt of the current picture (if any) is set equal to
|
||||
BottomFieldOrderCnt - tempPicOrderCnt. */
|
||||
if (picture->field == GST_H264_PICTURE_FIELD_TOP_FIELD) {
|
||||
picture->top_field_order_cnt = picture->pic_order_cnt = 0;
|
||||
} else if (picture->field == GST_H264_PICTURE_FIELD_BOTTOM_FIELD) {
|
||||
picture->bottom_field_order_cnt = picture->pic_order_cnt = 0;
|
||||
} else {
|
||||
picture->top_field_order_cnt -= picture->pic_order_cnt;
|
||||
picture->bottom_field_order_cnt -= picture->pic_order_cnt;
|
||||
picture->pic_order_cnt = MIN (picture->top_field_order_cnt,
|
||||
picture->bottom_field_order_cnt);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
/* 8.2.5.4.6 Replace long term reference pictures with current picture.
|
||||
|
|
Loading…
Reference in a new issue