Skip to content

Commit 01710bc

Browse files
committed
Prevent cache mismatch (#110)
PTS was overwritten by a real timestamp that happens to match a future frame index. This is conservative approach. Ideally we should change `get_output_order_id` to use `pkt_dts`.
1 parent f4b447e commit 01710bc

1 file changed

Lines changed: 3 additions & 2 deletions

File tree

common/lwlibav_video.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -679,9 +679,10 @@ static int is_picture_stored_in_frame(lwlibav_video_decode_handler_t* vdhp, AVFr
679679
int64_t output_id = get_output_order_id(frame);
680680
if (output_id != AV_NOPTS_VALUE) {
681681
uint32_t reliable_picture_number = (uint32_t)output_id;
682-
if (picture_number == reliable_picture_number)
682+
uint32_t target_decoding_id = vdhp->frame_list[picture_number].sample_number;
683+
if (picture_number == reliable_picture_number && (int64_t)target_decoding_id == frame->pkt_dts)
683684
return 1;
684-
else if (is_half_frame(vdhp, reliable_picture_number)) {
685+
else if (is_half_frame(vdhp, reliable_picture_number) && (int64_t)target_decoding_id == frame->pkt_dts) {
685686
int field_number = field_number_of_picture_in_frame(vdhp, frame, reliable_picture_number);
686687
if ((field_number == 1 && picture_number == reliable_picture_number + 1)
687688
|| (field_number == 2 && picture_number == reliable_picture_number - 1))

0 commit comments

Comments
 (0)