diff mbox

[FFmpeg-devel] lavf/bink: fix latest header and add all existing revisions

Message ID 20170818174516.3928-1-bananaman255@gmail.com
State Accepted
Commit e7053f3316f53fc31d25384e3b6c89c96f8a5b20
Headers show

Commit Message

bananaman255@gmail.com Aug. 18, 2017, 5:45 p.m. UTC
From: bnnm <bananaman255@gmail.com>

KB2 'i' found in Life is Strange (Xbox 360), rest verified against binkconv.exe

Signed-off-by: bnnm <bananaman255@gmail.com>
---
 libavformat/bink.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

Comments

Michael Niedermayer Aug. 19, 2017, 11:51 p.m. UTC | #1
On Fri, Aug 18, 2017 at 07:45:16PM +0200, bananaman255@gmail.com wrote:
> From: bnnm <bananaman255@gmail.com>
> 
> KB2 'i' found in Life is Strange (Xbox 360), rest verified against binkconv.exe
> 
> Signed-off-by: bnnm <bananaman255@gmail.com>
> ---
>  libavformat/bink.c | 17 +++++++++++++----
>  1 file changed, 13 insertions(+), 4 deletions(-)

will apply

thanks

[...]
Michael Niedermayer Aug. 20, 2017, 1 a.m. UTC | #2
On Sun, Aug 20, 2017 at 01:51:07AM +0200, Michael Niedermayer wrote:
> On Fri, Aug 18, 2017 at 07:45:16PM +0200, bananaman255@gmail.com wrote:
> > From: bnnm <bananaman255@gmail.com>
> > 
> > KB2 'i' found in Life is Strange (Xbox 360), rest verified against binkconv.exe
> > 
> > Signed-off-by: bnnm <bananaman255@gmail.com>
> > ---
> >  libavformat/bink.c | 17 +++++++++++++----
> >  1 file changed, 13 insertions(+), 4 deletions(-)
> 
> will apply

before pushing, just to confirm

"bnnm" is the intended Author ? (it cannot be changed later)

[...]
bananaman255@gmail.com Aug. 20, 2017, 7:36 a.m. UTC | #3
Yes, it's my github handle, thanks.

2017-08-20 3:00 GMT+02:00 Michael Niedermayer <michael@niedermayer.cc>:

> On Sun, Aug 20, 2017 at 01:51:07AM +0200, Michael Niedermayer wrote:
> > On Fri, Aug 18, 2017 at 07:45:16PM +0200, bananaman255@gmail.com wrote:
> > > From: bnnm <bananaman255@gmail.com>
> > >
> > > KB2 'i' found in Life is Strange (Xbox 360), rest verified against
> binkconv.exe
> > >
> > > Signed-off-by: bnnm <bananaman255@gmail.com>
> > > ---
> > >  libavformat/bink.c | 17 +++++++++++++----
> > >  1 file changed, 13 insertions(+), 4 deletions(-)
> >
> > will apply
>
> before pushing, just to confirm
>
> "bnnm" is the intended Author ? (it cannot be changed later)
>
> [...]
>
>
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> No human being will ever know the Truth, for even if they happen to say it
> by chance, they would not even known they had done so. -- Xenophanes
>
diff mbox

Patch

diff --git a/libavformat/bink.c b/libavformat/bink.c
index 20dba677db..8a05082fcd 100644
--- a/libavformat/bink.c
+++ b/libavformat/bink.c
@@ -65,10 +65,12 @@  static int probe(AVProbeData *p)
     int smush = AV_RN32(p->buf) == AV_RN32("SMUS");
 
     do {
-        if (((b[0] == 'B' && b[1] == 'I' && b[2] == 'K' &&
-             (b[3] == 'b' || b[3] == 'f' || b[3] == 'g' || b[3] == 'h' || b[3] == 'i')) ||
+        if (((b[0] == 'B' && b[1] == 'I' && b[2] == 'K' && /* Bink 1 */
+             (b[3] == 'b' || b[3] == 'f' || b[3] == 'g' || b[3] == 'h' || b[3] == 'i' ||
+              b[3] == 'k')) ||
              (b[0] == 'K' && b[1] == 'B' && b[2] == '2' && /* Bink 2 */
-             (b[3] == 'a' || b[3] == 'd' || b[3] == 'f' || b[3] == 'g'))) &&
+             (b[3] == 'a' || b[3] == 'd' || b[3] == 'f' || b[3] == 'g' || b[3] == 'h' ||
+              b[3] == 'i' || b[3] == 'j' || b[3] == 'k'))) &&
             AV_RL32(b+8) > 0 &&  // num_frames
             AV_RL32(b+20) > 0 && AV_RL32(b+20) <= BINK_MAX_WIDTH &&
             AV_RL32(b+24) > 0 && AV_RL32(b+24) <= BINK_MAX_HEIGHT &&
@@ -159,7 +161,14 @@  static int read_header(AVFormatContext *s)
     }
 
     if (bink->num_audio_tracks) {
-        avio_skip(pb, 4 * bink->num_audio_tracks);
+        uint32_t signature = (vst->codecpar->codec_tag & 0xFFFFFF);
+        uint8_t revision = ((vst->codecpar->codec_tag >> 24) % 0xFF);
+
+        if ((signature == AV_RL32("BIK") && (revision == 0x6b)) || /* k */
+            (signature == AV_RL32("KB2") && (revision == 0x69 || revision == 0x6a || revision == 0x6b))) /* i,j,k */
+            avio_skip(pb, 4); /* unknown new field */
+
+        avio_skip(pb, 4 * bink->num_audio_tracks); /* max decoded size */
 
         for (i = 0; i < bink->num_audio_tracks; i++) {
             ast = avformat_new_stream(s, NULL);