libbluray | branch: master | hpi1 <[email protected]> | Thu Apr 11 09:50:52 2013 +0300| [3cfcdb1ae126270456a97faebdca26b5dbcf2c9c] | committer: hpi1
graphics_processor_decode_pes(): check dts<->stc diff is less than 30 seconds Fixes subtitle freezes at some clip boundaries > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=3cfcdb1ae126270456a97faebdca26b5dbcf2c9c --- src/libbluray/decoders/graphics_processor.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/libbluray/decoders/graphics_processor.c b/src/libbluray/decoders/graphics_processor.c index c251e58..8db6c93 100644 --- a/src/libbluray/decoders/graphics_processor.c +++ b/src/libbluray/decoders/graphics_processor.c @@ -356,7 +356,7 @@ static int _decode_segment(PG_DISPLAY_SET *s, PES_BUFFER *p) /* * mpeg-pes interface */ - +#define MAX_STC_DTS_DIFF (INT64_C(90000 * 30)) /* 30 seconds */ static int graphics_processor_decode_pes(PG_DISPLAY_SET **s, PES_BUFFER **p, int64_t stc) { if (!s) { @@ -371,9 +371,14 @@ static int graphics_processor_decode_pes(PG_DISPLAY_SET **s, PES_BUFFER **p, int /* time to decode next segment ? */ if (stc >= 0 && (*p)->dts > stc) { - GP_TRACE("Segment dts > stc (%"PRId64" > %"PRId64" ; diff %"PRId64")\n", - (*p)->dts, stc, (*p)->dts - stc); - return 0; + + /* filter out values that seem to be incorrect (if stc is not updated) */ + int64_t diff = (*p)->dts - stc; + if (diff < MAX_STC_DTS_DIFF) { + GP_TRACE("Segment dts > stc (%"PRId64" > %"PRId64" ; diff %"PRId64")\n", + (*p)->dts, stc, diff); + return 0; + } } /* all fragments present ? */ _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
