เอกสารประกอบเกี่ยวกับ WebP Container API

การจัดการคอนเทนเนอร์ RIFF สำหรับรูปภาพ WebP

Mux API

อนุญาตให้จัดการอิมเมจคอนเทนเนอร์ WebP ที่มีฟีเจอร์ต่างๆ เช่น โปรไฟล์สี ข้อมูลเมตา ภาพเคลื่อนไหว และรูปภาพที่แยกส่วน

ตัวอย่างโค้ด

สร้าง MUX ด้วยข้อมูลภาพ โปรไฟล์สี และข้อมูลเมตา XMP

int copy_data = 0;
WebPMux* mux = WebPMuxNew();
// ... (Prepare image data).
WebPMuxSetImage(mux, &image, copy_data);
// ... (Prepare ICCP color profile data).
WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data);
// ... (Prepare XMP metadata).
WebPMuxSetChunk(mux, "XMP ", &xmp, copy_data);
// Get data from mux in WebP RIFF format.
WebPMuxAssemble(mux, &output_data);
WebPMuxDelete(mux);
// ... (Consume output_data; e.g. write output_data.bytes to file).
WebPDataClear(&output_data);

รับข้อมูลรูปภาพและโปรไฟล์สีจากไฟล์ WebP

int copy_data = 0;
// ... (Read data from file).
WebPMux* mux = WebPMuxCreate(&data, copy_data);
WebPMuxGetFrame(mux, 1, &image);
// ... (Consume image; e.g. call WebPDecode() to decode the data).
WebPMuxGetChunk(mux, "ICCP", &icc_profile);
// ... (Consume icc_data).
WebPMuxDelete(mux);
free(data);

Life of a Mux Object

Enum

// Error codes
typedef enum WebPMuxError {
  WEBP_MUX_OK                 =  1,
  WEBP_MUX_NOT_FOUND          =  0,
  WEBP_MUX_INVALID_ARGUMENT   = -1,
  WEBP_MUX_BAD_DATA           = -2,
  WEBP_MUX_MEMORY_ERROR       = -3,
  WEBP_MUX_NOT_ENOUGH_DATA    = -4
} WebPMuxError;

// IDs for different types of chunks.
typedef enum WebPChunkId {
  WEBP_CHUNK_VP8X,     // VP8X
  WEBP_CHUNK_ICCP,     // ICCP
  WEBP_CHUNK_ANIM,     // ANIM
  WEBP_CHUNK_ANMF,     // ANMF
  WEBP_CHUNK_ALPHA,    // ALPH
  WEBP_CHUNK_IMAGE,    // VP8/VP8L
  WEBP_CHUNK_EXIF,     // EXIF
  WEBP_CHUNK_XMP,      // XMP
  WEBP_CHUNK_UNKNOWN,  // Other chunks.
  WEBP_CHUNK_NIL
} WebPChunkId;

WebPGetMuxVersion()

แสดงผลหมายเลขเวอร์ชันของไลบรารี Mux ซึ่งอัดแน่นด้วยเลขฐานสิบหกโดยใช้ 8 บิตสำหรับแต่ละรายการหลัก/รอง/การแก้ไข เช่น v2.5.7 คือ 0x020507

int WebPGetMuxVersion(void);

WebPMuxNew()

สร้างออบเจ็กต์ Mux ที่ว่างเปล่า

WebPMux* WebPMuxNew(void);
การคืนสินค้า
ตัวชี้ไปยังออบเจ็กต์ Mux เปล่าที่สร้างใหม่

WebPMuxDelete()

ลบออบเจ็กต์ Mux

void WebPMuxDelete(WebPMux* mux);
พารามิเตอร์
mux -- (เข้า/ออก) ออบเจ็กต์ที่จะถูกลบ

การสร้าง Mux

WebPMuxCreate()

สร้างออบเจ็กต์ Mux จากข้อมูลดิบที่ระบุในรูปแบบ WebP RIFF

WebPMux* WebPMuxCreate(const WebPData* bitstream, int copy_data);
พารามิเตอร์

bitstream -- (ใน) ข้อมูลบิตสตรีมในรูปแบบ WebP RIFF

copy_data -- (ใน) ค่า 1 บ่งชี้ว่าข้อมูลที่ระบุจะถูกคัดลอกไปยัง mux และค่า 0 บ่งชี้ว่าข้อมูลจะไม่ถูกคัดลอกไปยังออบเจ็กต์ mux

การคืนสินค้า

ตัวชี้ไปยังออบเจ็กต์ Mux ที่สร้างขึ้นจากข้อมูลที่ระบุเมื่อดําเนินการสำเร็จ

NULL -- ในกรณีที่ข้อมูลไม่ถูกต้องหรือหน่วยความจำผิดพลาด

กลุ่มที่ไม่ใช่รูปภาพ

WebPMuxSetChunk()

เพิ่มกลุ่มที่มีรหัส fourcc และข้อมูล chunk_data ในออบเจ็กต์ mux ระบบจะนํากลุ่มที่มีรหัสเดียวกันออก

WebPMuxError WebPMuxSetChunk(WebPMux* mux,
                             const char fourcc[4],
                             const WebPData* chunk_data,
                             int copy_data);

หมายเหตุ: เฉพาะส่วนที่ไม่เกี่ยวข้องกับรูปภาพเท่านั้นที่ควรได้รับการจัดการผ่านกลุ่ม API (กลุ่มที่เกี่ยวข้องกับรูปภาพ ได้แก่ "ANMF", "FRGM", "VP8 ", "VP8L" และ "ALPH") หากต้องการเพิ่ม รับ และลบรูปภาพ ให้ใช้ WebPMuxSetImage(), WebPMuxPushFrame(), WebPMuxGetFrame() และ WebPMuxDeleteFrame()

พารามิเตอร์

mux -- (เข้า/ออก) วัตถุที่จะเพิ่มส่วน

fourcc -- (ใน) อาร์เรย์อักขระที่มี 4cc ของกลุ่มที่ระบุ เช่น "ICCP", "XMP ", "EXIF" ฯลฯ

chunk_data -- (ใน) ข้อมูลกลุ่มที่จะเพิ่ม

