Originally committed as revision 14747 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -110,8 +110,7 @@ uint8_t ff_mlp_calculate_parity(const uint8_t *buf, unsigned int buf_size) | |||||
| for (; buf < buf_end - 3; buf += 4) | for (; buf < buf_end - 3; buf += 4) | ||||
| scratch ^= *((const uint32_t*)buf); | scratch ^= *((const uint32_t*)buf); | ||||
| scratch ^= scratch >> 16; | |||||
| scratch ^= scratch >> 8; | |||||
| scratch = xor_32_to_8(scratch); | |||||
| for (; buf < buf_end; buf++) | for (; buf < buf_end; buf++) | ||||
| scratch ^= *buf; | scratch ^= *buf; | ||||
| @@ -107,4 +107,12 @@ int ff_mlp_init_crc2D(AVCodecParserContext *s); | |||||
| void ff_mlp_init_crc(); | void ff_mlp_init_crc(); | ||||
| /** XOR four bytes into one. */ | |||||
| static inline uint8_t xor_32_to_8(uint32_t value) | |||||
| { | |||||
| value ^= value >> 16; | |||||
| value ^= value >> 8; | |||||
| return value; | |||||
| } | |||||
| #endif /* FFMPEG_MLP_H */ | #endif /* FFMPEG_MLP_H */ | ||||
| @@ -364,10 +364,7 @@ static int read_restart_header(MLPDecodeContext *m, GetBitContext *gbp, | |||||
| lossless_check = get_bits(gbp, 8); | lossless_check = get_bits(gbp, 8); | ||||
| if (substr == m->max_decoded_substream | if (substr == m->max_decoded_substream | ||||
| && s->lossless_check_data != 0xffffffff) { | && s->lossless_check_data != 0xffffffff) { | ||||
| tmp = s->lossless_check_data; | |||||
| tmp ^= tmp >> 16; | |||||
| tmp ^= tmp >> 8; | |||||
| tmp &= 0xff; | |||||
| tmp = xor_32_to_8(s->lossless_check_data); | |||||
| if (tmp != lossless_check) | if (tmp != lossless_check) | ||||
| av_log(m->avctx, AV_LOG_WARNING, | av_log(m->avctx, AV_LOG_WARNING, | ||||
| "Lossless check failed - expected %02x, calculated %02x.\n", | "Lossless check failed - expected %02x, calculated %02x.\n", | ||||