From 5310bcfbad6c8687d0bdbe5e49fb73858dcc1631 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 27 May 2022 16:26:27 -0500 Subject: [Libs:StageFright] Relax ctts flag checking - Some encoders will set ctts flags incorrectly (similar to version) resulting in libstagefright aborting playback of media based on the media header. - This change relaxes libstagefright's checking to pass ctts flags 0 or 1 and falls through to actually trying to decoding the file. --- .../frameworks/av/media/libstagefright/SampleTable.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libs/libstagefright/frameworks/av/media/libstagefright/SampleTable.cpp b/libs/libstagefright/frameworks/av/media/libstagefright/SampleTable.cpp index bc991e8e1..7d3a8f7da 100644 --- a/libs/libstagefright/frameworks/av/media/libstagefright/SampleTable.cpp +++ b/libs/libstagefright/frameworks/av/media/libstagefright/SampleTable.cpp @@ -385,6 +385,7 @@ status_t SampleTable::setTimeToSampleParams( // contains signed values, however some software creates version 0 files that // contain signed values, so we're always treating the values as signed, // regardless of version. +// We do the same with ctts flags to work around encoder software issues. status_t SampleTable::setCompositionTimeToSampleParams( off64_t data_offset, size_t data_size) { ALOGV("There are reordered frames present."); @@ -406,8 +407,8 @@ status_t SampleTable::setCompositionTimeToSampleParams( uint32_t version = flags >> 24; flags &= 0xffffff; - if ((version != 0 && version != 1) || flags != 0) { - // Expected version = 0 or 1, flags = 0. + if ((version != 0 && version != 1) || (flags != 0 && flags != 1)) { + // Expected version = 0 or 1, flags = 0 or 1. return ERROR_MALFORMED; } -- cgit v1.2.3