copy_data -- (ใน) ค่า 1 บ่งชี้ว่าข้อมูลที่ระบุจะถูกคัดลอกไปยัง mux และค่า 0 บ่งชี้ว่าข้อมูลจะไม่ถูกคัดลอกไปยังออบเจ็กต์ mux

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก mux, กลุ่มโฆษณา 4cc หรือ chunk_data มีค่าเป็น NULL หรือ fourcc ตรงกับกลุ่มรูปภาพ

WEBP_MUX_MEMORY_ERROR -- เมื่อเกิดข้อผิดพลาดในการจัดสรรหน่วยความจำ

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

WebPMuxGetChunk()

รับการอ้างอิงข้อมูลของกลุ่มที่มีรหัส fourcc ในออบเจ็กต์ Mux ผู้โทรไม่ควรปล่อยข้อมูลที่ส่งคืน

WebPMuxError WebPMuxGetChunk(const WebPMux* mux,
                             const char fourcc[4],
                             WebPData* chunk_data);
พารามิเตอร์

mux -- (ใน) ออบเจ็กต์ที่จะดึงข้อมูลกลุ่ม

fourcc -- (ใน) อาร์เรย์อักขระที่มี 4cc ของกลุ่ม เช่น "ICCP", "XMP ", "EXIF" ฯลฯ

chunk_data -- (ออก) แสดงผลข้อมูลกลุ่ม

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก mux, กลุ่มโฆษณา 4cc หรือ chunk_data มีค่าเป็น NULL หรือ fourcc ตรงกับกลุ่มรูปภาพ

WEBP_MUX_NOT_FOUND -- หาก Mux ไม่มีกลุ่มที่มีรหัสที่ระบุ

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

WebPMuxDeleteChunk()

ลบกลุ่มที่มี fourcc ที่ระบุออกจากออบเจ็กต์ Mux

WebPMuxError WebPMuxDeleteChunk(WebPMux* mux, const char fourcc[4]);
พารามิเตอร์

mux -- (เข้า/ออก) ออบเจ็กต์ที่ระบบจะลบส่วนออก

fourcc -- (ใน) อาร์เรย์อักขระที่มี 4cc ของกลุ่ม เช่น "ICCP", "XMP ", "EXIF" ฯลฯ

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก Mux หรือ Fourcc มีค่าเป็น NULL หรือ 4cc ตรงกับกลุ่มรูปภาพ

WEBP_MUX_NOT_FOUND -- หาก Mux ไม่มีกลุ่มที่มี 4 รูปแบบที่ระบุ

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

รูปภาพ

ห่อหุ้มข้อมูลเกี่ยวกับเฟรม/ส่วนย่อยเดียว

struct WebPMuxFrameInfo {
  WebPData    bitstream;  // image data: can be a raw VP8/VP8L bitstream
                          // or a single-image WebP file.
  int         x_offset;   // x-offset of the frame.
  int         y_offset;   // y-offset of the frame.
  int         duration;   // duration of the frame (in milliseconds).

  WebPChunkId id;         // frame type: should be one of WEBP_CHUNK_ANMF,
                          // WEBP_CHUNK_FRGM or WEBP_CHUNK_IMAGE
  WebPMuxAnimDispose dispose_method;  // Disposal method for the frame.
  WebPMuxAnimBlend   blend_method;    // Blend operation for the frame.
};

WebPMuxSetImage()

ตั้งค่ารูปภาพ (ที่ไม่ใช่ภาพเคลื่อนไหวและไม่แยกเป็นส่วน) ในออบเจ็กต์ Mux หมายเหตุ: ระบบจะนำรูปภาพที่มีอยู่ (รวมถึงเฟรม/ส่วนย่อย) ออก

WebPMuxError WebPMuxSetImage(WebPMux* mux,
                             const WebPData* bitstream,
                             int copy_data);
พารามิเตอร์

mux -- (เข้า/ออก) วัตถุที่จะตั้งค่ารูปภาพ

bitstream -- (ใน) อาจเป็นบิตสตรีม VP8/VP8L แบบข้อมูลดิบหรือไฟล์ WebP แบบรูปภาพเดียว (ไม่ใช่ภาพเคลื่อนไหวและไม่ใช่แยกส่วน)

copy_data -- (ใน) ค่า 1 บ่งชี้ว่าข้อมูลที่ระบุจะถูกคัดลอกไปยัง mux และค่า 0 บ่งชี้ว่าข้อมูลจะไม่ถูกคัดลอกไปยังออบเจ็กต์ mux

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก Mux มีค่าเป็น NULL หรือบิตสตรีมจะเป็น NULL

WEBP_MUX_MEMORY_ERROR -- เมื่อเกิดข้อผิดพลาดในการจัดสรรหน่วยความจำ

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

WebPMuxPushFrame()

เพิ่มเฟรมที่ส่วนท้ายของวัตถุ Mux

WebPMuxError WebPMuxPushFrame(WebPMux* mux,
                              const WebPMuxFrameInfo* frame,
                              int copy_data);

Notes:

  1. เฟรม.id ควรเป็นค่าใดค่าหนึ่งใน WEBP_CHUNK_ANMF หรือ WEBP_CHUNK_FRGM
  2. สำหรับการตั้งค่ารูปภาพที่ไม่ใช่การแยกส่วนแบบไม่เคลื่อนไหว ให้ใช้ WebPMuxSetImage() แทน
  3. ประเภทของเฟรมที่พุชต้องเหมือนกับเฟรมใน Mux
  4. เนื่องจาก WebP รองรับเฉพาะออฟเซ็ตคู่เท่านั้น ระบบจะสแนปออฟเซ็ตเลขคี่ไปยังตำแหน่งเลขคู่โดยใช้ออฟเซ็ต &= ~1
พารามิเตอร์

mux -- (เข้า/ออก) วัตถุที่จะเพิ่มเฟรม

frame -- (ใน) ข้อมูลเฟรม

copy_data -- (ใน) ค่า 1 บ่งชี้ว่าข้อมูลที่ระบุจะถูกคัดลอกไปยัง mux และค่า 0 บ่งชี้ว่าข้อมูลจะไม่ถูกคัดลอกไปยังออบเจ็กต์ mux

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก Mux หรือเฟรมเป็นค่าว่าง หรือหากเนื้อหาของ frame ไม่ถูกต้อง

