[vlc-commits] [Git][videolan/vlc][master] 2 commits: contrib: mad: remove unused patch
Steve Lhomme (@robUx4)
gitlab at videolan.org
Tue Oct 13 13:30:54 UTC 2026
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
e2f9fe5f by Steve Lhomme at 2026-10-13T12:03:35+00:00
contrib: mad: remove unused patch
- - - - -
22cfdef6 by Steve Lhomme at 2026-10-13T12:03:35+00:00
contrib: mad: update the 0.16.5
- - - - -
4 changed files:
- + contrib/src/mad/0001-CMake-case-of-AND-test.patch
- contrib/src/mad/SHA512SUMS
- − contrib/src/mad/check-bitstream-length.patch
- contrib/src/mad/rules.mak
Changes:
=====================================
contrib/src/mad/0001-CMake-case-of-AND-test.patch
=====================================
@@ -0,0 +1,32 @@
+From 9dd96b40c5caf76fd1c6ef9dcc80ba330eb57a79 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at ycbcr.xyz>
+Date: Mon, 12 Oct 2026 12:50:15 +0200
+Subject: [PATCH] CMake: case of AND test
+
+Older cmake (3.17) reports an error:
+
+```
+CMake Error at CMakeLists.txt:86 (if):
+ if given arguments:
+ "ASO" "and" "FALSE"
+```
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 3c4bf9f..4655feb 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -83,7 +83,7 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(x|i[3456])86")
+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES ".*(arm|ARM).*")
+ message(STATUS "Using ARM fixed point math")
+ option (FPM_ARM "ARM fixed point math" ON)
+- if(ASO and FALSE)
++ if(ASO AND FALSE)
+ enable_language(ASM)
+ list(APPEND MAD_CONFIG_DEFS ASO_INTERLEAVE1 ASO_IMDCT)
+ if (BUILD_SHARED_LIBS)
+--
+2.52.0.windows.1
+
=====================================
contrib/src/mad/SHA512SUMS
=====================================
@@ -1 +1 @@
-e56b84e112e3a95cd4fde7be1ce94c4a277275da3cc69ca051113162a84158ac9a1fe9c3f2de186202de5eca5c112aacb87533206288a084cf5ba048e6d95c22 libmad-0.16.4.tar.gz
+4ea1e65970e73d3bcccf3f2a57d89ac583815b4a4a2348c60018c766b4b2a7201a45df182332c0f5b7117baa033830943624afec0b5d1f051452d2c279b6be1a libmad-0.16.5.tar.gz
=====================================
contrib/src/mad/check-bitstream-length.patch deleted
=====================================
@@ -1,1173 +0,0 @@
-From 6ee4d5bac6ce98a6533f18298bfa74c2cf999eed Mon Sep 17 00:00:00 2001
-From: Shlomi Fish <shlomif at shlomifish.org>
-Date: Sun, 26 Jun 2016 21:56:48 +0200
-Subject: [PATCH 2/2] fix libmad sound issue
-
----
- bit.c | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- frame.c | 66 +++++++++++----------
- layer12.c | 66 ++++++++++-----------
- layer3.c | 119 +++++++++++++++++++-------------------
- mad.h.in | 31 ++++++++++
- stream.c | 23 +++++---
- 6 files changed, 345 insertions(+), 130 deletions(-)
-
-diff --git a/bit.c b/bit.c
-index 72a094c..5db9be4 100644
---- a/bit.c
-+++ b/bit.c
-@@ -77,6 +77,176 @@ unsigned short const crc_table[256] = {
-
- # define CRC_POLY 0x8005
-
-+/*
-+ * NAME: bit->init()
-+ * DESCRIPTION: initialize bit pointer struct
-+ */
-+void mad_bit_w_len_init(struct mad_bit_w_lenptr *bitptr, unsigned char const *byte, unsigned int length)
-+{
-+ bitptr->byte = byte;
-+ bitptr->cache = 0;
-+ bitptr->left = CHAR_BIT;
-+ bitptr->length = length;
-+}
-+
-+/*
-+ * NAME: bit->length()
-+ * DESCRIPTION: return number of bits between start and end points
-+ */
-+unsigned int mad_bit_w_len_length(struct mad_bit_w_lenptr const *begin,
-+ struct mad_bit_w_lenptr const *end)
-+{
-+ return begin->left +
-+ CHAR_BIT * (end->byte - (begin->byte + 1)) + (CHAR_BIT - end->left);
-+}
-+
-+/*
-+ * NAME: bit->nextbyte()
-+ * DESCRIPTION: return pointer to next unprocessed byte
-+ */
-+unsigned char const *mad_bit_w_len_nextbyte(struct mad_bit_w_lenptr const *bitptr)
-+{
-+ if (bitptr->left == CHAR_BIT)
-+ return bitptr->byte;
-+ if (bitptr->length == 0)
-+ return 0;
-+ return bitptr->byte + 1;
-+}
-+
-+/*
-+ * NAME: bit->skip()
-+ * DESCRIPTION: advance bit pointer
-+ */
-+void mad_bit_w_len_skip(struct mad_bit_w_lenptr *bitptr, unsigned int len)
-+{
-+ if (bitptr->length < len / CHAR_BIT)
-+ return;
-+ bitptr->byte += len / CHAR_BIT;
-+ bitptr->left -= len % CHAR_BIT;
-+ bitptr->length -= len / CHAR_BIT;
-+
-+ if (bitptr->left > CHAR_BIT) {
-+ if (bitptr->length == 0)
-+ return;
-+ bitptr->byte++;
-+ bitptr->length--;
-+ bitptr->left += CHAR_BIT;
-+ }
-+
-+ if (bitptr->left < CHAR_BIT)
-+ bitptr->cache = *bitptr->byte;
-+}
-+
-+/*
-+ * NAME: bit->read()
-+ * DESCRIPTION: read an arbitrary number of bits and return their UIMSBF value
-+ */
-+unsigned long mad_bit_w_len_read(struct mad_bit_w_lenptr *bitptr, unsigned int len)
-+{
-+ register unsigned long value;
-+
-+ if (bitptr->left == CHAR_BIT)
-+ bitptr->cache = *bitptr->byte;
-+
-+ if (len < bitptr->left) {
-+ value = (bitptr->cache & ((1 << bitptr->left) - 1)) >>
-+ (bitptr->left - len);
-+ bitptr->left -= len;
-+
-+ return value;
-+ }
-+
-+ /* remaining bits in current byte */
-+
-+ value = bitptr->cache & ((1 << bitptr->left) - 1);
-+ len -= bitptr->left;
-+
-+ if (bitptr->length == 0)
-+ return value;
-+ bitptr->byte++;
-+ bitptr->length--;
-+ bitptr->left = CHAR_BIT;
-+
-+ /* more bytes */
-+
-+ while (len >= CHAR_BIT && bitptr->length > 0) {
-+ value = (value << CHAR_BIT) | *bitptr->byte++;
-+ bitptr->length--;
-+ len -= CHAR_BIT;
-+ }
-+
-+ if (len > 0 && bitptr->length > 0) {
-+ bitptr->cache = *bitptr->byte;
-+
-+ value = (value << len) | (bitptr->cache >> (CHAR_BIT - len));
-+ bitptr->left -= len;
-+ }
-+
-+ return value;
-+}
-+
-+# if 0
-+/*
-+ * NAME: bit->write()
-+ * DESCRIPTION: write an arbitrary number of bits
-+ */
-+void mad_bit_w_len_write(struct mad_bit_w_lenptr *bitptr, unsigned int len,
-+ unsigned long value)
-+{
-+ unsigned char *ptr;
-+
-+ ptr = (unsigned char *) bitptr->byte;
-+
-+ /* ... */
-+}
-+# endif
-+
-+/*
-+ * NAME: bit->crc()
-+ * DESCRIPTION: compute CRC-check word
-+ */
-+unsigned short mad_bit_w_len_crc(struct mad_bit_w_lenptr bitptr, unsigned int len,
-+ unsigned short init)
-+{
-+ register unsigned int crc;
-+
-+ for (crc = init; len >= 32; len -= 32) {
-+ register unsigned long data;
-+
-+ data = mad_bit_w_len_read(&bitptr, 32);
-+
-+ crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 24)) & 0xff];
-+ crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 16)) & 0xff];
-+ crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 8)) & 0xff];
-+ crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 0)) & 0xff];
-+ }
-+
-+ switch (len / 8) {
-+ case 3: crc = (crc << 8) ^
-+ crc_table[((crc >> 8) ^ mad_bit_w_len_read(&bitptr, 8)) & 0xff];
-+ case 2: crc = (crc << 8) ^
-+ crc_table[((crc >> 8) ^ mad_bit_w_len_read(&bitptr, 8)) & 0xff];
-+ case 1: crc = (crc << 8) ^
-+ crc_table[((crc >> 8) ^ mad_bit_w_len_read(&bitptr, 8)) & 0xff];
-+
-+ len %= 8;
-+
-+ case 0: break;
-+ }
-+
-+ while (len--) {
-+ register unsigned int msb;
-+
-+ msb = mad_bit_w_len_read(&bitptr, 1) ^ (crc >> 15);
-+
-+ crc <<= 1;
-+ if (msb & 1)
-+ crc ^= CRC_POLY;
-+ }
-+
-+ return crc & 0xffff;
-+}
-+
- /*
- * NAME: bit->init()
- * DESCRIPTION: initialize bit pointer struct
-diff --git a/frame.c b/frame.c
-index 03c94bf..7bf127b 100644
---- a/frame.c
-+++ b/frame.c
-@@ -113,28 +113,28 @@ static
- int decode_header(struct mad_header *header, struct mad_stream *stream)
- {
- unsigned int index;
-- struct mad_bitptr bufend_ptr;
-+ struct mad_bit_w_lenptr bufend_ptr;
-
- header->flags = 0;
- header->private_bits = 0;
-
-- mad_bit_init(&bufend_ptr, stream->bufend);
-+ mad_bit_w_len_init(&bufend_ptr, stream->next_frame, stream->bufend - stream->next_frame);
-
- /* header() */
-- if (mad_bit_length(&stream->ptr, &bufend_ptr) < 32) {
-+ if (mad_bit_w_len_length(stream->l_ptr, &bufend_ptr) < 32) {
- stream->error = MAD_ERROR_BUFLEN;
- return -1;
- }
-
- /* syncword */
-- mad_bit_skip(&stream->ptr, 11);
-+ mad_bit_w_len_skip(stream->l_ptr, 11);
-
- /* MPEG 2.5 indicator (really part of syncword) */
-- if (mad_bit_read(&stream->ptr, 1) == 0)
-+ if (mad_bit_w_len_read(stream->l_ptr, 1) == 0)
- header->flags |= MAD_FLAG_MPEG_2_5_EXT;
-
- /* ID */
-- if (mad_bit_read(&stream->ptr, 1) == 0)
-+ if (mad_bit_w_len_read(stream->l_ptr, 1) == 0)
- header->flags |= MAD_FLAG_LSF_EXT;
- else if (header->flags & MAD_FLAG_MPEG_2_5_EXT) {
- stream->error = MAD_ERROR_LOSTSYNC;
-@@ -142,7 +142,7 @@ int decode_header(struct mad_header *header, struct mad_stream *stream)
- }
-
- /* layer */
-- header->layer = 4 - mad_bit_read(&stream->ptr, 2);
-+ header->layer = 4 - mad_bit_w_len_read(stream->l_ptr, 2);
-
- if (header->layer == 4) {
- stream->error = MAD_ERROR_BADLAYER;
-@@ -150,13 +150,13 @@ int decode_header(struct mad_header *header, struct mad_stream *stream)
- }
-
- /* protection_bit */
-- if (mad_bit_read(&stream->ptr, 1) == 0) {
-+ if (mad_bit_w_len_read(stream->l_ptr, 1) == 0) {
- header->flags |= MAD_FLAG_PROTECTION;
- header->crc_check = mad_bit_crc(stream->ptr, 16, 0xffff);
- }
-
- /* bitrate_index */
-- index = mad_bit_read(&stream->ptr, 4);
-+ index = mad_bit_w_len_read(stream->l_ptr, 4);
-
- if (index == 15) {
- stream->error = MAD_ERROR_BADBITRATE;
-@@ -169,7 +169,7 @@ int decode_header(struct mad_header *header, struct mad_stream *stream)
- header->bitrate = bitrate_table[header->layer - 1][index];
-
- /* sampling_frequency */
-- index = mad_bit_read(&stream->ptr, 2);
-+ index = mad_bit_w_len_read(stream->l_ptr, 2);
-
- if (index == 3) {
- stream->error = MAD_ERROR_BADSAMPLERATE;
-@@ -186,29 +186,29 @@ int decode_header(struct mad_header *header, struct mad_stream *stream)
- }
-
- /* padding_bit */
-- if (mad_bit_read(&stream->ptr, 1))
-+ if (mad_bit_w_len_read(stream->l_ptr, 1))
- header->flags |= MAD_FLAG_PADDING;
-
- /* private_bit */
-- if (mad_bit_read(&stream->ptr, 1))
-+ if (mad_bit_w_len_read(stream->l_ptr, 1))
- header->private_bits |= MAD_PRIVATE_HEADER;
-
- /* mode */
-- header->mode = 3 - mad_bit_read(&stream->ptr, 2);
-+ header->mode = 3 - mad_bit_w_len_read(stream->l_ptr, 2);
-
- /* mode_extension */
-- header->mode_extension = mad_bit_read(&stream->ptr, 2);
-+ header->mode_extension = mad_bit_w_len_read(stream->l_ptr, 2);
-
- /* copyright */
-- if (mad_bit_read(&stream->ptr, 1))
-+ if (mad_bit_w_len_read(stream->l_ptr, 1))
- header->flags |= MAD_FLAG_COPYRIGHT;
-
- /* original/copy */
-- if (mad_bit_read(&stream->ptr, 1))
-+ if (mad_bit_w_len_read(stream->l_ptr, 1))
- header->flags |= MAD_FLAG_ORIGINAL;
-
- /* emphasis */
-- header->emphasis = mad_bit_read(&stream->ptr, 2);
-+ header->emphasis = mad_bit_w_len_read(stream->l_ptr, 2);
-
- # if defined(OPT_STRICT)
- /*
-@@ -226,11 +226,11 @@ int decode_header(struct mad_header *header, struct mad_stream *stream)
-
- /* crc_check */
- if (header->flags & MAD_FLAG_PROTECTION) {
-- if (mad_bit_length(&stream->ptr, &bufend_ptr) < 16) {
-+ if (mad_bit_w_len_length(stream->l_ptr, &bufend_ptr) < 16) {
- stream->error = MAD_ERROR_BUFLEN;
- return -1;
- }
-- header->crc_target = mad_bit_read(&stream->ptr, 16);
-+ header->crc_target = mad_bit_w_len_read(stream->l_ptr, 16);
- }
-
- return 0;
-@@ -243,12 +243,12 @@ int decode_header(struct mad_header *header, struct mad_stream *stream)
- static
- int free_bitrate(struct mad_stream *stream, struct mad_header const *header)
- {
-- struct mad_bitptr keep_ptr;
-+ struct mad_bit_w_lenptr keep_ptr;
- unsigned long rate = 0;
- unsigned int pad_slot, slots_per_frame;
- unsigned char const *ptr = 0;
-
-- keep_ptr = stream->ptr;
-+ keep_ptr = *stream->l_ptr;
-
- pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
- slots_per_frame = (header->layer == MAD_LAYER_III &&
-@@ -266,7 +266,7 @@ int free_bitrate(struct mad_stream *stream, struct mad_header const *header)
- peek_header.samplerate == header->samplerate) {
- unsigned int N;
-
-- ptr = mad_bit_nextbyte(&stream->ptr);
-+ ptr = mad_bit_w_len_nextbyte(stream->l_ptr);
-
- N = ptr - stream->this_frame;
-
-@@ -283,10 +283,10 @@ int free_bitrate(struct mad_stream *stream, struct mad_header const *header)
- break;
- }
-
-- mad_bit_skip(&stream->ptr, 8);
-+ mad_bit_w_len_skip(stream->l_ptr, 8);
- }
-
-- stream->ptr = keep_ptr;
-+ *stream->l_ptr = keep_ptr;
-
- if (rate < 8 || (header->layer == MAD_LAYER_III && rate > 640)) {
- stream->error = MAD_ERROR_LOSTSYNC;
-@@ -353,7 +353,7 @@ int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
- }
- }
- else {
-- mad_bit_init(&stream->ptr, ptr);
-+ mad_bit_w_len_init(stream->l_ptr, ptr, stream->bufend - ptr);
-
- if (mad_stream_sync(stream) == -1) {
- if (end - stream->next_frame >= MAD_BUFFER_GUARD)
-@@ -363,7 +363,7 @@ int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
- goto fail;
- }
-
-- ptr = mad_bit_nextbyte(&stream->ptr);
-+ ptr = mad_bit_w_len_nextbyte(stream->l_ptr);
- }
-
- stream->error = MAD_ERROR_NONE;
-@@ -372,7 +372,7 @@ int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
- stream->this_frame = ptr;
- stream->next_frame = ptr + 1; /* possibly bogus sync word */
-
-- mad_bit_init(&stream->ptr, stream->this_frame);
-+ mad_bit_w_len_init(stream->l_ptr, stream->this_frame, stream->bufend - stream->this_frame);
-
- if (decode_header(header, stream) == -1)
- goto fail;
-@@ -467,14 +467,16 @@ int mad_frame_decode(struct mad_frame *frame, struct mad_stream *stream)
- /* ancillary_data() */
-
- if (frame->header.layer != MAD_LAYER_III) {
-- struct mad_bitptr next_frame;
-+ struct mad_bit_w_lenptr next_frame;
-
-- mad_bit_init(&next_frame, stream->next_frame);
-+ mad_bit_w_len_init(&next_frame, stream->next_frame, stream->bufend - stream->next_frame);
-
-- stream->anc_ptr = stream->ptr;
-- stream->anc_bitlen = mad_bit_length(&stream->ptr, &next_frame);
-+ if (stream->l_ptr != stream->l_anc_ptr)
-+ free(stream->l_anc_ptr);
-+ stream->l_anc_ptr = stream->l_ptr;
-+ stream->anc_bitlen = mad_bit_w_len_length(stream->l_ptr, &next_frame);
-
-- mad_bit_finish(&next_frame);
-+ mad_bit_w_len_finish(&next_frame);
- }
-
- return 0;
-diff --git a/layer12.c b/layer12.c
-index a334a27..99c4f71 100644
---- a/layer12.c
-+++ b/layer12.c
-@@ -65,19 +65,19 @@ mad_fixed_t const linear_table[14] = {
- * DESCRIPTION: decode one requantized Layer I sample from a bitstream
- */
- static
--mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb, struct mad_stream *stream)
-+mad_fixed_t I_sample(struct mad_bit_w_lenptr *ptr, unsigned int nb, struct mad_stream *stream)
- {
- mad_fixed_t sample;
-- struct mad_bitptr frameend_ptr;
-+ struct mad_bit_w_lenptr frameend_ptr;
-
-- mad_bit_init(&frameend_ptr, stream->next_frame);
-+ mad_bit_w_len_init(&frameend_ptr, stream->next_frame, stream->bufend - stream->next_frame);
-
-- if (mad_bit_length(ptr, &frameend_ptr) < nb) {
-+ if (mad_bit_w_len_length(ptr, &frameend_ptr) < nb) {
- stream->error = MAD_ERROR_LOSTSYNC;
- stream->sync = 0;
- return 0;
- }
-- sample = mad_bit_read(ptr, nb);
-+ sample = mad_bit_w_len_read(ptr, nb);
-
- /* invert most significant bit, extend sign, then scale to fixed format */
-
-@@ -210,7 +210,7 @@ int mad_layer_I(struct mad_stream *stream, struct mad_frame *frame)
- for (ch = 0; ch < nch; ++ch) {
- nb = allocation[ch][sb];
- frame->sbsample[ch][s][sb] = nb ?
-- mad_f_mul(I_sample(&stream->ptr, nb, stream),
-+ mad_f_mul(I_sample(stream->l_ptr, nb, stream),
- sf_table[scalefactor[ch][sb]]) : 0;
- if (stream->error != 0)
- return -1;
-@@ -226,7 +226,7 @@ int mad_layer_I(struct mad_stream *stream, struct mad_frame *frame)
- stream->sync = 0;
- return -1;
- }
-- sample = I_sample(&stream->ptr, nb, stream);
-+ sample = I_sample(stream->l_ptr, nb, stream);
- if (stream->error != 0)
- return -1;
-
-@@ -312,25 +312,25 @@ struct quantclass {
- * DESCRIPTION: decode three requantized Layer II samples from a bitstream
- */
- static
--void II_samples(struct mad_bitptr *ptr,
-+void II_samples(struct mad_bit_w_lenptr *ptr,
- struct quantclass const *quantclass,
- mad_fixed_t output[3], struct mad_stream *stream)
- {
- unsigned int nb, s, sample[3];
-- struct mad_bitptr frameend_ptr;
-+ struct mad_bit_w_lenptr frameend_ptr;
-
-- mad_bit_init(&frameend_ptr, stream->next_frame);
-+ mad_bit_w_len_init(&frameend_ptr, stream->next_frame, stream->bufend - stream->next_frame);
-
- if ((nb = quantclass->group)) {
- unsigned int c, nlevels;
-
-- if (mad_bit_length(ptr, &frameend_ptr) < quantclass->bits) {
-+ if (mad_bit_w_len_length(ptr, &frameend_ptr) < quantclass->bits) {
- stream->error = MAD_ERROR_LOSTSYNC;
- stream->sync = 0;
- return;
- }
- /* degrouping */
-- c = mad_bit_read(ptr, quantclass->bits);
-+ c = mad_bit_w_len_read(ptr, quantclass->bits);
- nlevels = quantclass->nlevels;
-
- for (s = 0; s < 3; ++s) {
-@@ -342,12 +342,12 @@ void II_samples(struct mad_bitptr *ptr,
- nb = quantclass->bits;
-
- for (s = 0; s < 3; ++s) {
-- if (mad_bit_length(ptr, &frameend_ptr) < nb) {
-+ if (mad_bit_w_len_length(ptr, &frameend_ptr) < nb) {
- stream->error = MAD_ERROR_LOSTSYNC;
- stream->sync = 0;
- return;
- }
-- sample[s] = mad_bit_read(ptr, nb);
-+ sample[s] = mad_bit_w_len_read(ptr, nb);
- }
- }
-
-@@ -379,14 +379,14 @@ void II_samples(struct mad_bitptr *ptr,
- int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
- {
- struct mad_header *header = &frame->header;
-- struct mad_bitptr start;
-+ struct mad_bit_w_lenptr start;
- unsigned int index, sblimit, nbal, nch, bound, gr, ch, s, sb;
- unsigned char const *offsets;
- unsigned char allocation[2][32], scfsi[2][32], scalefactor[2][32][3];
- mad_fixed_t samples[3];
-- struct mad_bitptr frameend_ptr;
-+ struct mad_bit_w_lenptr frameend_ptr;
-
-- mad_bit_init(&frameend_ptr, stream->next_frame);
-+ mad_bit_w_len_init(&frameend_ptr, stream->next_frame, stream->bufend - stream->next_frame);
-
- nch = MAD_NCHANNELS(header);
-
-@@ -446,7 +446,7 @@ int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
- if (bound > sblimit)
- bound = sblimit;
-
-- start = stream->ptr;
-+ start = *stream->l_ptr;
-
- /* decode bit allocations */
-
-@@ -454,25 +454,25 @@ int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
- nbal = bitalloc_table[offsets[sb]].nbal;
-
- for (ch = 0; ch < nch; ++ch) {
-- if (mad_bit_length(&stream->ptr, &frameend_ptr) < nbal) {
-+ if (mad_bit_w_len_length(stream->l_ptr, &frameend_ptr) < nbal) {
- stream->error = MAD_ERROR_LOSTSYNC;
- stream->sync = 0;
- return -1;
- }
-- allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
-+ allocation[ch][sb] = mad_bit_w_len_read(stream->l_ptr, nbal);
- }
- }
-
- for (sb = bound; sb < sblimit; ++sb) {
- nbal = bitalloc_table[offsets[sb]].nbal;
-
-- if (mad_bit_length(&stream->ptr, &frameend_ptr) < nbal) {
-+ if (mad_bit_w_len_length(stream->l_ptr, &frameend_ptr) < nbal) {
- stream->error = MAD_ERROR_LOSTSYNC;
- stream->sync = 0;
- return -1;
- }
- allocation[0][sb] =
-- allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
-+ allocation[1][sb] = mad_bit_w_len_read(stream->l_ptr, nbal);
- }
-
- /* decode scalefactor selection info */
-@@ -480,12 +480,12 @@ int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
- for (sb = 0; sb < sblimit; ++sb) {
- for (ch = 0; ch < nch; ++ch) {
- if (allocation[ch][sb]) {
-- if (mad_bit_length(&stream->ptr, &frameend_ptr) < 2) {
-+ if (mad_bit_w_len_length(stream->l_ptr, &frameend_ptr) < 2) {
- stream->error = MAD_ERROR_LOSTSYNC;
- stream->sync = 0;
- return -1;
- }
-- scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
-+ scfsi[ch][sb] = mad_bit_w_len_read(stream->l_ptr, 2);
- }
- }
- }
-@@ -494,7 +494,7 @@ int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
-
- if (header->flags & MAD_FLAG_PROTECTION) {
- header->crc_check =
-- mad_bit_crc(start, mad_bit_length(&start, &stream->ptr),
-+ mad_bit_w_len_crc(start, mad_bit_w_len_length(&start, stream->l_ptr),
- header->crc_check);
-
- if (header->crc_check != header->crc_target &&
-@@ -509,12 +509,12 @@ int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
- for (sb = 0; sb < sblimit; ++sb) {
- for (ch = 0; ch < nch; ++ch) {
- if (allocation[ch][sb]) {
-- if (mad_bit_length(&stream->ptr, &frameend_ptr) < 6) {
-+ if (mad_bit_w_len_length(stream->l_ptr, &frameend_ptr) < 6) {
- stream->error = MAD_ERROR_LOSTSYNC;
- stream->sync = 0;
- return -1;
- }
-- scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
-+ scalefactor[ch][sb][0] = mad_bit_w_len_read(stream->l_ptr, 6);
-
- switch (scfsi[ch][sb]) {
- case 2:
-@@ -524,22 +524,22 @@ int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
- break;
-
- case 0:
-- if (mad_bit_length(&stream->ptr, &frameend_ptr) < 6) {
-+ if (mad_bit_w_len_length(stream->l_ptr, &frameend_ptr) < 6) {
- stream->error = MAD_ERROR_LOSTSYNC;
- stream->sync = 0;
- return -1;
- }
-- scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
-+ scalefactor[ch][sb][1] = mad_bit_w_len_read(stream->l_ptr, 6);
- /* fall through */
-
- case 1:
- case 3:
-- if (mad_bit_length(&stream->ptr, &frameend_ptr) < 6) {
-+ if (mad_bit_w_len_length(stream->l_ptr, &frameend_ptr) < 6) {
- stream->error = MAD_ERROR_LOSTSYNC;
- stream->sync = 0;
- return -1;
- }
-- scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
-+ scalefactor[ch][sb][2] = mad_bit_w_len_read(stream->l_ptr, 6);
- }
-
- if (scfsi[ch][sb] & 1)
-@@ -570,7 +570,7 @@ int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
- if ((index = allocation[ch][sb])) {
- index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
-
-- II_samples(&stream->ptr, &qc_table[index], samples, stream);
-+ II_samples(stream->l_ptr, &qc_table[index], samples, stream);
- if (stream->error != 0)
- return -1;
-
-@@ -590,7 +590,7 @@ int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
- if ((index = allocation[0][sb])) {
- index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
-
-- II_samples(&stream->ptr, &qc_table[index], samples, stream);
-+ II_samples(stream->l_ptr, &qc_table[index], samples, stream);
- if (stream->error != 0)
- return -1;
-
-diff --git a/layer3.c b/layer3.c
-index 7f18fd7..85d4e23 100644
---- a/layer3.c
-+++ b/layer3.c
-@@ -498,7 +498,7 @@ mad_fixed_t const is_lsf_table[2][15] = {
- * DESCRIPTION: decode frame side information from a bitstream
- */
- static
--enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
-+enum mad_error III_sideinfo(struct mad_bit_w_lenptr *ptr, unsigned int nch,
- int lsf, struct sideinfo *si,
- unsigned int *data_bitlen,
- unsigned int *priv_bitlen)
-@@ -509,15 +509,15 @@ enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
- *data_bitlen = 0;
- *priv_bitlen = lsf ? ((nch == 1) ? 1 : 2) : ((nch == 1) ? 5 : 3);
-
-- si->main_data_begin = mad_bit_read(ptr, lsf ? 8 : 9);
-- si->private_bits = mad_bit_read(ptr, *priv_bitlen);
-+ si->main_data_begin = mad_bit_w_len_read(ptr, lsf ? 8 : 9);
-+ si->private_bits = mad_bit_w_len_read(ptr, *priv_bitlen);
-
- ngr = 1;
- if (!lsf) {
- ngr = 2;
-
- for (ch = 0; ch < nch; ++ch)
-- si->scfsi[ch] = mad_bit_read(ptr, 4);
-+ si->scfsi[ch] = mad_bit_w_len_read(ptr, 4);
- }
-
- for (gr = 0; gr < ngr; ++gr) {
-@@ -526,10 +526,10 @@ enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
- for (ch = 0; ch < nch; ++ch) {
- struct channel *channel = &granule->ch[ch];
-
-- channel->part2_3_length = mad_bit_read(ptr, 12);
-- channel->big_values = mad_bit_read(ptr, 9);
-- channel->global_gain = mad_bit_read(ptr, 8);
-- channel->scalefac_compress = mad_bit_read(ptr, lsf ? 9 : 4);
-+ channel->part2_3_length = mad_bit_w_len_read(ptr, 12);
-+ channel->big_values = mad_bit_w_len_read(ptr, 9);
-+ channel->global_gain = mad_bit_w_len_read(ptr, 8);
-+ channel->scalefac_compress = mad_bit_w_len_read(ptr, lsf ? 9 : 4);
-
- *data_bitlen += channel->part2_3_length;
-
-@@ -539,8 +539,8 @@ enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
- channel->flags = 0;
-
- /* window_switching_flag */
-- if (mad_bit_read(ptr, 1)) {
-- channel->block_type = mad_bit_read(ptr, 2);
-+ if (mad_bit_w_len_read(ptr, 1)) {
-+ channel->block_type = mad_bit_w_len_read(ptr, 2);
-
- if (channel->block_type == 0 && result == 0)
- result = MAD_ERROR_BADBLOCKTYPE;
-@@ -551,33 +551,33 @@ enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
- channel->region0_count = 7;
- channel->region1_count = 36;
-
-- if (mad_bit_read(ptr, 1))
-+ if (mad_bit_w_len_read(ptr, 1))
- channel->flags |= mixed_block_flag;
- else if (channel->block_type == 2)
- channel->region0_count = 8;
-
- for (i = 0; i < 2; ++i)
-- channel->table_select[i] = mad_bit_read(ptr, 5);
-+ channel->table_select[i] = mad_bit_w_len_read(ptr, 5);
-
- # if defined(DEBUG)
- channel->table_select[2] = 4; /* not used */
- # endif
-
- for (i = 0; i < 3; ++i)
-- channel->subblock_gain[i] = mad_bit_read(ptr, 3);
-+ channel->subblock_gain[i] = mad_bit_w_len_read(ptr, 3);
- }
- else {
- channel->block_type = 0;
-
- for (i = 0; i < 3; ++i)
-- channel->table_select[i] = mad_bit_read(ptr, 5);
-+ channel->table_select[i] = mad_bit_w_len_read(ptr, 5);
-
-- channel->region0_count = mad_bit_read(ptr, 4);
-- channel->region1_count = mad_bit_read(ptr, 3);
-+ channel->region0_count = mad_bit_w_len_read(ptr, 4);
-+ channel->region1_count = mad_bit_w_len_read(ptr, 3);
- }
-
- /* [preflag,] scalefac_scale, count1table_select */
-- channel->flags |= mad_bit_read(ptr, lsf ? 2 : 3);
-+ channel->flags |= mad_bit_w_len_read(ptr, lsf ? 2 : 3);
- }
- }
-
-@@ -589,12 +589,12 @@ enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
- * DESCRIPTION: decode channel scalefactors for LSF from a bitstream
- */
- static
--unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
-+unsigned int III_scalefactors_lsf(struct mad_bit_w_lenptr *ptr,
- struct channel *channel,
- struct channel *gr1ch, int mode_extension,
- unsigned int bits_left, unsigned int *part2_length)
- {
-- struct mad_bitptr start;
-+ struct mad_bit_w_lenptr start;
- unsigned int scalefac_compress, index, slen[4], part, n, i;
- unsigned char const *nsfb;
-
-@@ -641,7 +641,7 @@ unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
- for (i = 0; i < nsfb[part]; ++i) {
- if (bits_left < slen[part])
- return MAD_ERROR_BADSCFSI;
-- channel->scalefac[n++] = mad_bit_read(ptr, slen[part]);
-+ channel->scalefac[n++] = mad_bit_w_len_read(ptr, slen[part]);
- bits_left -= slen[part];
- }
- }
-@@ -690,7 +690,7 @@ unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
- for (i = 0; i < nsfb[part]; ++i) {
- if (bits_left < slen[part])
- return MAD_ERROR_BADSCFSI;
-- is_pos = mad_bit_read(ptr, slen[part]);
-+ is_pos = mad_bit_w_len_read(ptr, slen[part]);
- bits_left -= slen[part];
-
- channel->scalefac[n] = is_pos;
-@@ -704,7 +704,7 @@ unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
- }
- }
-
-- *part2_length = mad_bit_length(&start, ptr);
-+ *part2_length = mad_bit_w_len_length(&start, ptr);
- return MAD_ERROR_NONE;
- }
-
-@@ -713,11 +713,11 @@ unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
- * DESCRIPTION: decode channel scalefactors of one granule from a bitstream
- */
- static
--unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
-+unsigned int III_scalefactors(struct mad_bit_w_lenptr *ptr, struct channel *channel,
- struct channel const *gr0ch, unsigned int scfsi,
- unsigned int bits_left, unsigned int *part2_length)
- {
-- struct mad_bitptr start;
-+ struct mad_bit_w_lenptr start;
- unsigned int slen1, slen2, sfbi;
-
- start = *ptr;
-@@ -734,7 +734,7 @@ unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
- while (nsfb--) {
- if (bits_left < slen1)
- return MAD_ERROR_BADSCFSI;
-- channel->scalefac[sfbi++] = mad_bit_read(ptr, slen1);
-+ channel->scalefac[sfbi++] = mad_bit_w_len_read(ptr, slen1);
- bits_left -= slen1;
- }
-
-@@ -742,7 +742,7 @@ unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
- while (nsfb--) {
- if (bits_left < slen2)
- return MAD_ERROR_BADSCFSI;
-- channel->scalefac[sfbi++] = mad_bit_read(ptr, slen2);
-+ channel->scalefac[sfbi++] = mad_bit_w_len_read(ptr, slen2);
- bits_left -= slen2;
- }
-
-@@ -759,7 +759,7 @@ unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
- for (sfbi = 0; sfbi < 6; ++sfbi) {
- if (bits_left < slen1)
- return MAD_ERROR_BADSCFSI;
-- channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
-+ channel->scalefac[sfbi] = mad_bit_w_len_read(ptr, slen1);
- bits_left -= slen1;
- }
- }
-@@ -772,7 +772,7 @@ unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
- for (sfbi = 6; sfbi < 11; ++sfbi) {
- if (bits_left < slen1)
- return MAD_ERROR_BADSCFSI;
-- channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
-+ channel->scalefac[sfbi] = mad_bit_w_len_read(ptr, slen1);
- bits_left -= slen1;
- }
- }
-@@ -785,7 +785,7 @@ unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
- for (sfbi = 11; sfbi < 16; ++sfbi) {
- if (bits_left < slen2)
- return MAD_ERROR_BADSCFSI;
-- channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
-+ channel->scalefac[sfbi] = mad_bit_w_len_read(ptr, slen2);
- bits_left -= slen2;
- }
- }
-@@ -798,7 +798,7 @@ unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
- for (sfbi = 16; sfbi < 21; ++sfbi) {
- if (bits_left < slen2)
- return MAD_ERROR_BADSCFSI;
-- channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
-+ channel->scalefac[sfbi] = mad_bit_w_len_read(ptr, slen2);
- bits_left -= slen2;
- }
- }
-@@ -806,7 +806,7 @@ unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
- channel->scalefac[21] = 0;
- }
-
-- *part2_length = mad_bit_length(&start, ptr);
-+ *part2_length = mad_bit_w_len_length(&start, ptr);
- return MAD_ERROR_NONE;
- }
-
-@@ -958,14 +958,14 @@ mad_fixed_t III_requantize(unsigned int value, signed int exp)
- * DESCRIPTION: decode Huffman code words of one channel of one granule
- */
- static
--enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
-+enum mad_error III_huffdecode(struct mad_bit_w_lenptr *ptr, mad_fixed_t xr[576],
- struct channel *channel,
- unsigned char const *sfbwidth,
- signed int part3_length)
- {
- signed int exponents[39], exp;
- signed int const *expptr;
-- struct mad_bitptr peek;
-+ struct mad_bit_w_lenptr peek;
- signed int bits_left, cachesz, fakebits;
- register mad_fixed_t *xrptr;
- mad_fixed_t const *sfbound;
-@@ -976,16 +976,16 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
- III_exponents(channel, sfbwidth, exponents);
-
- peek = *ptr;
-- mad_bit_skip(ptr, bits_left);
-+ mad_bit_w_len_skip(ptr, bits_left);
-
- /* align bit reads to byte boundaries */
-- cachesz = mad_bit_bitsleft(&peek);
-+ cachesz = mad_bit_w_len_bitsleft(&peek);
- cachesz += ((32 - 1 - 24) + (24 - cachesz)) & ~7;
-
- if (bits_left < cachesz) {
- cachesz = bits_left;
- }
-- bitcache = mad_bit_read(&peek, cachesz);
-+ bitcache = mad_bit_w_len_read(&peek, cachesz);
- bits_left -= cachesz;
- fakebits = 0;
-
-@@ -1056,7 +1056,7 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
- if (bits_left < bits) {
- bits = bits_left;
- }
-- bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
-+ bitcache = (bitcache << bits) | mad_bit_w_len_read(&peek, bits);
- cachesz += bits;
- bits_left -= bits;
- }
-@@ -1098,7 +1098,7 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
- unsigned int bits = 16;
- if (bits_left < 16)
- bits = bits_left;
-- bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
-+ bitcache = (bitcache << bits) | mad_bit_w_len_read(&peek, bits);
- cachesz += bits;
- bits_left -= bits;
- }
-@@ -1140,7 +1140,7 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
- unsigned int bits = 16;
- if (bits_left < 16)
- bits = bits_left;
-- bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
-+ bitcache = (bitcache << bits) | mad_bit_w_len_read(&peek, bits);
- cachesz += bits;
- bits_left -= bits;
- }
-@@ -1232,7 +1232,7 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
- unsigned int bits = 16;
- if (bits_left < 16)
- bits = bits_left;
-- bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
-+ bitcache = (bitcache << bits) | mad_bit_w_len_read(&peek, bits);
- cachesz += bits;
- bits_left -= bits;
- }
-@@ -2403,7 +2403,7 @@ void III_freqinver(mad_fixed_t sample[18][32], unsigned int sb)
- * DESCRIPTION: decode frame main_data
- */
- static
--enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
-+enum mad_error III_decode(struct mad_bit_w_lenptr *ptr, struct mad_frame *frame,
- struct sideinfo *si, unsigned int nch, unsigned int md_len)
- {
- struct mad_header *header = &frame->header;
-@@ -2589,12 +2589,12 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
- unsigned int nch, priv_bitlen, next_md_begin = 0;
- unsigned int si_len, data_bitlen, md_len;
- unsigned int frame_space, frame_used, frame_free;
-- struct mad_bitptr ptr, bufend_ptr;
-+ struct mad_bit_w_lenptr ptr, bufend_ptr;
- struct sideinfo si;
- enum mad_error error;
- int result = 0;
-
-- mad_bit_init(&bufend_ptr, stream->bufend);
-+ mad_bit_w_len_init(&bufend_ptr, stream->this_frame, stream->bufend - stream->this_frame);
-
- /* allocate Layer III dynamic structures */
-
-@@ -2620,7 +2620,7 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
-
- /* check frame sanity */
-
-- if (stream->next_frame - mad_bit_nextbyte(&stream->ptr) <
-+ if (stream->next_frame - mad_bit_w_len_nextbyte(stream->l_ptr) <
- (signed int) si_len) {
- stream->error = MAD_ERROR_BADFRAMELEN;
- stream->md_len = 0;
-@@ -2631,7 +2631,7 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
-
- if (header->flags & MAD_FLAG_PROTECTION) {
- header->crc_check =
-- mad_bit_crc(stream->ptr, si_len * CHAR_BIT, header->crc_check);
-+ mad_bit_w_len_crc(*stream->l_ptr, si_len * CHAR_BIT, header->crc_check);
-
- if (header->crc_check != header->crc_target &&
- !(frame->options & MAD_OPTION_IGNORECRC)) {
-@@ -2642,7 +2642,7 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
-
- /* decode frame side information */
-
-- error = III_sideinfo(&stream->ptr, nch, header->flags & MAD_FLAG_LSF_EXT,
-+ error = III_sideinfo(stream->l_ptr, nch, header->flags & MAD_FLAG_LSF_EXT,
- &si, &data_bitlen, &priv_bitlen);
- if (error && result == 0) {
- stream->error = error;
-@@ -2655,27 +2655,27 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
- /* find main_data of next frame */
-
- {
-- struct mad_bitptr peek;
-+ struct mad_bit_w_lenptr peek;
- unsigned long header;
-
-- mad_bit_init(&peek, stream->next_frame);
-- if (mad_bit_length(&peek, &bufend_ptr) >= 57) {
-- header = mad_bit_read(&peek, 32);
-+ mad_bit_w_len_init(&peek, stream->next_frame, stream->bufend - stream->next_frame);
-+ if (mad_bit_w_len_length(&peek, &bufend_ptr) >= 57) {
-+ header = mad_bit_w_len_read(&peek, 32);
- if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
- if (!(header & 0x00010000L)) /* protection_bit */
-- mad_bit_skip(&peek, 16); /* crc_check */
-+ mad_bit_w_len_skip(&peek, 16); /* crc_check */
-
- next_md_begin =
-- mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
-+ mad_bit_w_len_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
- }
- }
-
-- mad_bit_finish(&peek);
-+ mad_bit_w_len_finish(&peek);
- }
-
- /* find main_data of this frame */
-
-- frame_space = stream->next_frame - mad_bit_nextbyte(&stream->ptr);
-+ frame_space = stream->next_frame - mad_bit_w_len_nextbyte(stream->l_ptr);
-
- if (next_md_begin > si.main_data_begin + frame_space)
- next_md_begin = 0;
-@@ -2690,7 +2690,7 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
- frame_used = 0;
-
- if (si.main_data_begin == 0) {
-- ptr = stream->ptr;
-+ ptr = *stream->l_ptr;
- stream->md_len = 0;
-
- frame_used = md_len;
-@@ -2707,14 +2707,15 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
- *stream->main_data + stream->md_len - si.main_data_begin,
- si.main_data_begin);
- stream->md_len = si.main_data_begin;
-- mad_bit_init(&ptr, *stream->main_data);
-+ unsigned char * start = *stream->main_data + stream->md_len - si.main_data_begin;
-+ mad_bit_w_len_init(&ptr, start, stream->bufend - start);
-
- if (md_len > si.main_data_begin) {
- assert(stream->md_len + md_len -
- si.main_data_begin <= MAD_BUFFER_MDLEN);
-
- memcpy(*stream->main_data + stream->md_len,
-- mad_bit_nextbyte(&stream->ptr),
-+ mad_bit_w_len_nextbyte(stream->l_ptr),
- frame_used = md_len - si.main_data_begin);
- stream->md_len += frame_used;
- }
-@@ -2734,7 +2735,9 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
-
- /* designate ancillary bits */
-
-- stream->anc_ptr = ptr;
-+ if (stream->l_ptr != stream->l_anc_ptr)
-+ free(stream->l_anc_ptr);
-+ stream->l_anc_ptr = stream->l_ptr;
- stream->anc_bitlen = md_len * CHAR_BIT - data_bitlen;
- }
-
-diff --git a/mad.h.in b/mad.h.in
-index 0e790d3..32333cf 100644
---- a/mad.h.in
-+++ b/mad.h.in
-@@ -540,6 +540,29 @@ mad_fixed_t mad_f_div(mad_fixed_t, mad_fixed_t);
- # ifndef LIBMAD_BIT_H
- # define LIBMAD_BIT_H
-
-+struct mad_bit_w_lenptr {
-+ unsigned char const *byte;
-+ unsigned short cache;
-+ unsigned short left;
-+ unsigned int length;
-+};
-+
-+void mad_bit_w_len_init(struct mad_bit_w_lenptr *, unsigned char const *, unsigned int length);
-+
-+# define mad_bit_w_len_finish(bitptr) /* nothing */
-+
-+unsigned int mad_bit_w_len_length(struct mad_bit_w_lenptr const *,
-+ struct mad_bit_w_lenptr const *);
-+
-+# define mad_bit_w_len_bitsleft(bitptr) ((bitptr)->left)
-+unsigned char const *mad_bit_w_len_nextbyte(struct mad_bit_w_lenptr const *);
-+
-+void mad_bit_w_len_skip(struct mad_bit_w_lenptr *, unsigned int);
-+unsigned long mad_bit_w_len_read(struct mad_bit_w_lenptr *, unsigned int);
-+void mad_bit_w_len_write(struct mad_bit_w_lenptr *, unsigned int, unsigned long);
-+
-+unsigned short mad_bit_w_len_crc(struct mad_bit_w_lenptr, unsigned int, unsigned short);
-+
- struct mad_bitptr {
- unsigned char const *byte;
- unsigned short cache;
-@@ -696,9 +719,17 @@ struct mad_stream {
-
- unsigned char const *this_frame; /* start of current frame */
- unsigned char const *next_frame; /* start of next frame */
-+ union
-+ {
- struct mad_bitptr ptr; /* current processing bit pointer */
-+ struct mad_bit_w_lenptr * l_ptr;
-+ };
-
-+ union
-+ {
- struct mad_bitptr anc_ptr; /* ancillary bits pointer */
-+ struct mad_bit_w_lenptr * l_anc_ptr; /* ancillary bits pointer */
-+ };
- unsigned int anc_bitlen; /* number of ancillary bits */
-
- unsigned char (*main_data)[MAD_BUFFER_MDLEN];
-diff --git a/stream.c b/stream.c
-index 18ce95a..f3b6f1a 100644
---- a/stream.c
-+++ b/stream.c
-@@ -40,9 +40,11 @@ void mad_stream_init(struct mad_stream *stream)
-
- stream->this_frame = 0;
- stream->next_frame = 0;
-- mad_bit_init(&stream->ptr, 0);
-+ stream->l_ptr = malloc(sizeof(*(stream->l_ptr)));
-+ stream->l_anc_ptr = malloc(sizeof(*(stream->l_anc_ptr)));
-+ mad_bit_w_len_init(stream->l_ptr, 0, 0);
-
-- mad_bit_init(&stream->anc_ptr, 0);
-+ mad_bit_w_len_init(stream->l_anc_ptr, 0, 0);
- stream->anc_bitlen = 0;
-
- stream->main_data = 0;
-@@ -63,8 +65,15 @@ void mad_stream_finish(struct mad_stream *stream)
- stream->main_data = 0;
- }
-
-- mad_bit_finish(&stream->anc_ptr);
-- mad_bit_finish(&stream->ptr);
-+ mad_bit_w_len_finish(stream->l_anc_ptr);
-+ mad_bit_w_len_finish(stream->l_ptr);
-+ free(stream->l_ptr);
-+
-+ if (stream->l_ptr != stream->l_anc_ptr)
-+ free(stream->l_anc_ptr);
-+
-+ stream->l_anc_ptr = NULL;
-+ stream->l_ptr = NULL;
- }
-
- /*
-@@ -82,7 +91,7 @@ void mad_stream_buffer(struct mad_stream *stream,
-
- stream->sync = 1;
-
-- mad_bit_init(&stream->ptr, buffer);
-+ mad_bit_w_len_init(stream->l_ptr, buffer, length);
- }
-
- /*
-@@ -102,7 +111,7 @@ int mad_stream_sync(struct mad_stream *stream)
- {
- register unsigned char const *ptr, *end;
-
-- ptr = mad_bit_nextbyte(&stream->ptr);
-+ ptr = mad_bit_w_len_nextbyte(stream->l_ptr);
- end = stream->bufend;
-
- while (ptr < end - 1 &&
-@@ -112,7 +121,7 @@ int mad_stream_sync(struct mad_stream *stream)
- if (end - ptr < MAD_BUFFER_GUARD)
- return -1;
-
-- mad_bit_init(&stream->ptr, ptr);
-+ mad_bit_w_len_init(stream->l_ptr, ptr, stream->bufend - stream->buffer);
-
- return 0;
- }
---
-2.52.0.windows.1
-
=====================================
contrib/src/mad/rules.mak
=====================================
@@ -1,6 +1,6 @@
# mad
-MAD_VERSION := 0.16.4
+MAD_VERSION := 0.16.5
MAD_URL := https://codeberg.org/tenacityteam/libmad/archive/$(MAD_VERSION).tar.gz
ifdef GPL
@@ -10,7 +10,7 @@ ifeq ($(call need_pkg,"mad"),)
PKGS_FOUND += mad
endif
-MAD_CONF := -DEXAMPLE=OFF -DCMAKE_POLICY_VERSION_MINIMUM=3.5
+MAD_CONF := -DEXAMPLE=OFF
ifdef HAVE_WIN32
ifeq ($(ARCH),arm)
MAD_CONF += -DASO:BOOL=OFF
@@ -25,11 +25,10 @@ $(TARBALLS)/libmad-$(MAD_VERSION).tar.gz:
libmad: UNPACK_DIR=libmad
libmad: libmad-$(MAD_VERSION).tar.gz .sum-mad
$(UNPACK)
+ $(APPLY) $(SRC)/mad/0001-CMake-case-of-AND-test.patch
ifdef HAVE_IOS
$(APPLY) $(SRC)/mad/mad-ios-asm.patch
endif
- # old patch seem to solve buffer overflow a different way
- # $(APPLY) $(SRC)/mad/check-bitstream-length.patch
# get a tarball with a folder name $(MOVE)
touch $@
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/1176b56bdef7b96c9d6518b62be37ec8c32d92ed...22cfdef68347bb162d3c20d10d4b502b12290455
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/1176b56bdef7b96c9d6518b62be37ec8c32d92ed...22cfdef68347bb162d3c20d10d4b502b12290455
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help
More information about the vlc-commits
mailing list