Home | History | Annotate | Download | only in mux

Lines Matching defs:mux

10 // Set and delete APIs for mux.
16 #include "src/mux/muxi.h"
20 // Life of a mux object.
22 static void MuxInit(WebPMux* const mux) {
23 assert(mux != NULL);
24 memset(mux, 0, sizeof(*mux));
25 mux->canvas_width_ = 0; // just to be explicit
26 mux->canvas_height_ = 0;
33 WebPMux* const mux = (WebPMux*)WebPSafeMalloc(1ULL, sizeof(WebPMux));
34 if (mux != NULL) MuxInit(mux);
35 return mux;
46 static void MuxRelease(WebPMux* const mux) {
47 assert(mux != NULL);
48 DeleteAllImages(&mux->images_);
49 ChunkListDelete(&mux->vp8x_);
50 ChunkListDelete(&mux->iccp_);
51 ChunkListDelete(&mux->anim_);
52 ChunkListDelete(&mux->exif_);
53 ChunkListDelete(&mux->xmp_);
54 ChunkListDelete(&mux->unknown_);
57 void WebPMuxDelete(WebPMux* mux) {
58 if (mux != NULL) {
59 MuxRelease(mux);
60 WebPSafeFree(mux);
77 static WebPMuxError MuxSet(WebPMux* const mux, uint32_t tag, uint32_t nth,
82 assert(mux != NULL);
86 SWITCH_ID_LIST(IDX_VP8X, &mux->vp8x_);
87 SWITCH_ID_LIST(IDX_ICCP, &mux->iccp_);
88 SWITCH_ID_LIST(IDX_ANIM, &mux->anim_);
89 SWITCH_ID_LIST(IDX_EXIF, &mux->exif_);
90 SWITCH_ID_LIST(IDX_XMP, &mux->xmp_);
91 SWITCH_ID_LIST(IDX_UNKNOWN, &mux->unknown_);
139 WebPMux* const mux = WebPMuxCreate(bitstream, 0);
140 if (mux == NULL) return WEBP_MUX_BAD_DATA;
141 wpi = mux->images_;
147 WebPMuxDelete(mux);
168 static WebPMuxError MuxDeleteAllNamedData(WebPMux* const mux, uint32_t tag) {
170 assert(mux != NULL);
172 return DeleteChunks(MuxGetChunkListFromId(mux, id), tag);
178 WebPMuxError WebPMuxSetChunk(WebPMux* mux, const char fourcc[4],
182 if (mux == NULL || fourcc == NULL || chunk_data == NULL ||
189 err = MuxDeleteAllNamedData(mux, tag);
193 return MuxSet(mux, tag, 1, chunk_data, copy_data);
233 WebPMuxError WebPMuxSetImage(WebPMux* mux, const WebPData* bitstream,
239 if (mux == NULL || bitstream == NULL || bitstream->bytes == NULL ||
244 if (mux->images_ != NULL) {
245 // Only one 'simple image' can be added in mux. So, remove present images.
246 DeleteAllImages(&mux->images_);
253 // Add this WebPMuxImage to mux.
254 err = MuxImagePush(&wpi, &mux->images_);
265 WebPMuxError WebPMuxPushFrame(WebPMux* mux, const WebPMuxFrameInfo* info,
272 if (mux == NULL || info == NULL) return WEBP_MUX_INVALID_ARGUMENT;
280 if (mux->images_ != NULL) {
281 const WebPMuxImage* const image = mux->images_;
315 // Add this WebPMuxImage to mux.
316 err = MuxImagePush(&wpi, &mux->images_);
327 WebPMuxError WebPMuxSetAnimationParams(WebPMux* mux,
333 if (mux == NULL || params == NULL) return WEBP_MUX_INVALID_ARGUMENT;
339 err = MuxDeleteAllNamedData(mux, kChunks[IDX_ANIM].tag);
345 return MuxSet(mux, kChunks[IDX_ANIM].tag, 1, &anim, 1);
348 WebPMuxError WebPMuxSetCanvasSize(WebPMux* mux,
351 if (mux == NULL) {
366 err = MuxDeleteAllNamedData(mux, kChunks[IDX_VP8X].tag);
369 mux->canvas_width_ = width;
370 mux->canvas_height_ = height;
377 WebPMuxError WebPMuxDeleteChunk(WebPMux* mux, const char fourcc[4]) {
378 if (mux == NULL || fourcc == NULL) return WEBP_MUX_INVALID_ARGUMENT;
379 return MuxDeleteAllNamedData(mux, ChunkGetTagFromFourCC(fourcc));
382 WebPMuxError WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth) {
383 if (mux == NULL) return WEBP_MUX_INVALID_ARGUMENT;
384 return MuxImageDeleteNth(&mux->images_, nth);
425 static WebPMuxError GetAdjustedCanvasSize(const WebPMux* const mux,
428 assert(mux != NULL);
431 wpi = mux->images_;
468 static WebPMuxError CreateVP8XChunk(WebPMux* const mux) {
477 assert(mux != NULL);
478 images = mux->images_; // First image.
486 err = MuxDeleteAllNamedData(mux, kChunks[IDX_VP8X].tag);
490 if (mux->iccp_ != NULL && mux->iccp_->data_.bytes != NULL) {
493 if (mux->exif_ != NULL && mux->exif_->data_.bytes != NULL) {
496 if (mux->xmp_ != NULL && mux->xmp_->data_.bytes != NULL) {
509 err = GetAdjustedCanvasSize(mux, &width, &height);
519 if (mux->canvas_width_ != 0 || mux->canvas_height_ != 0) {
520 if (width > mux->canvas_width_ || height > mux->canvas_height_) {
523 width = mux->canvas_width_;
524 height = mux->canvas_height_;
527 if (flags == 0 && mux->unknown_ == NULL) {
543 return MuxSet(mux, kChunks[IDX_VP8X].tag, 1, &vp8x, 1);
546 // Cleans up 'mux' by removing any unnecessary chunks.
547 static WebPMuxError MuxCleanup(WebPMux* const mux) {
554 WebPMuxError err = WebPMuxNumChunks(mux, kChunks[IDX_ANMF].id, &num_frames);
558 err = MuxImageGetNth((const WebPMuxImage**)&mux->images_, 1, &frame);
562 ((mux->canvas_width_ == 0 && mux->canvas_height_ == 0) ||
563 (frame->width_ == mux->canvas_width_ &&
564 frame->height_ == mux->canvas_height_))) {
572 err = WebPMuxNumChunks(mux, kChunks[IDX_ANIM].id, &num_anim_chunks);
575 err = MuxDeleteAllNamedData(mux, kChunks[IDX_ANIM].tag);
600 WebPMuxError WebPMuxAssemble(WebPMux* mux, WebPData* assembled_data) {
612 if (mux == NULL) {
616 // Finalize mux.
617 err = MuxCleanup(mux);
619 err = CreateVP8XChunk(mux);
623 size = ChunkListDiskSize(mux->vp8x_) + ChunkListDiskSize(mux->iccp_)
624 + ChunkListDiskSize(mux->anim_) + ImageListDiskSize(mux->images_)
625 + ChunkListDiskSize(mux->exif_) + ChunkListDiskSize(mux->xmp_)
626 + ChunkListDiskSize(mux->unknown_) + RIFF_HEADER_SIZE;
633 dst = ChunkListEmit(mux->vp8x_, dst);
634 dst = ChunkListEmit(mux->iccp_, dst);
635 dst = ChunkListEmit(mux->anim_, dst);
636 dst = ImageListEmit(mux->images_, dst);
637 dst = ChunkListEmit(mux->exif_, dst);
638 dst = ChunkListEmit(mux->xmp_, dst);
639 dst = ChunkListEmit(mux->unknown_, dst);
642 // Validate mux.
643 err = MuxValidate(mux);