WEBP_MUX_MEMORY_ERROR -- เมื่อเกิดข้อผิดพลาดในการจัดสรรหน่วยความจำ

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

WEBP_MUX_MEMORY_ERROR -- เมื่อเกิดข้อผิดพลาดในการจัดสรรหน่วยความจำ

WebPMuxGetFrame()

รับเฟรมที่ n จากวัตถุ Mux เนื้อหาของ frame->bitstream จะได้รับการจัดสรรโดยใช้ Malloc() และ "ไม่ใช่" ของออบเจ็กต์ mux ต้องเตรียมผู้โทรไว้โดยการโทรไปที่ WebPDataClear() nth=0 มีความหมายพิเศษ นั่นคือ ตำแหน่งสุดท้าย

WebPMuxError WebPMuxGetFrame(const WebPMux* mux,
                             uint32_t nth,
                             WebPMuxFrameInfo* frame);
พารามิเตอร์

mux -- (ใน) ออบเจ็กต์ที่จะดึงข้อมูล

nth -- (ใน) ดัชนีของเฟรมในออบเจ็กต์ Mux

เฟรม -- (ออก) ข้อมูลของเฟรมที่แสดงผล

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก Mux หรือเฟรมเป็นค่าว่าง

WEBP_MUX_NOT_FOUND -- หากมีเฟรมน้อยกว่าที่ n ในออบเจ็กต์ Mux

WEBP_MUX_BAD_DATA -- หากกลุ่มเฟรมที่ n ใน Mux ไม่ถูกต้อง

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

WebPMuxDeleteFrame()

ลบเฟรมออกจากวัตถุ Mux nth=0 มีความหมายพิเศษ นั่นคือ ตำแหน่งสุดท้าย

WebPMuxError WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth);
พารามิเตอร์

mux -- (เข้า/ออก) วัตถุที่เฟรมจะถูกลบ

nth -- (in) ตำแหน่งที่ต้องการให้ลบเฟรม

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก Mux มีค่าเป็น NULL

WEBP_MUX_NOT_FOUND -- หากมีเฟรมน้อยกว่าที่ n ในออบเจ็กต์ Mux ก่อนที่จะลบ

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

แอนิเมชัน

พารามิเตอร์ภาพเคลื่อนไหว

struct WebPMuxAnimParams {
  uint32_t bgcolor;  // Background color of the canvas stored (in MSB order) as:
                     // Bits 00 to 07: Alpha.
                     // Bits 08 to 15: Red.
                     // Bits 16 to 23: Green.
                     // Bits 24 to 31: Blue.
  int loop_count;    // Number of times to repeat the animation [0 = infinite].
};

WebPMuxSetAnimationParams()

ตั้งค่าพารามิเตอร์ภาพเคลื่อนไหวในออบเจ็กต์ Mux ส่วน ANIM ที่มีอยู่จะถูกนำออก

WebPMuxError WebPMuxSetAnimationParams(WebPMux* mux,
                                       const WebPMuxAnimParams* params);
พารามิเตอร์

mux -- (เข้า/ออก) ออบเจ็กต์ที่จะตั้งค่า/เพิ่มส่วน ANIM

params -- (ใน) พารามิเตอร์ภาพเคลื่อนไหว

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก Mux หรือพารามิเตอร์เป็น NULL

WEBP_MUX_MEMORY_ERROR -- เมื่อเกิดข้อผิดพลาดในการจัดสรรหน่วยความจำ

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

WebPMuxGetAnimationParams()

รับพารามิเตอร์ภาพเคลื่อนไหวจากออบเจ็กต์ Mux

WebPMuxError WebPMuxGetAnimationParams(const WebPMux* mux,
                                       WebPMuxAnimParams* params);
พารามิเตอร์

mux -- (ใน) ออบเจ็กต์ที่ดึงพารามิเตอร์ภาพเคลื่อนไหวมา

params -- พารามิเตอร์ภาพเคลื่อนไหว (ออก) ที่ดึงจากกลุ่ม ANIM

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก Mux หรือพารามิเตอร์เป็น NULL

WEBP_MUX_NOT_FOUND -- หากไม่มีกลุ่ม ANIM ในออบเจ็กต์ Mux

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

สาธารณูปโภคเบ็ดเตล็ด

WebPMuxGetCanvasSize()

รับขนาด Canvas จากออบเจ็กต์ Mux

WebPMuxError WebPMuxGetCanvasSize(const WebPMux* mux,
                                  int* width,
                                  int* height);

หมายเหตุ: วิธีนี้จะถือว่ากลุ่ม VP8X เป็นปัจจุบัน (หากมี) กล่าวคือ ไม่มีการแก้ไขออบเจ็กต์ Mux ตั้งแต่การเรียกไปยัง WebPMuxAssemble() หรือ WebPMuxCreate() ครั้งล่าสุด

พารามิเตอร์

mux -- (ใน) ออบเจ็กต์ที่จะดึงขนาดของ Canvas

width -- (ออก) ความกว้างของ Canvas

height -- (ออก) ความสูงของ Canvas

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก Mux, ความกว้างหรือความสูงมีค่าเป็น NULL

WEBP_MUX_BAD_DATA -- หากขนาดกลุ่ม VP8X/VP8/VP8L ขนาดหรือ Canvas ไม่ถูกต้อง

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

WebPMuxGetFeatures()

รับแฟล็กฟีเจอร์จากออบเจ็กต์ Mux

WebPMuxError WebPMuxGetFeatures(const WebPMux* mux, uint32_t* flags);

หมายเหตุ: วิธีนี้จะถือว่ากลุ่ม VP8X เป็นปัจจุบัน (หากมี) กล่าวคือ ไม่มีการแก้ไขออบเจ็กต์ Mux ตั้งแต่การเรียกไปยัง WebPMuxAssemble() หรือ WebPMuxCreate() ครั้งล่าสุด

พารามิเตอร์

mux -- (ใน) ออบเจ็กต์ที่ระบบจะดึงจุดสนใจ

