
Author: ods15 Date: Mon Nov 6 21:17:50 2006 New Revision: 191 Modified: trunk/libnut/demuxer.c Log: make get_vb() work by mallocing only once and also work if buffer is static. change header init to just memset all fields to zero as now *_len will have to be zero Modified: trunk/libnut/demuxer.c ============================================================================== --- trunk/libnut/demuxer.c (original) +++ trunk/libnut/demuxer.c Mon Nov 6 21:17:50 2006 @@ -205,9 +205,11 @@ uint64_t tmp; int err; if ((err = get_v(in, &tmp))) return err; + if (!*len) { + *buf = alloc->malloc(tmp); + if (!*buf) return -ERR_OUT_OF_MEM; + } else if (*len < tmp) return -ERR_OUT_OF_MEM; *len = tmp; - *buf = alloc->realloc(*buf, *len); - if (!*buf) return -ERR_OUT_OF_MEM; if (get_data(in, *len, *buf) != *len) return buf_eof(in); return 0; } @@ -746,16 +748,7 @@ ERROR(SIZE_MAX/sizeof(stream_context_t) < nut->stream_count+1, -ERR_OUT_OF_MEM); nut->sc = nut->alloc->malloc(sizeof(stream_context_t) * nut->stream_count); ERROR(!nut->sc, -ERR_OUT_OF_MEM); - for (i = 0; i < nut->stream_count; i++) { - nut->sc[i].last_pts = 0; - nut->sc[i].last_dts = 0; - nut->sc[i].last_key = 0; - nut->sc[i].eor = 0; - nut->sc[i].sh.max_pts = 0; - nut->sc[i].sh.fourcc = NULL; - nut->sc[i].sh.codec_specific = NULL; - nut->sc[i].pts_cache = NULL; - } + memset(nut->sc, 0, sizeof(stream_context_t) * nut->stream_count); } for (i = 0; i < nut->stream_count; i++) {