mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Optimize/simplify ebml_read_num.
Originally committed as revision 25026 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
69a9c80bed
commit
ff6a5fc1f0
@ -538,8 +538,8 @@ static int ebml_level_end(MatroskaDemuxContext *matroska)
|
||||
static int ebml_read_num(MatroskaDemuxContext *matroska, ByteIOContext *pb,
|
||||
int max_size, uint64_t *number)
|
||||
{
|
||||
int len_mask = 0x80, read = 1, n = 1;
|
||||
int64_t total = 0;
|
||||
int read = 1, n = 1;
|
||||
uint64_t total = 0;
|
||||
|
||||
/* The first byte tells us the length in bytes - get_byte() can normally
|
||||
* return 0, but since that's not a valid first ebmlID byte, we can
|
||||
@ -556,10 +556,7 @@ static int ebml_read_num(MatroskaDemuxContext *matroska, ByteIOContext *pb,
|
||||
}
|
||||
|
||||
/* get the length of the EBML number */
|
||||
while (read <= max_size && !(total & len_mask)) {
|
||||
read++;
|
||||
len_mask >>= 1;
|
||||
}
|
||||
read = 8 - ff_log2_tab[total];
|
||||
if (read > max_size) {
|
||||
int64_t pos = url_ftell(pb) - 1;
|
||||
av_log(matroska->ctx, AV_LOG_ERROR,
|
||||
@ -569,7 +566,7 @@ static int ebml_read_num(MatroskaDemuxContext *matroska, ByteIOContext *pb,
|
||||
}
|
||||
|
||||
/* read out length */
|
||||
total &= ~len_mask;
|
||||
total ^= 1 << ff_log2_tab[total];
|
||||
while (n++ < read)
|
||||
total = (total << 8) | get_byte(pb);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user