flags -- (ออก) แฟล็กที่ระบุฟีเจอร์ที่มีอยู่ในออบเจ็กต์ mux ซึ่งจะเป็น OR ของค่าแฟล็กต่างๆ ใช้ Enum WebPFeatureFlags เพื่อทดสอบค่าแฟล็กแต่ละค่าได้

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก Mux หรือแฟล็กมีค่าเป็น NULL

WEBP_MUX_BAD_DATA -- หากขนาดกลุ่ม VP8X/VP8/VP8L ขนาดหรือ Canvas ไม่ถูกต้อง

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

WebPMuxNumChunks()

รับจำนวนกลุ่มที่มีค่าแท็กที่ระบุในออบเจ็กต์ mux

WebPMuxError WebPMuxNumChunks(const WebPMux* mux,
                              WebPChunkId id,
                              int* num_elements);
พารามิเตอร์

mux -- (ใน) ออบเจ็กต์ที่จะดึงข้อมูล

id -- (ใน) กลุ่มรหัสที่ระบุประเภทของกลุ่ม

num_elements -- (out) จำนวนกลุ่มที่มีรหัสกลุ่มที่กำหนด

การคืนสินค้า

WEBP_MUX_INVALID_ARGUMENT -- หาก mux หรือ num_elements เป็นค่าว่าง

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

WebPMuxAssemble()

ประกอบชิ้นส่วนทั้งหมดในรูปแบบ WebP RIFF และแสดงผลใน assembled_data ฟังก์ชันนี้จะตรวจสอบออบเจ็กต์ Mux ด้วย

WebPMuxError WebPMuxAssemble(WebPMux* mux, WebPData* assembled_data);

หมายเหตุ: ระบบจะไม่สนใจและเขียนทับเนื้อหาของ assembled_data นอกจากนี้ เนื้อหาของ assembled_data ยังได้รับการจัดสรรโดยใช้ Malloc() และไม่ได้เป็นเจ้าของโดยออบเจ็กต์ mux ผู้โทรต้องเป็นผู้จัดการโดยการโทรหา WebPDataClear()

พารามิเตอร์

mux -- (เข้า/ออก) วัตถุที่จะประกอบชิ้นส่วน

assembled_data -- ข้อมูล WebP ที่ประกอบขึ้น (ออก)

การคืนสินค้า

WEBP_MUX_BAD_DATA -- หากออบเจ็กต์ Mux ไม่ถูกต้อง

WEBP_MUX_INVALID_ARGUMENT -- หาก mux หรือ assembled_data เป็นค่าว่าง

WEBP_MUX_MEMORY_ERROR -- เมื่อเกิดข้อผิดพลาดในการจัดสรรหน่วยความจำ

WEBP_MUX_OK -- เกี่ยวกับความสำเร็จ

API ของ WebPAnimEncoder

API นี้อนุญาตให้เข้ารหัส (อาจ) ภาพเคลื่อนไหว WebP ได้

ตัวอย่างโค้ด

WebPAnimEncoderOptions enc_options;
WebPAnimEncoderOptionsInit(&enc_options);
// Tune 'enc_options' as needed.
WebPAnimEncoder* enc = WebPAnimEncoderNew(width, height, &enc_options);
while(<there are more frames>) {
  WebPConfig config;
  WebPConfigInit(&config);
  // Tune 'config' as needed.
  WebPAnimEncoderAdd(enc, frame, timestamp_ms, &config);
}
WebPAnimEncoderAdd(enc, NULL, timestamp_ms, NULL);
WebPAnimEncoderAssemble(enc, webp_data);
WebPAnimEncoderDelete(enc);
// Write the 'webp_data' to a file, or re-mux it further.

typedef struct WebPAnimEncoder WebPAnimEncoder;  // Main opaque object.

ตัวเลือกทั่วโลก

struct WebPAnimEncoderOptions {
  WebPMuxAnimParams anim_params;  // Animation parameters.
  int minimize_size;    // If true, minimize the output size (slow). Implicitly
                        // disables key-frame insertion.
  int kmin;
  int kmax;             // Minimum and maximum distance between consecutive key
                        // frames in the output. The library may insert some key
                        // frames as needed to satisfy this criteria.
                        // Note that these conditions should hold: kmax > kmin
                        // and kmin >= kmax / 2 + 1. Also, if kmax <= 0, then
                        // key-frame insertion is disabled; and if kmax == 1,
                        // then all frames will be key-frames (kmin value does
                        // not matter for these special cases).
  int allow_mixed;      // If true, use mixed compression mode; may choose
                        // either lossy and lossless for each frame.
  int verbose;          // If true, print info and warning messages to stderr.
};

WebPAnimEncoderOptionsInit()

ควรเรียกเสมอเพื่อเริ่มต้นโครงสร้าง WebPAnimEncoderOptions ใหม่ก่อนที่จะแก้ไข แสดงผลเป็น "เท็จ" ในกรณีที่เวอร์ชันไม่ตรงกัน WebPAnimEncoderOptionsInit() ต้องเสร็จสมบูรณ์ก่อนใช้ออบเจ็กต์ enc_options

พารามิเตอร์
enc_options -- ตัวเลือก (เข้า/ออก) ที่ใช้สำหรับการเข้ารหัสภาพเคลื่อนไหว
การคืนสินค้า
จริงในความสำเร็จ
int WebPAnimEncoderOptionsInit(
    WebPAnimEncoderOptions* enc_options);

WebPAnimEncoderNew()

สร้างและเริ่มต้นออบเจ็กต์ WebPAnimEncoder

พารามิเตอร์

width/height -- (in) ความกว้างและความสูงของ Canvas ของภาพเคลื่อนไหว

enc_options -- (ใน) ตัวเลือกการเข้ารหัส ซึ่งสามารถส่ง NULL เพื่อเลือกค่าเริ่มต้นที่เหมาะสม

การคืนสินค้า

ตัวชี้ไปยังออบเจ็กต์ WebPAnimEncoder ที่สร้างขึ้นใหม่ หรือ NULL ในกรณีที่หน่วยความจำผิดพลาด

WebPAnimEncoder* WebPAnimEncoderNew(
    int width, int height, const WebPAnimEncoderOptions* enc_options);

WebPAnimEncoderAdd()

เพิ่มประสิทธิภาพเฟรมที่ระบุสำหรับ WebP จากนั้นเข้ารหัสและเพิ่มเฟรมลงในออบเจ็กต์ WebPAnimEncoder

