• Home
  • Raw
  • Download

Lines Matching refs:mem

109 static int RemapMemBuffer(MemBuffer* const mem,  in RemapMemBuffer()  argument
111 if (size < mem->buf_size_) return 0; // can't remap to a shorter buffer! in RemapMemBuffer()
113 mem->buf_ = data; in RemapMemBuffer()
114 mem->end_ = mem->buf_size_ = size; in RemapMemBuffer()
118 static int InitMemBuffer(MemBuffer* const mem, in InitMemBuffer() argument
120 memset(mem, 0, sizeof(*mem)); in InitMemBuffer()
121 return RemapMemBuffer(mem, data, size); in InitMemBuffer()
125 static WEBP_INLINE size_t MemDataSize(const MemBuffer* const mem) { in MemDataSize() argument
126 return (mem->end_ - mem->start_); in MemDataSize()
130 static WEBP_INLINE int SizeIsInvalid(const MemBuffer* const mem, size_t size) { in SizeIsInvalid() argument
131 return (size > mem->riff_end_ - mem->start_); in SizeIsInvalid()
134 static WEBP_INLINE void Skip(MemBuffer* const mem, size_t size) { in Skip() argument
135 mem->start_ += size; in Skip()
138 static WEBP_INLINE void Rewind(MemBuffer* const mem, size_t size) { in Rewind() argument
139 mem->start_ -= size; in Rewind()
142 static WEBP_INLINE const uint8_t* GetBuffer(MemBuffer* const mem) { in GetBuffer() argument
143 return mem->buf_ + mem->start_; in GetBuffer()
147 static WEBP_INLINE uint8_t ReadByte(MemBuffer* const mem) { in ReadByte() argument
148 const uint8_t byte = mem->buf_[mem->start_]; in ReadByte()
149 Skip(mem, 1); in ReadByte()
153 static WEBP_INLINE int ReadLE16s(MemBuffer* const mem) { in ReadLE16s() argument
154 const uint8_t* const data = mem->buf_ + mem->start_; in ReadLE16s()
156 Skip(mem, 2); in ReadLE16s()
160 static WEBP_INLINE int ReadLE24s(MemBuffer* const mem) { in ReadLE24s() argument
161 const uint8_t* const data = mem->buf_ + mem->start_; in ReadLE24s()
163 Skip(mem, 3); in ReadLE24s()
167 static WEBP_INLINE uint32_t ReadLE32(MemBuffer* const mem) { in ReadLE32() argument
168 const uint8_t* const data = mem->buf_ + mem->start_; in ReadLE32()
170 Skip(mem, 4); in ReadLE32()
210 MemBuffer* const mem, Frame* const frame) { in StoreFrame() argument
213 int done = (MemDataSize(mem) < min_size); in StoreFrame()
219 const size_t chunk_start_offset = mem->start_; in StoreFrame()
220 const uint32_t fourcc = ReadLE32(mem); in StoreFrame()
221 const uint32_t payload_size = ReadLE32(mem); in StoreFrame()
223 const size_t payload_available = (payload_size_padded > MemDataSize(mem)) in StoreFrame()
224 ? MemDataSize(mem) : payload_size_padded; in StoreFrame()
228 if (SizeIsInvalid(mem, payload_size_padded)) return PARSE_ERROR; in StoreFrame()
229 if (payload_size_padded > MemDataSize(mem)) status = PARSE_NEED_MORE_DATA; in StoreFrame()
239 Skip(mem, payload_available); in StoreFrame()
253 WebPGetFeatures(mem->buf_ + chunk_start_offset, chunk_size, in StoreFrame()
265 Skip(mem, payload_available); in StoreFrame()
273 Rewind(mem, CHUNK_HEADER_SIZE); in StoreFrame()
278 if (mem->start_ == mem->riff_end_) { in StoreFrame()
280 } else if (MemDataSize(mem) < CHUNK_HEADER_SIZE) { in StoreFrame()
292 static ParseStatus NewFrame(const MemBuffer* const mem, in NewFrame() argument
295 if (SizeIsInvalid(mem, min_size)) return PARSE_ERROR; in NewFrame()
297 if (MemDataSize(mem) < min_size) return PARSE_NEED_MORE_DATA; in NewFrame()
311 MemBuffer* const mem = &dmux->mem_; in ParseAnimationFrame() local
314 NewFrame(mem, ANMF_CHUNK_SIZE, frame_chunk_size, &frame); in ParseAnimationFrame()
317 frame->x_offset_ = 2 * ReadLE24s(mem); in ParseAnimationFrame()
318 frame->y_offset_ = 2 * ReadLE24s(mem); in ParseAnimationFrame()
319 frame->width_ = 1 + ReadLE24s(mem); in ParseAnimationFrame()
320 frame->height_ = 1 + ReadLE24s(mem); in ParseAnimationFrame()
321 frame->duration_ = ReadLE24s(mem); in ParseAnimationFrame()
322 bits = ReadByte(mem); in ParseAnimationFrame()
333 status = StoreFrame(dmux->num_frames_ + 1, anmf_payload_size, mem, frame); in ParseAnimationFrame()
365 static ParseStatus ReadHeader(MemBuffer* const mem) { in ReadHeader() argument
370 if (MemDataSize(mem) < min_size) return PARSE_NEED_MORE_DATA; in ReadHeader()
371 if (memcmp(GetBuffer(mem), "RIFF", CHUNK_SIZE_BYTES) || in ReadHeader()
372 memcmp(GetBuffer(mem) + CHUNK_HEADER_SIZE, "WEBP", CHUNK_SIZE_BYTES)) { in ReadHeader()
376 riff_size = GetLE32(GetBuffer(mem) + TAG_SIZE); in ReadHeader()
381 mem->riff_end_ = riff_size + CHUNK_HEADER_SIZE; in ReadHeader()
382 if (mem->buf_size_ > mem->riff_end_) { in ReadHeader()
383 mem->buf_size_ = mem->end_ = mem->riff_end_; in ReadHeader()
386 Skip(mem, RIFF_HEADER_SIZE); in ReadHeader()
392 MemBuffer* const mem = &dmux->mem_; in ParseSingleImage() local
398 if (SizeIsInvalid(mem, min_size)) return PARSE_ERROR; in ParseSingleImage()
399 if (MemDataSize(mem) < min_size) return PARSE_NEED_MORE_DATA; in ParseSingleImage()
438 MemBuffer* const mem = &dmux->mem_; in ParseVP8XChunks() local
444 const size_t chunk_start_offset = mem->start_; in ParseVP8XChunks()
445 const uint32_t fourcc = ReadLE32(mem); in ParseVP8XChunks()
446 const uint32_t chunk_size = ReadLE32(mem); in ParseVP8XChunks()
450 if (SizeIsInvalid(mem, chunk_size_padded)) return PARSE_ERROR; in ParseVP8XChunks()
462 Rewind(mem, CHUNK_HEADER_SIZE); in ParseVP8XChunks()
469 if (MemDataSize(mem) < chunk_size_padded) { in ParseVP8XChunks()
473 dmux->bgcolor_ = ReadLE32(mem); in ParseVP8XChunks()
474 dmux->loop_count_ = ReadLE16s(mem); in ParseVP8XChunks()
475 Skip(mem, chunk_size_padded - ANIM_CHUNK_SIZE); in ParseVP8XChunks()
501 if (chunk_size_padded <= MemDataSize(mem)) { in ParseVP8XChunks()
510 Skip(mem, chunk_size_padded); in ParseVP8XChunks()
517 if (mem->start_ == mem->riff_end_) { in ParseVP8XChunks()
519 } else if (MemDataSize(mem) < CHUNK_HEADER_SIZE) { in ParseVP8XChunks()
528 MemBuffer* const mem = &dmux->mem_; in ParseVP8X() local
531 if (MemDataSize(mem) < CHUNK_HEADER_SIZE) return PARSE_NEED_MORE_DATA; in ParseVP8X()
534 Skip(mem, TAG_SIZE); // VP8X in ParseVP8X()
535 vp8x_size = ReadLE32(mem); in ParseVP8X()
539 if (SizeIsInvalid(mem, vp8x_size)) return PARSE_ERROR; in ParseVP8X()
540 if (MemDataSize(mem) < vp8x_size) return PARSE_NEED_MORE_DATA; in ParseVP8X()
542 dmux->feature_flags_ = ReadByte(mem); in ParseVP8X()
543 Skip(mem, 3); // Reserved. in ParseVP8X()
544 dmux->canvas_width_ = 1 + ReadLE24s(mem); in ParseVP8X()
545 dmux->canvas_height_ = 1 + ReadLE24s(mem); in ParseVP8X()
549 Skip(mem, vp8x_size - VP8X_CHUNK_SIZE); // skip any trailing data. in ParseVP8X()
552 if (SizeIsInvalid(mem, CHUNK_HEADER_SIZE)) return PARSE_ERROR; in ParseVP8X()
553 if (MemDataSize(mem) < CHUNK_HEADER_SIZE) return PARSE_NEED_MORE_DATA; in ParseVP8X()
650 static void InitDemux(WebPDemuxer* const dmux, const MemBuffer* const mem) { in InitDemux() argument
658 dmux->mem_ = *mem; in InitDemux()
661 static ParseStatus CreateRawImageDemuxer(MemBuffer* const mem, in CreateRawImageDemuxer() argument
665 WebPGetFeatures(mem->buf_, mem->buf_size_, &features); in CreateRawImageDemuxer()
676 InitDemux(dmux, mem); in CreateRawImageDemuxer()
677 SetFrameInfo(0, mem->buf_size_, 1 /*frame_num*/, 1 /*complete*/, &features, in CreateRawImageDemuxer()
701 MemBuffer mem; in WebPDemuxInternal() local
709 if (!InitMemBuffer(&mem, data->bytes, data->size)) return NULL; in WebPDemuxInternal()
710 status = ReadHeader(&mem); in WebPDemuxInternal()
715 status = CreateRawImageDemuxer(&mem, &dmux); in WebPDemuxInternal()
728 partial = (mem.buf_size_ < mem.riff_end_); in WebPDemuxInternal()
733 InitDemux(dmux, &mem); in WebPDemuxInternal()