matroskadec: use an EbmlBin as parameter to ebml_read_binary()

Originally committed as revision 14591 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Aurelien Jacobs 2008-08-05 00:41:59 +00:00
parent c6cd2b3d22
commit eb05caccf2
1 changed files with 7 additions and 11 deletions

View File

@ -688,14 +688,15 @@ ebml_read_master (MatroskaDemuxContext *matroska,
static int static int
ebml_read_binary (ByteIOContext *pb, ebml_read_binary (ByteIOContext *pb,
int length, int length,
uint8_t **binary, EbmlBin *bin)
int *size)
{ {
if (!(*binary = av_malloc(length))) av_free(bin->data);
if (!(bin->data = av_malloc(length)))
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
*size = length; bin->size = length;
if (get_buffer(pb, *binary, length) != length) bin->pos = url_ftell(pb);
if (get_buffer(pb, bin->data, length) != length)
return AVERROR(EIO); return AVERROR(EIO);
return 0; return 0;
@ -896,7 +897,6 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska,
ByteIOContext *pb = matroska->ctx->pb; ByteIOContext *pb = matroska->ctx->pb;
uint32_t id = syntax->id; uint32_t id = syntax->id;
uint64_t length; uint64_t length;
EbmlBin *bin;
int res; int res;
data = (char *)data + syntax->data_offset; data = (char *)data + syntax->data_offset;
@ -907,7 +907,6 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska,
memset(data, 0, syntax->list_elem_size); memset(data, 0, syntax->list_elem_size);
list->nb_elem++; list->nb_elem++;
} }
bin = data;
if (syntax->type != EBML_PASS && syntax->type != EBML_STOP) if (syntax->type != EBML_PASS && syntax->type != EBML_STOP)
if ((res = ebml_read_element_id(matroska, &id)) < 0 || if ((res = ebml_read_element_id(matroska, &id)) < 0 ||
@ -919,10 +918,7 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska,
case EBML_FLOAT: res = ebml_read_float (pb, length, data); break; case EBML_FLOAT: res = ebml_read_float (pb, length, data); break;
case EBML_STR: case EBML_STR:
case EBML_UTF8: res = ebml_read_ascii (pb, length, data); break; case EBML_UTF8: res = ebml_read_ascii (pb, length, data); break;
case EBML_BIN: av_free(bin->data); case EBML_BIN: res = ebml_read_binary(pb, length, data); break;
bin->pos = url_ftell(matroska->ctx->pb);
res = ebml_read_binary(pb, length, &bin->data,
&bin->size); break;
case EBML_NEST: if ((res=ebml_read_master(matroska, length)) < 0) case EBML_NEST: if ((res=ebml_read_master(matroska, length)) < 0)
return res; return res;
if (id == MATROSKA_ID_SEGMENT) if (id == MATROSKA_ID_SEGMENT)