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

การจัดการคอนเทนเนอร์ RIFF สำหรับอิมเมจ WebP

API ของ Mux

อนุญาตการจัดการอิมเมจคอนเทนเนอร์ 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);

ชีวิตของวัตถุ Mux

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 -- ค่า (in) 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 -- (in) อาร์เรย์อักขระที่มี 4cc ของค่าที่กำหนด chunk; เช่น "ICCP", "XMP", "EXIF" อื่นๆ

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

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

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

WEBP_MUX_INVALID_ARGUMENT -- หาก mux, 4cc หรือ chunk_data เป็นค่า NULL หรือหาก 4cc สอดคล้องกับกลุ่มรูปภาพ

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

WEBP_MUX_OK -- สำเร็จแล้ว

WebPMuxGetChunk()

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

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

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

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

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

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

WEBP_MUX_INVALID_ARGUMENT -- หาก mux, 4cc หรือ chunk_data เป็นค่า NULL หรือหาก 4cc สอดคล้องกับกลุ่มรูปภาพ

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

WEBP_MUX_OK -- สำเร็จแล้ว

WebPMuxDeleteChunk()

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

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

mux -- (เข้า/ออก) ที่จะลบกลุ่มข้อมูล

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

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

WEBP_MUX_INVALID_ARGUMENT -- หาก mux หรือ 4cc เป็นค่า NULL หรือ 4cc จะสอดคล้องกับกลุ่มรูปภาพ

WEBP_MUX_NOT_FOUND -- หาก Mux ไม่มีกลุ่มที่มี 4cc

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 -- (in) อาจเป็น VP8/VP8L บิตสตรีมดิบหรือ WebP แบบภาพเดียว ไฟล์ (ไม่เคลื่อนไหวและไม่แยกส่วน)

copy_data -- ค่า (in) 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);

หมายเหตุ

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

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

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

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

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

WEBP_MUX_INVALID_ARGUMENT -- หาก Mux หรือเฟรมเป็น NULL หรือเนื้อหาของ 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 -- (in) ออบเจ็กต์ที่จะดึงข้อมูล

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

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

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

WEBP_MUX_INVALID_ARGUMENT -- if mux or frame is NULL.

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 -- if mux is 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 -- (in) พารามิเตอร์ภาพเคลื่อนไหว

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

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

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

WEBP_MUX_OK -- สำเร็จแล้ว

WebPMuxGetAnimationParams()

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

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

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

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 -- ออบเจ็กต์ (in) ที่จะดึงข้อมูลขนาด Canvas

width -- (ออก) ความกว้างของผ้าใบ

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

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

WEBP_MUX_INVALID_ARGUMENT -- if mux, width or height is 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 -- (in) ออบเจ็กต์ที่จะดึงข้อมูลจุดสนใจ

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

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

WEBP_MUX_INVALID_ARGUMENT -- if mux or flags is 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 -- (in) ออบเจ็กต์ที่จะดึงข้อมูล

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

num_elements -- จำนวนกลุ่มที่มีรหัสกลุ่มที่ระบุ (ออก)

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

WEBP_MUX_INVALID_ARGUMENT -- if mux, or num_elements is NULL.

WEBP_MUX_OK -- สำเร็จแล้ว

WebPMuxAssemble()

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

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

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

พารามิเตอร์

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

assembled_data -- (เอาออก) ข้อมูล WebP ที่ประกอบเข้าด้วยกัน

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

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

WEBP_MUX_INVALID_ARGUMENT -- if mux or assembled_data is NULL.

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 -- (in) ตัวเลือกการเข้ารหัส สามารถส่งผ่าน 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 จะเก็บตัวชี้ภายในไปยังกลุ่มหน่วยความจำข้อมูล ถ้า ข้อมูลนี้มีความผันผวน ออบเจ็กต์ 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-&gt;fragment จะชี้ไปที่ส่วนย่อยแรกเมื่อส่งกลับจากฟังก์ชันนี้ สามารถแยกส่วนย่อยโดยใช้ WebPDemuxSelectFragment() การเกริ่นนำ frame_number ที่เท่ากับ 0 จะแสดงผลเฟรมสุดท้ายของรูปภาพ

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

หมายเหตุ: dmux จะต้องคงอยู่ตลอดอายุการใช้งานของ iter

WebPDemuxNextFrame() WebPDemuxPrevFrame()

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

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

แสดงผลเป็น "จริง" เมื่อสำเร็จ "เท็จ" หากไม่เป็นเช่นนั้น

WebPDemuxSelectFragment()

ตั้งค่า iter-&gt;fragment เพื่อแสดงหมายเลขส่วนย่อย iter-&gt;fragment

int WebPDemuxSelectFragment(WebPIterator* iter, int fragment_num);

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

WebPDemuxReleaseIterator()

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

void WebPDemuxReleaseIterator(WebPIterator* iter);

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

การทำซ้ำเป็นกลุ่ม

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->กลุ่มให้ชี้ไปที่รายการถัดไป (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_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() จะเริ่มถอดรหัสอีกครั้ง ตั้งแต่เฟรมแรก การดำเนินการนี้จะเป็นประโยชน์เมื่อต้องถอดรหัสเฟรมทั้งหมด หลายครั้ง (เช่น 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);