summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjstebbins <[email protected]>2013-01-17 18:59:37 +0000
committerjstebbins <[email protected]>2013-01-17 18:59:37 +0000
commit14c8ed12f79766cc5f29addc75df97554831a924 (patch)
treed134b1941f45efb18937de2d94ebcf30a4644ae1
parent9342dc04b6281353599c777f103faadb6bdb1275 (diff)
libav patch: fix silly error in dca resync patch
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@5178 b64f7644-9d1e-0410-96f1-a4d463321fa5
-rw-r--r--contrib/ffmpeg/A04-dca-resync.patch16
1 files changed, 9 insertions, 7 deletions
diff --git a/contrib/ffmpeg/A04-dca-resync.patch b/contrib/ffmpeg/A04-dca-resync.patch
index 3e32c7a74..bbd9ad7ed 100644
--- a/contrib/ffmpeg/A04-dca-resync.patch
+++ b/contrib/ffmpeg/A04-dca-resync.patch
@@ -1,17 +1,17 @@
-From 021a7700ff839b295b5776d4552563de1a448df6 Mon Sep 17 00:00:00 2001
+From 9922584ba3b5b02d913e629ea74d72e994870873 Mon Sep 17 00:00:00 2001
From: John Stebbins <[email protected]>
-Date: Sat, 5 Jan 2013 16:57:06 -0800
+Date: Thu, 17 Jan 2013 19:57:26 +0100
Subject: [PATCH] dca_parser: Handle changes in dca frame size
A change in framesize caused a perpetual loss of synchronization.
So read (and use) the frame size from the frame header instead of
setting it only once.
---
- libavcodec/dca_parser.c | 13 ++++++++-----
- 1 file changed, 8 insertions(+), 5 deletions(-)
+ libavcodec/dca_parser.c | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/libavcodec/dca_parser.c b/libavcodec/dca_parser.c
-index ab235cf..75e9321 100644
+index ab235cf..12180f3 100644
--- a/libavcodec/dca_parser.c
+++ b/libavcodec/dca_parser.c
@@ -62,10 +62,12 @@ static int dca_find_frame_end(DCAParseContext * pc1, const uint8_t * buf,
@@ -46,17 +46,19 @@ index ab235cf..75e9321 100644
{
GetBitContext gb;
uint8_t hdr[12 + FF_INPUT_BUFFER_PADDING_SIZE] = { 0 };
-@@ -159,6 +158,10 @@ static int dca_parse_params(const uint8_t *buf, int buf_size, int *duration,
+@@ -159,7 +158,11 @@ static int dca_parse_params(const uint8_t *buf, int buf_size, int *duration,
return AVERROR_INVALIDDATA;
*duration = 256 * (sample_blocks / 8);
+- skip_bits(&gb, 20);
+ *framesize = get_bits(&gb, 14) + 1;
+ if (*framesize < 95)
+ return AVERROR_INVALIDDATA;
+
- skip_bits(&gb, 20);
++ skip_bits(&gb, 6);
sr_code = get_bits(&gb, 4);
*sample_rate = avpriv_dca_sample_rates[sr_code];
+ if (*sample_rate == 0)
@@ -190,7 +193,7 @@ static int dca_parse(AVCodecParserContext * s,
}