[FFmpeg-soc] [soc]: r2565 - in mlp: libavcodec_mlpdec.diff mlpdec.c
ramiro
subversion at mplayerhq.hu
Tue Jun 24 15:23:33 CEST 2008
Author: ramiro
Date: Tue Jun 24 15:23:32 2008
New Revision: 2565
Log:
Pass GetBitContext* to read_major_sync().
Modified:
mlp/libavcodec_mlpdec.diff
mlp/mlpdec.c
Modified: mlp/libavcodec_mlpdec.diff
==============================================================================
--- mlp/libavcodec_mlpdec.diff (original)
+++ mlp/libavcodec_mlpdec.diff Tue Jun 24 15:23:32 2008
@@ -46,3 +46,131 @@ Index: libavcodec/allcodecs.c
REGISTER_ENCDEC (MP2, mp2);
REGISTER_DECODER (MP3, mp3);
REGISTER_DECODER (MP3ADU, mp3adu);
+Index: libavcodec/mlp_parser.c
+===================================================================
+--- libavcodec/mlp_parser.c (revision 13943)
++++ libavcodec/mlp_parser.c (working copy)
+@@ -90,72 +90,70 @@
+ * information is not actually necessary for decoding, only for playback.
+ */
+
+-int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, const uint8_t *buf,
+- unsigned int buf_size)
++int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb)
+ {
+- GetBitContext gb;
+ int ratebits;
+ uint16_t checksum;
+
+- if (buf_size < 28) {
++ assert(get_bits_count(gb) == 0);
++
++ if (gb->size_in_bits < 28 << 3) {
+ av_log(log, AV_LOG_ERROR, "Packet too short, unable to read major sync\n");
+ return -1;
+ }
+
+- checksum = mlp_checksum16(buf, 26);
+- if (checksum != AV_RL16(buf+26)) {
++ checksum = mlp_checksum16(gb->buffer, 26);
++ if (checksum != AV_RL16(gb->buffer+26)) {
+ av_log(log, AV_LOG_ERROR, "Major sync info header checksum error\n");
+ return -1;
+ }
+
+- init_get_bits(&gb, buf, buf_size * 8);
+-
+- if (get_bits_long(&gb, 24) != 0xf8726f) /* Sync words */
++ if (get_bits_long(gb, 24) != 0xf8726f) /* Sync words */
+ return -1;
+
+- mh->stream_type = get_bits(&gb, 8);
++ mh->stream_type = get_bits(gb, 8);
+
+ if (mh->stream_type == 0xbb) {
+- mh->group1_bits = mlp_quants[get_bits(&gb, 4)];
+- mh->group2_bits = mlp_quants[get_bits(&gb, 4)];
++ mh->group1_bits = mlp_quants[get_bits(gb, 4)];
++ mh->group2_bits = mlp_quants[get_bits(gb, 4)];
+
+- ratebits = get_bits(&gb, 4);
++ ratebits = get_bits(gb, 4);
+ mh->group1_samplerate = mlp_samplerate(ratebits);
+- mh->group2_samplerate = mlp_samplerate(get_bits(&gb, 4));
++ mh->group2_samplerate = mlp_samplerate(get_bits(gb, 4));
+
+- skip_bits(&gb, 11);
++ skip_bits(gb, 11);
+
+- mh->channels_mlp = get_bits(&gb, 5);
++ mh->channels_mlp = get_bits(gb, 5);
+ } else if (mh->stream_type == 0xba) {
+ mh->group1_bits = 24; // TODO: Is this information actually conveyed anywhere?
+ mh->group2_bits = 0;
+
+- ratebits = get_bits(&gb, 4);
++ ratebits = get_bits(gb, 4);
+ mh->group1_samplerate = mlp_samplerate(ratebits);
+ mh->group2_samplerate = 0;
+
+- skip_bits(&gb, 8);
++ skip_bits(gb, 8);
+
+- mh->channels_thd_stream1 = get_bits(&gb, 5);
++ mh->channels_thd_stream1 = get_bits(gb, 5);
+
+- skip_bits(&gb, 2);
++ skip_bits(gb, 2);
+
+- mh->channels_thd_stream2 = get_bits(&gb, 13);
++ mh->channels_thd_stream2 = get_bits(gb, 13);
+ } else
+ return -1;
+
+ mh->access_unit_size = 40 << (ratebits & 7);
+ mh->access_unit_size_pow2 = 64 << (ratebits & 7);
+
+- skip_bits_long(&gb, 48);
++ skip_bits_long(gb, 48);
+
+- mh->is_vbr = get_bits1(&gb);
++ mh->is_vbr = get_bits1(gb);
+
+- mh->peak_bitrate = (get_bits(&gb, 15) * mh->group1_samplerate + 8) >> 4;
++ mh->peak_bitrate = (get_bits(gb, 15) * mh->group1_samplerate + 8) >> 4;
+
+- mh->num_substreams = get_bits(&gb, 4);
++ mh->num_substreams = get_bits(gb, 4);
+
+- skip_bits_long(&gb, 4 + 11 * 8);
++ skip_bits_long(gb, 4 + 11 * 8);
+
+ return 0;
+ }
+@@ -258,9 +256,11 @@
+ goto lost_sync;
+ }
+ } else {
++ GetBitContext gb;
+ MLPHeaderInfo mh;
+
+- if (ff_mlp_read_major_sync(avctx, &mh, buf + 4, buf_size - 4) < 0)
++ init_get_bits(&gb, buf + 4, (buf_size - 4) << 3);
++ if (ff_mlp_read_major_sync(avctx, &mh, &gb) < 0)
+ goto lost_sync;
+
+ #ifdef CONFIG_AUDIO_NONSHORT
+Index: libavcodec/mlp_parser.h
+===================================================================
+--- libavcodec/mlp_parser.h (revision 13943)
++++ libavcodec/mlp_parser.h (working copy)
+@@ -53,8 +53,7 @@
+ } MLPHeaderInfo;
+
+
+-int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, const uint8_t *buf,
+- unsigned int buf_size);
++int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb);
+
+ #endif /* FFMPEG_MLP_PARSER_H */
+
Modified: mlp/mlpdec.c
==============================================================================
--- mlp/mlpdec.c (original)
+++ mlp/mlpdec.c Tue Jun 24 15:23:32 2008
@@ -321,12 +321,11 @@ static int mlp_decode_init(AVCodecContex
* information is not actually necessary for decoding, only for playback.
*/
-static int read_major_sync(MLPDecodeContext *m, const uint8_t *buf,
- unsigned int buf_size)
+static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb)
{
MLPHeaderInfo mh;
- if (ff_mlp_read_major_sync(m->avctx, &mh, buf, buf_size) != 0)
+ if (ff_mlp_read_major_sync(m->avctx, &mh, gb) != 0)
return -1;
if (mh.group1_bits == 0) {
@@ -982,14 +981,15 @@ static int read_access_unit(AVCodecConte
if (length > buf_size)
return -1;
+ buf += 4;
+ buf_size -= 4;
+
init_get_bits(&gb, buf, length * 8);
- skip_bits_long(&gb, 32);
if (show_bits_long(&gb, 31) == (0xf8726fba >> 1)) {
dprintf(m->avctx, "Found major sync\n");
- if (read_major_sync(m, buf + 4, buf_size - 4) < 0)
+ if (read_major_sync(m, &gb) < 0)
goto error;
- skip_bits_long(&gb, 28 * 8);
}
if (!m->params_valid) {
More information about the FFmpeg-soc
mailing list