WebPMuxError WebPMuxSetAnimationParams(WebPMux* mux, const WebPMuxAnimParams* params) { WebPMuxError err; uint8_t data[ANIM_CHUNK_SIZE]; if (mux == NULL || params == NULL) return WEBP_MUX_INVALID_ARGUMENT; if (params->loop_count < 0 || params->loop_count >= MAX_LOOP_COUNT) { return WEBP_MUX_INVALID_ARGUMENT; } // Delete any existing ANIM chunk(s). err = MuxDeleteAllNamedData(mux, kChunks[IDX_ANIM].tag); if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err; // Set the animation parameters. PutLE32(data, params->bgcolor); PutLE16(data + 4, params->loop_count); return MuxAddChunk(mux, 1, kChunks[IDX_ANIM].tag, data, sizeof(data), 1); }
WebPMuxError WebPMuxSetLoopCount(WebPMux* mux, int loop_count) { WebPMuxError err; uint8_t* data = NULL; if (mux == NULL) return WEBP_MUX_INVALID_ARGUMENT; if (loop_count >= MAX_LOOP_COUNT) return WEBP_MUX_INVALID_ARGUMENT; // Delete the existing LOOP chunk(s). err = DeleteLoopCount(mux); if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err; // Add the given loop count. data = (uint8_t*)malloc(kChunks[IDX_LOOP].size); if (data == NULL) return WEBP_MUX_MEMORY_ERROR; PutLE16(data, loop_count); err = MuxAddChunk(mux, 1, kChunks[IDX_LOOP].tag, data, kChunks[IDX_LOOP].size, 1); free(data); return err; }