การเรียก WebPAnimEncoderAdd ล่าสุดควรอยู่ในรูปแบบ frame = NULL ซึ่งระบุว่าจะไม่มีการเพิ่มเฟรมอีก การเรียกใช้นี้ยังใช้เพื่อ กำหนดระยะเวลาของเฟรมสุดท้ายด้วย

พารามิเตอร์

enc -- (เข้า/ออก) วัตถุที่จะเพิ่มเฟรม

frame -- (เข้า/ออก) ข้อมูลเฟรมในรูปแบบ ARGB หรือ YUV(A) หากอยู่ในรูปแบบ YUV(A) ระบบจะแปลงเป็น ARGB ซึ่งทำให้เกิดการสูญเสียเล็กน้อย

timestamp_ms -- (in) การประทับเวลาของเฟรมนี้ในหน่วยมิลลิวินาที ระยะเวลาของเฟรมจะคํานวณเป็น "การประทับเวลาของเฟรมถัดไป - การประทับเวลาของเฟรมนี้" ดังนั้น การประทับเวลาควรอยู่ในลำดับที่ไม่ลดลง

config -- (ใน) ตัวเลือกการเข้ารหัส สามารถส่ง NULL เพื่อเลือกค่าเริ่มต้นที่สมเหตุสมผล

การคืนสินค้า

เมื่อมีข้อผิดพลาด จะแสดงผลค่า "เท็จ" และตั้งค่า frame->error_code อย่างเหมาะสม ไม่เช่นนั้น จะแสดงค่า "จริง"

int WebPAnimEncoderAdd(
    WebPAnimEncoder* enc, struct WebPPicture* frame, int timestamp_ms,
    const struct WebPConfig* config);

WebPAnimEncoderAssemble()

รวมเฟรมทั้งหมดที่เพิ่มจนถึงบิตสตรีม WebP การเรียกใช้นี้ควรอยู่หลังการเรียก WebPAnimEncoderAdd ด้วย frame = NULL หากไม่เป็นเช่นนั้น ระยะเวลาของเฟรมสุดท้ายจะเป็นค่าประมาณภายใน

พารามิเตอร์

enc -- (เข้า/ออก) วัตถุที่ประกอบเฟรม

webp_data -- (ออก) สร้างบิตสตรีม WebP

การคืนสินค้า

จริงอยู่ที่ความสำเร็จ

int WebPAnimEncoderAssemble(WebPAnimEncoder* enc, WebPData* webp_data);

WebPAnimEncoderGetError()

ดูสตริงข้อผิดพลาดที่เกี่ยวข้องกับการโทรล่าสุดโดยใช้ enc สตริงที่แสดงผลเป็นของ enc และจะใช้ได้ก็ต่อเมื่อเรียกใช้ WebPAnimEncoderAdd() หรือ WebPAnimEncoderAssemble() หรือ WebPAnimEncoderDelete() ครั้งถัดไป

พารามิเตอร์
enc -- (เข้า/ออก) ที่ระบบจะดึงสตริงข้อผิดพลาด
การคืนสินค้า
NULL if enc is NULL. ไม่เช่นนั้น จะแสดงสตริงข้อผิดพลาดหากการเรียกไปยัง enc ครั้งล่าสุดมีข้อผิดพลาด หรือจะแสดงสตริงว่างหากการโทรครั้งล่าสุดสำเร็จ
const char* WebPAnimEncoderGetError(WebPAnimEncoder* enc);

WebPAnimEncoderDelete()

ลบออบเจ็กต์ WebPAnimEncoder

พารามิเตอร์
enc -- (เข้า/ออก) ออบเจ็กต์ที่จะถูกลบ
void WebPAnimEncoderDelete(WebPAnimEncoder* enc);

API ของ Demux

เปิดใช้การดึงข้อมูลรูปภาพและรูปแบบแบบขยายจากไฟล์ WebP

ตัวอย่างโค้ด

การทำลายข้อมูล WebP เพื่อดึงเฟรม โปรไฟล์ ICC และข้อมูลเมตา EXIF/XMP ทั้งหมด

WebPDemuxer* demux = WebPDemux(&webp_data);

uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH);
uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT);
// ... (Get information about the features present in the WebP file).
uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS);

// ... (Iterate over all frames).
WebPIterator iter;
if (WebPDemuxGetFrame(demux, 1, &iter)) {
  do {
    // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(),
    // ... and get other frame properties like width, height, offsets etc.
    // ... see 'struct WebPIterator' below for more info).
  } while (WebPDemuxNextFrame(&iter));
  WebPDemuxReleaseIterator(&iter);
}

// ... (Extract metadata).
WebPChunkIterator chunk_iter;
if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter);
// ... (Consume the ICC profile in 'chunk_iter.chunk').
WebPDemuxReleaseChunkIterator(&chunk_iter);
if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter);
// ... (Consume the EXIF metadata in 'chunk_iter.chunk').
WebPDemuxReleaseChunkIterator(&chunk_iter);
if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter);
// ... (Consume the XMP metadata in 'chunk_iter.chunk').
WebPDemuxReleaseChunkIterator(&chunk_iter);
WebPDemuxDelete(demux);

ชีวิตของออบเจ็กต์ Demux

Enum

typedef enum WebPDemuxState {
  WEBP_DEMUX_PARSE_ERROR    = -1,  // An error occurred while parsing.
  WEBP_DEMUX_PARSING_HEADER =  0,  // Not enough data to parse full header.
  WEBP_DEMUX_PARSED_HEADER  =  1,  // Header parsing complete,
                                   // data may be available.
  WEBP_DEMUX_DONE           =  2   // Entire file has been parsed.
} WebPDemuxState;

WebPGetDemuxVersion()

แสดงผลหมายเลขเวอร์ชันของไลบรารี demux ที่อัดแน่นด้วยเลขฐานสิบหกโดยใช้ 8 บิตสำหรับแต่ละรายการหลัก/ย่อย/การแก้ไข เช่น v2.5.7 คือ 0x020507

int WebPGetDemuxVersion(void);

WebPDemux()

แยกวิเคราะห์ไฟล์ WebP แบบเต็มที่ระบุโดย data

WebPDemuxer WebPDemux(const WebPData* data);

