Message ID | CAF1j9YNzOa9rv6+8zYPp4HZ1uG9xLA-A-0J4QaqjHghvLvQHFQ@mail.gmail.com |
---|---|
State | Superseded |
Headers | show |
On Fri, Feb 02, 2018 at 05:55:38PM -0800, Xiaohan Wang (王消寒) wrote: > > mov.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > 87157b4053de0e044e78db72ef13e8058075c235 0001-Fix-ctts_index-calculation.patch > From bb376fd2de5da5f9ecdef41621a579252b899d7d Mon Sep 17 00:00:00 2001 > From: Xiaohan Wang <xhwang@chromium.org> > Date: Fri, 2 Feb 2018 17:33:56 -0800 > Subject: [PATCH] Fix ctts_index calculation > > An index should never be equal to the count. Hence we must make sure > *ctts_index < ctts_count. > --- > libavformat/mov.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) should be reviewed by sasi idealy, he wrote this thx [...]
> > diff --git a/libavformat/mov.c b/libavformat/mov.c > index 5adba52e08..f0bd3e3623 100644 > --- a/libavformat/mov.c > +++ b/libavformat/mov.c > @@ -3148,7 +3148,7 @@ static int find_prev_closest_index(AVStream *st, > *ctts_index = 0; > *ctts_sample = 0; > for (index_ctts_count = 0; index_ctts_count < *index; > index_ctts_count++) { > - if (*ctts_index < ctts_count) { + if (*ctts_index < ctts_count - 1) { > If you do this, then we are skipping, looking at ctts_samples in the last ctts entry where (*ctts_index == ctts_count -1), which is not desired. (*ctts_sample)++; > if (ctts_data[*ctts_index].count == *ctts_sample) { > (*ctts_index)++; > Here *ctts_index == ctts_count only iff the *ctts_index is the last CTTS entry, and we still didn't reach *index. That means that it's file with CTTS truncated i.e. no corresponding CTTS entries for some STTS entries. This issue can be fixed by checking for *ctts_index < ctts_count, in the line after this loop. while (*index <https://cs.corp.google.com/piper///depot/google3/third_party/ffmpeg/next/libavformat/mov.c?l=3123&ct=xref_jump_to_def&gsn=index&rcl=184932376> >= 0 && (*ctts_index <https://cs.corp.google.com/piper///depot/google3/third_party/ffmpeg/next/libavformat/mov.c?l=3124&ct=xref_jump_to_def&gsn=ctts_index&rcl=184932376>) >= 0) { we already check for (*ctts_index) >=0 so we can check for the upper bound too. On Sat, Feb 3, 2018 at 12:36 PM, Michael Niedermayer <michael@niedermayer.cc > wrote: > On Fri, Feb 02, 2018 at 05:55:38PM -0800, Xiaohan Wang (王消寒) wrote: > > > > > mov.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > 87157b4053de0e044e78db72ef13e8058075c235 0001-Fix-ctts_index-calculatio > n.patch > > From bb376fd2de5da5f9ecdef41621a579252b899d7d Mon Sep 17 00:00:00 2001 > > From: Xiaohan Wang <xhwang@chromium.org> > > Date: Fri, 2 Feb 2018 17:33:56 -0800 > > Subject: [PATCH] Fix ctts_index calculation > > > > An index should never be equal to the count. Hence we must make sure > > *ctts_index < ctts_count. > > --- > > libavformat/mov.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > should be reviewed by sasi idealy, he wrote this > > thx > > > [...] > > -- > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB > > Democracy is the form of government in which you can choose your dictator >
From bb376fd2de5da5f9ecdef41621a579252b899d7d Mon Sep 17 00:00:00 2001 From: Xiaohan Wang <xhwang@chromium.org> Date: Fri, 2 Feb 2018 17:33:56 -0800 Subject: [PATCH] Fix ctts_index calculation An index should never be equal to the count. Hence we must make sure *ctts_index < ctts_count. --- libavformat/mov.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 5adba52e08..f0bd3e3623 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -3148,7 +3148,7 @@ static int find_prev_closest_index(AVStream *st, *ctts_index = 0; *ctts_sample = 0; for (index_ctts_count = 0; index_ctts_count < *index; index_ctts_count++) { - if (*ctts_index < ctts_count) { + if (*ctts_index < ctts_count - 1) { (*ctts_sample)++; if (ctts_data[*ctts_index].count == *ctts_sample) { (*ctts_index)++; -- 2.16.0.rc1.238.g530d649a79-goog