การจัดการคอนเทนเนอร์ 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 หรือบิตสตรีมจะเป็น NULLWEBP_MUX_MEMORY_ERROR
-- เมื่อเกิดข้อผิดพลาดในการจัดสรรหน่วยความจำWEBP_MUX_OK
-- เกี่ยวกับความสำเร็จ
WebPMuxPushFrame()
เพิ่มเฟรมที่ส่วนท้ายของวัตถุ Mux
WebPMuxError WebPMuxPushFrame(WebPMux* mux,
const WebPMuxFrameInfo* frame,
int copy_data);
Notes:
- เฟรม.id ควรเป็นค่าใดค่าหนึ่งใน
WEBP_CHUNK_ANMF
หรือWEBP_CHUNK_FRGM
- สำหรับการตั้งค่ารูปภาพที่ไม่ใช่การแยกส่วนแบบไม่เคลื่อนไหว ให้ใช้
WebPMuxSetImage()
แทน - ประเภทของเฟรมที่พุชต้องเหมือนกับเฟรมใน Mux
- เนื่องจาก 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 ในออบเจ็กต์ MuxWEBP_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 มีค่าเป็น NULLWEBP_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 หรือพารามิเตอร์เป็น NULLWEBP_MUX_MEMORY_ERROR
-- เมื่อเกิดข้อผิดพลาดในการจัดสรรหน่วยความจำWEBP_MUX_OK
-- เกี่ยวกับความสำเร็จ
WebPMuxGetAnimationParams()
รับพารามิเตอร์ภาพเคลื่อนไหวจากออบเจ็กต์ Mux
WebPMuxError WebPMuxGetAnimationParams(const WebPMux* mux,
WebPMuxAnimParams* params);
- พารามิเตอร์
mux -- (ใน) ออบเจ็กต์ที่ดึงพารามิเตอร์ภาพเคลื่อนไหวมา
params -- พารามิเตอร์ภาพเคลื่อนไหว (ออก) ที่ดึงจากกลุ่ม ANIM
- การคืนสินค้า
WEBP_MUX_INVALID_ARGUMENT
-- หาก Mux หรือพารามิเตอร์เป็น NULLWEBP_MUX_NOT_FOUND
-- หากไม่มีกลุ่ม ANIM ในออบเจ็กต์ MuxWEBP_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, ความกว้างหรือความสูงมีค่าเป็น NULLWEBP_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 หรือแฟล็กมีค่าเป็น NULLWEBP_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, ×tamp);
// ... (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);