แสดงผลออบเจ็กต์ WebPDemuxer เมื่อแยกวิเคราะห์สำเร็จ มิเช่นนั้นจะเป็น NULL

WebPDemuxPartial()

แยกวิเคราะห์ไฟล์ WebP ที่อาจไม่สมบูรณ์ซึ่งได้จาก data หาก state ไม่เป็น NULL ระบบจะตั้งค่าเพื่อระบุสถานะของ Demuxer

WebPDemuxer WebPDemuxPartial(const WebPData* data, WebPDemuxState* state);

แสดงผล NULL ในกรณีที่เกิดข้อผิดพลาดหรือมีข้อมูลไม่เพียงพอที่จะเริ่มการแยกวิเคราะห์ และออบเจ็กต์ WebPDemuxer เมื่อแยกวิเคราะห์สำเร็จ

โปรดทราบว่า WebPDemuxer จะเก็บตัวชี้ภายในไปยังส่วนหน่วยความจำ data หากข้อมูลนี้มีความผันผวน ควรลบออบเจ็กต์ Demuxer (โดยการเรียกใช้ WebPDemuxDelete()) และเรียก WebPDemuxPartial() อีกครั้งในข้อมูลใหม่ ซึ่งโดยทั่วไปจะเป็นการดำเนินการที่มีราคาไม่แพง

WebPDemuxDelete()

เพิ่มหน่วยความจำที่เกี่ยวข้องกับ dmux

void WebPDemuxDelete(WebPDemuxer* dmux);

การดึงข้อมูล/ข้อมูล

typedef enum WebPFormatFeature {
  WEBP_FF_FORMAT_FLAGS,      // bit-wise combination of WebPFeatureFlags
                             // corresponding to the 'VP8X' chunk (if present).
  WEBP_FF_CANVAS_WIDTH,
  WEBP_FF_CANVAS_HEIGHT,
  WEBP_FF_LOOP_COUNT,        // only relevant for animated file
  WEBP_FF_BACKGROUND_COLOR,  // idem.
  WEBP_FF_FRAME_COUNT        // Number of frames present in the demux object.
                             // In case of a partial demux, this is the number
                             // of frames seen so far, with the last frame
                             // possibly being partial.
} WebPFormatFeature;

WebPDemuxGetI()

รับค่า feature จาก dmux

uint32_t WebPDemuxGetI(const WebPDemuxer* dmux, WebPFormatFeature feature);

หมายเหตุ: ค่าจะใช้ได้เฉพาะเมื่อใช้ WebPDemux() หรือ WebPDemuxPartial() แสดงผลสถานะ > WEBP_DEMUX_PARSING_HEADER

การทำซ้ำเฟรม

struct WebPIterator {
  int frame_num;
  int num_frames;          // equivalent to WEBP_FF_FRAME_COUNT.
  int fragment_num;
  int num_fragments;
  int x_offset, y_offset;  // offset relative to the canvas.
  int width, height;       // dimensions of this frame or fragment.
  int duration;            // display duration in milliseconds.
  WebPMuxAnimDispose dispose_method;  // dispose method for the frame.
  int complete;   // true if 'fragment' contains a full frame. partial images
                  // may still be decoded with the WebP incremental decoder.
  WebPData fragment;  // The frame or fragment given by 'frame_num' and
                      // 'fragment_num'.
  int has_alpha;      // True if the frame or fragment contains transparency.
  WebPMuxAnimBlend blend_method;  // Blend operation for the frame.
};

WebPDemuxGetFrame()

เรียกข้อมูล frame_number ของเฟรมจาก dmux

int WebPDemuxGetFrame(const WebPDemuxer* dmux,
                      int frame_number,
                      WebPIterator* iter);

iter->fragment ชี้ไปยังส่วนย่อยแรกเมื่อกลับมาจากฟังก์ชันนี้ คุณแยกส่วนย่อยแต่ละส่วนโดยใช้ WebPDemuxSelectFragment() ได้ การตั้งค่า frame_number ที่เท่ากับ 0 จะแสดงผลเฟรมสุดท้ายของรูปภาพ

แสดงผลเป็น "เท็จ" หาก dmux เป็น NULL หรือไม่แสดงเฟรม frame_number เรียกใช้ WebPDemuxReleaseIterator() เมื่อการใช้ตัววนซ้ำเสร็จสมบูรณ์

หมายเหตุ: dmux ต้องคงอยู่ตลอดอายุของ iter

WebPDemuxNextFrame() WebPDemuxPrevFrame()

ตั้งค่า iter->fragment ให้ชี้ไปที่เฟรมถัดไป (iter->fragment + 1) หรือ เฟรมก่อนหน้า (iter->fragment - 1) โดยฟังก์ชันเหล่านี้จะไม่วนซ้ำ

int WebPDemuxNextFrame(WebPIterator* iter);
int WebPDemuxPrevFrame(WebPIterator* iter);

จะแสดงผลเป็น "จริง" เมื่อประสบความสำเร็จ แต่หากไม่เป็น "เท็จ"

WebPDemuxSelectFragment()

ตั้งค่า iter->fragment ให้แสดงหมายเลขแฟรกเมนต์ iter->fragment

int WebPDemuxSelectFragment(WebPIterator* iter, int fragment_num);

แสดงผลเป็น "จริง" หากมีส่วนย่อย fragment_num หรือเป็น false หากไม่เป็นเช่นนั้น

WebPDemuxReleaseIterator()

ปล่อยความทรงจำที่เชื่อมโยงกับ iter

void WebPDemuxReleaseIterator(WebPIterator* iter);

ต้องเรียกใช้ก่อนที่จะมีการเรียกไปยัง WebPDemuxGetChunk() ในอุปกรณ์เดียวกัน นอกจากนี้ จะต้องถูกเรียกใช้ก่อนที่จะทำลาย WebPDemuxer ที่เชื่อมโยงด้วย WebPDemuxDelete()

การทำซ้ำแบบ Chunk

struct WebPChunkIterator {
  // The current and total number of chunks with the fourcc given to
  // WebPDemuxGetChunk().
  int chunk_num;
  int num_chunks;
  WebPData chunk;    // The payload of the chunk.
};

WebPDemuxGetChunk()

