summaryrefslogtreecommitdiff
path: root/libavcodec/mlp_parser.c
diff options
context:
space:
mode:
authorRamiro Polla <ramiro.polla@gmail.com>2008-08-13 18:47:03 +0000
committerRamiro Polla <ramiro.polla@gmail.com>2008-08-13 18:47:03 +0000
commitce15710f554ef3520f968c8b4284a0f576611c95 (patch)
treeaaaba49c251115e36e7921f2e534b170b3ff42cd /libavcodec/mlp_parser.c
parente7327dbba70a1dff3bc4c2f353adff174753edff (diff)
mlp: Split common code from parser and decoder to be used by encoder.
Originally committed as revision 14733 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/mlp_parser.c')
-rw-r--r--libavcodec/mlp_parser.c33
1 files changed, 3 insertions, 30 deletions
diff --git a/libavcodec/mlp_parser.c b/libavcodec/mlp_parser.c
index 7668857d70..4400d71fc4 100644
--- a/libavcodec/mlp_parser.c
+++ b/libavcodec/mlp_parser.c
@@ -30,6 +30,7 @@
#include "bitstream.h"
#include "parser.h"
#include "mlp_parser.h"
+#include "mlp.h"
static const uint8_t mlp_quants[16] = {
16, 20, 24, 0, 0, 0, 0, 0,
@@ -64,34 +65,6 @@ static int truehd_channels(int chanmap)
return channels;
}
-static int crc_init = 0;
-static AVCRC crc_2D[1024];
-
-/** MLP uses checksums that seem to be based on the standard CRC algorithm, but
- * are not (in implementation terms, the table lookup and XOR are reversed).
- * We can implement this behavior using a standard av_crc on all but the
- * last element, then XOR that with the last element.
- */
-
-static uint16_t mlp_checksum16(const uint8_t *buf, unsigned int buf_size)
-{
- uint16_t crc;
-
- crc = av_crc(crc_2D, 0, buf, buf_size - 2);
- crc ^= AV_RL16(buf + buf_size - 2);
- return crc;
-}
-
-static int av_cold mlp_parse_init(AVCodecParserContext *s)
-{
- if (!crc_init) {
- av_crc_init(crc_2D, 0, 16, 0x002D, sizeof(crc_2D));
- crc_init = 1;
- }
-
- return 0;
-}
-
/** Read a major sync info header - contains high level information about
* the stream - sample rate, channel arrangement etc. Most of this
* information is not actually necessary for decoding, only for playback.
@@ -110,7 +83,7 @@ int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb)
return -1;
}
- checksum = mlp_checksum16(gb->buffer, 26);
+ checksum = ff_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;
@@ -310,7 +283,7 @@ lost_sync:
AVCodecParser mlp_parser = {
{ CODEC_ID_MLP },
sizeof(MLPParseContext),
- mlp_parse_init,
+ ff_mlp_init_crc2D,
mlp_parse,
NULL,
};