เรียกข้อมูลอินสแตนซ์ chunk_number ของกลุ่มที่มีรหัส fourcc จาก dmux

int WebPDemuxGetChunk(const WebPDemuxer* dmux,
                      const char fourcc[4], int chunk_number,
                      WebPChunkIterator* iter);

fourcc คืออาร์เรย์อักขระที่มี 4cc ของกลุ่มที่จะส่งคืน เช่น "ICCP", "XMP ", "EXIF" ฯลฯ

การตั้งค่า chunk_number ให้เท่ากับ 0 จะแสดงผลกลุ่มสุดท้ายในชุด

แสดงผลเป็น "จริง" หากพบกลุ่มดังกล่าว หากไม่จะแสดงผลเป็น "เท็จ" เพย์โหลดกลุ่มที่เกี่ยวข้องกับรูปภาพจะเข้าถึงได้ผ่าน WebPDemuxGetFrame() และฟังก์ชันที่เกี่ยวข้อง เรียกใช้ WebPDemuxReleaseChunkIterator() เมื่อการใช้ตัววนซ้ำเสร็จสมบูรณ์

หมายเหตุ: dmux ต้องคงอยู่ตลอดอายุของตัววนซ้ำ

WebPDemuxNextChunk() WebPDemuxPrevChunk()

ตั้งค่า iter->chunk ให้ชี้ไปที่กลุ่มถัดไป (iter->chunk_num + 1) หรือ ช่องก่อนหน้า (iter->chunk_num - 1) โดยฟังก์ชันเหล่านี้จะไม่วนซ้ำ

int WebPDemuxNextChunk(WebPChunkIterator* iter);
int WebPDemuxPrevChunk(WebPChunkIterator* iter);

จะแสดงผลเป็น "จริง" เมื่อประสบความสำเร็จ แต่หากไม่เป็น "เท็จ"

WebPDemuxReleaseChunkIterator()

ปล่อยความทรงจำที่เชื่อมโยงกับ iter

void WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter);

ต้องเรียกใช้ก่อนทำลาย WebPDemuxer ที่เชื่อมโยงด้วย WebPDemuxDelete()

API ของ WebPAnimDecoder

API นี้อนุญาตให้ถอดรหัส (อาจ) ภาพเคลื่อนไหว WebP ได้

ตัวอย่างโค้ด

WebPAnimDecoderOptions dec_options;
WebPAnimDecoderOptionsInit(&dec_options);
// Tune 'dec_options' as needed.
WebPAnimDecoder* dec = WebPAnimDecoderNew(webp_data, &dec_options);
WebPAnimInfo anim_info;
WebPAnimDecoderGetInfo(dec, &anim_info);
for (uint32_t i = 0; i < anim_info.loop_count; ++i) {
  while (WebPAnimDecoderHasMoreFrames(dec)) {
    uint8_t* buf;
    int timestamp;
    WebPAnimDecoderGetNext(dec, &buf, &timestamp);
    // ... (Render 'buf' based on 'timestamp').
    // ... (Do NOT free 'buf', as it is owned by 'dec').
  }
  WebPAnimDecoderReset(dec);
}
const WebPDemuxer* demuxer = WebPAnimDecoderGetDemuxer(dec);
// ... (Do something using 'demuxer'; e.g. get EXIF/XMP/ICC data).
WebPAnimDecoderDelete(dec);

typedef struct WebPAnimDecoder WebPAnimDecoder;  // Main opaque object.

ตัวเลือกทั่วโลก

struct WebPAnimDecoderOptions {
  // Output colorspace. Only the following modes are supported:
  // MODE_RGBA, MODE_BGRA, MODE_rgbA and MODE_bgrA.
  WEBP_CSP_MODE color_mode;
  int use_threads;           // If true, use multi-threaded decoding.
};

WebPAnimDecoderOptionsInit()

ควรถูกเรียกเสมอ เพื่อเริ่มต้นโครงสร้าง WebPAnimDecoderOptions ใหม่ก่อนการแก้ไข แสดงผลเป็น "เท็จ" ในกรณีที่เวอร์ชันไม่ตรงกัน WebPAnimDecoderOptionsInit() ต้องเสร็จสมบูรณ์ก่อนใช้ออบเจ็กต์ dec_options

พารามิเตอร์

dec_options -- (เข้า/ออก) ตัวเลือกที่ใช้สำหรับถอดรหัสภาพเคลื่อนไหว

การคืนสินค้า
เป็นจริงบนความสำเร็จ
int WebPAnimDecoderOptionsInit(
    WebPAnimDecoderOptions* dec_options);

WebPAnimDecoderNew()

สร้างและเริ่มต้นออบเจ็กต์ WebPAnimDecoder

พารามิเตอร์

webp_data -- (ใน) บิตสตรีมของ WebP โดยคงไม่มีการเปลี่ยนแปลงในระหว่างอายุการใช้งานของออบเจ็กต์ WebPAnimDecoder เอาต์พุต

dec_options -- (ใน) ตัวเลือกการถอดรหัส สามารถส่ง NULL เพื่อเลือกค่าเริ่มต้นที่เหมาะสม (โดยเฉพาะอย่างยิ่ง ระบบจะเลือกโหมดสี MODE_RGBA)

การคืนสินค้า

ตัวชี้ไปยังออบเจ็กต์ WebPAnimDecoder ที่สร้างขึ้นใหม่ หรือ NULL ในกรณีที่มีข้อผิดพลาดในการแยกวิเคราะห์ ตัวเลือกที่ไม่ถูกต้อง หรือข้อผิดพลาดของหน่วยความจํา

WebPAnimDecoder* WebPAnimDecoderNew(
    const WebPData* webp_data, const WebPAnimDecoderOptions* dec_options);

ข้อมูลส่วนกลางเกี่ยวกับภาพเคลื่อนไหว

struct WebPAnimInfo {
  uint32_t canvas_width;
  uint32_t canvas_height;
  uint32_t loop_count;
  uint32_t bgcolor;
  uint32_t frame_count;
};

WebPAnimDecoderGetInfo()

ดูข้อมูลทั่วโลกเกี่ยวกับภาพเคลื่อนไหว

พารามิเตอร์

dec -- (ใน) อินสแตนซ์ตัวถอดรหัสเพื่อรับข้อมูล

info -- (ออก) ข้อมูลส่วนกลางที่ดึงมาจากภาพเคลื่อนไหว

การคืนสินค้า

จริงอยู่ที่ความสำเร็จ

int WebPAnimDecoderGetInfo(const WebPAnimDecoder* dec,
                           WebPAnimInfo* info);

WebPAnimDecoderGetNext()

ดึงข้อมูลเฟรมถัดไปจาก dec ตามตัวเลือกที่จัดให้กับ WebPAnimDecoderNew() ซึ่งจะเป็น Canvas ขนาด canvas_width * 4 * canvas_height ที่สร้างขึ้นใหม่ทั้งหมด ไม่ใช่แค่สี่เหลี่ยมผืนผ้าย่อยๆ ของเฟรม บัฟเฟอร์ buf ที่แสดงผลจะใช้ได้จนกว่าจะมีการเรียก WebPAnimDecoderGetNext(), WebPAnimDecoderReset() หรือ WebPAnimDecoderDelete() ครั้งถัดไป

พารามิเตอร์

dec -- (เข้า/ออก) อินสแตนซ์ตัวถอดรหัสซึ่งจะดึงข้อมูลเฟรมถัดไป

buf -- (ออก) เฟรมที่ถอดรหัส

timestamp -- (ออก) การประทับเวลาของเฟรมเป็นมิลลิวินาที

การคืนสินค้า

เท็จหากอาร์กิวเมนต์ใดเป็นค่า NULL หรือหากมีข้อผิดพลาดในการแยกวิเคราะห์หรือการถอดรหัส หรือหากไม่มีเฟรมอีก ไม่เช่นนั้น จะแสดงค่า "จริง"

int WebPAnimDecoderGetNext(WebPAnimDecoder* dec,
                           uint8_t** buf, int* timestamp);

WebPAnimDecoderHasMoreFrames()

ตรวจดูว่ามีเฟรมเหลือให้ถอดรหัสอีกไหม

พารามิเตอร์
dec -- (ใน) อินสแตนซ์ตัวถอดรหัสที่ต้องตรวจสอบ
การคืนสินค้า
เป็นจริงหาก dec ไม่ใช่ NULL และยังไม่มีการถอดรหัสบางเฟรม หากไม่ จะแสดงค่า "เท็จ"
int WebPAnimDecoderHasMoreFrames(const WebPAnimDecoder* dec);

WebPAnimDecoderReset()

รีเซ็ตออบเจ็กต์ WebPAnimDecoder เพื่อให้การเรียกใช้ครั้งถัดไปที่ WebPAnimDecoderGetNext() รีสตาร์ทการถอดรหัสจากเฟรมที่ 1 ซึ่งจะเป็นประโยชน์เมื่อต้องถอดรหัสเฟรมทั้งหมดหลายครั้ง (เช่น info.loop_count ครั้ง) โดยไม่ทำลายและสร้างออบเจ็กต์ dec ใหม่

พารามิเตอร์
dec -- (เข้า/ออก) อินสแตนซ์ตัวถอดรหัสที่จะรีเซ็ต
void WebPAnimDecoderReset(WebPAnimDecoder* dec);

WebPAnimDecoderGetDemuxer()

จับออบเจ็กต์ Demuxer ภายใน

การรับออบเจ็กต์ Demuxer จะมีประโยชน์หากต้องการใช้งานการดำเนินการที่ใช้ได้ผ่าน Demuxer เท่านั้น เช่น การรับข้อมูลเมตา XMP/EXIF/ICC ออบเจ็กต์ Demuxer ที่แสดงผลจะเป็นของ dec และจะใช้ได้จนกว่าจะมีการเรียกใช้ WebPAnimDecoderDelete() ครั้งถัดไป

พารามิเตอร์
dec -- (ใน) อินสแตนซ์ตัวถอดรหัสที่จะดึงออบเจ็กต์ Demuxer
const WebPDemuxer* WebPAnimDecoderGetDemuxer(const WebPAnimDecoder* dec);

WebPAnimDecoderDelete()

ลบออบเจ็กต์ WebPAnimDecoder

พารามิเตอร์
dec -- (เข้า/ออก) อินสแตนซ์ตัวถอดรหัสที่จะถูกลบ
การคืนสินค้า
จริงในความสำเร็จ
void WebPAnimDecoderDelete(WebPAnimDecoder* dec);

ประเภทข้อมูลทั่วไป

Enum

typedef enum WebPFeatureFlags {
  FRAGMENTS_FLAG  = 0x00000001,
  ANIMATION_FLAG  = 0x00000002,
  XMP_FLAG        = 0x00000004,
  EXIF_FLAG       = 0x00000008,
  ALPHA_FLAG      = 0x00000010,
  ICCP_FLAG       = 0x00000020
} WebPFeatureFlags;

// Dispose method (animation only). Indicates how the area used by the current
// frame is to be treated before rendering the next frame on the canvas.
typedef enum WebPMuxAnimDispose {
  WEBP_MUX_DISPOSE_NONE,       // Do not dispose.
  WEBP_MUX_DISPOSE_BACKGROUND  // Dispose to background color.
} WebPMuxAnimDispose;

// Blend operation (animation only). Indicates how transparent pixels of the
// current frame are blended with those of the previous canvas.
typedef enum WebPMuxAnimBlend {
  WEBP_MUX_BLEND,              // Blend.
  WEBP_MUX_NO_BLEND            // Do not blend.
} WebPMuxAnimBlend;

WebPDataInit()

เริ่มต้นเนื้อหาของออบเจ็กต์ webp_data ด้วยค่าเริ่มต้น

void WebPDataInit(WebPData* webp_data);

WebPDataClear()

ล้างเนื้อหาของออบเจ็กต์ webp_data โดยการเรียกใช้ free() ไม่ดีลตำแหน่งออบเจ็กต์เอง

void WebPDataClear(WebPData* webp_data);

WebPDataCopy()

จัดสรรพื้นที่เก็บข้อมูลที่จำเป็นสำหรับ dst และคัดลอกเนื้อหาของ src แสดงค่า "จริง" จากความสำเร็จ

int WebPDataCopy(const WebPData* src, WebPData* dst);