Dokumentasi API Container WebP

Manipulasi penampung RIFF untuk gambar WebP.

API Mux

Memungkinkan manipulasi gambar penampung WebP, yang berisi fitur seperti profil warna, metadata, animasi, dan gambar terfragmentasi.

Contoh Kode

Membuat MUX dengan Data Gambar, Profil Warna, dan Metadata 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);

Mendapatkan Data Profil Gambar dan Warna dari File 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);

Kehidupan Objek 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()

Menampilkan nomor versi library mux, yang dikemas dalam heksadesimal menggunakan 8 bit untuk setiap besar/kecil/revisi. Misalnya, v2.5.7 adalah 0x020507.

int WebPGetMuxVersion(void);

WebPMuxNew()

Membuat objek mux kosong.

WebPMux* WebPMuxNew(void);
Hasil
Pointer ke objek mux kosong yang baru dibuat.

WebPMuxDelete()

Menghapus objek mux.

void WebPMuxDelete(WebPMux* mux);
Parameter
mux -- (masuk/keluar) objek yang akan dihapus

Pembuatan Mux

WebPMuxCreate()

Membuat objek mux dari data mentah yang diberikan dalam format WebP RIFF.

WebPMux* WebPMuxCreate(const WebPData* bitstream, int copy_data);
Parameter

bitstream -- (di) data bitstream dalam format WebP RIFF

copy_data -- (di) nilai 1 menunjukkan data yang diberikan AKAN disalin ke mux dan nilai 0 menunjukkan data TIDAK akan disalin ke objek mux.

Hasil

Pointer ke objek mux yang dibuat dari data tertentu - saat berhasil.

NULL -- Jika terjadi error memori atau data yang tidak valid.

Potongan Non-Gambar

WebPMuxSetChunk()

Menambahkan potongan dengan id fourcc dan data chunk_data di objek mux. Setiap bagian yang ada dengan ID yang sama akan dihapus.

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

Catatan: Hanya potongan yang tidak terkait dengan gambar yang harus dikelola melalui API potongan. (Potongan terkait gambar adalah: "ANMF", "FRGM", "VP8 ", "VP8L" dan "ALPH"). Untuk menambahkan, mendapatkan, dan menghapus gambar, gunakan WebPMuxSetImage(), WebPMuxPushFrame(), WebPMuxGetFrame(), dan WebPMuxDeleteFrame().

Parameter

mux -- (masuk/keluar) objek yang akan ditambahi potongan

fourcc -- (di) array karakter yang berisi empat cc bagian yang ditentukan; misalnya, "ICCP", "XMP ", "EXIF", dll.

chunk_data -- (di) potongan data yang akan ditambahkan

copy_data -- (di) nilai 1 menunjukkan data yang diberikan AKAN disalin ke mux dan nilai 0 menunjukkan data TIDAK akan disalin ke objek mux.

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux,fourcc, atau chunk_data adalah NULL atau jikafourcc terkait dengan potongan gambar.

WEBP_MUX_MEMORY_ERROR -- pada error alokasi memori.

WEBP_MUX_OK -- saat berhasil.

WebPMuxGetChunk()

Mendapatkan referensi ke data potongan dengan id fourcc dalam objek mux. Penelepon TIDAK boleh membebaskan data yang ditampilkan.

WebPMuxError WebPMuxGetChunk(const WebPMux* mux,
                             const char fourcc[4],
                             WebPData* chunk_data);
Parameter

mux -- (in) objek tempat data potongan akan diambil

fourcc -- (di) array karakter yang berisi empatcc dari potongan tersebut; misalnya, "ICCP", "XMP ", "EXIF", dll.

chunk_data -- (out) menampilkan potongan data

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux,fourcc, atau chunk_data adalah NULL atau jikafourcc terkait dengan potongan gambar.

WEBP_MUX_NOT_FOUND -- Jika mux tidak berisi potongan dengan ID yang diberikan.

WEBP_MUX_OK -- saat berhasil.

WebPMuxDeleteChunk()

Menghapus potongan dengan fourcc yang ditentukan dari objek mux.

WebPMuxError WebPMuxDeleteChunk(WebPMux* mux, const char fourcc[4]);
Parameter

mux -- (masuk/keluar) objek tempat potongan akan dihapus

fourcc -- (di) array karakter yang berisi empatcc dari potongan tersebut; misalnya, "ICCP", "XMP ", "EXIF", dll.

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux atau empatcc adalah NULL atau jika empatcc terkait dengan sebuah potongan gambar.

WEBP_MUX_NOT_FOUND -- Jika mux tidak berisi potongan dengan empatcc yang ditentukan.

WEBP_MUX_OK -- saat berhasil.

Gambar

Mengenkapsulasi data tentang satu frame/fragmen.

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()

Menetapkan gambar (non-animasi dan tidak terfragmentasi) di objek mux. Catatan: Semua gambar yang ada (termasuk frame/fragmen) akan dihapus.

WebPMuxError WebPMuxSetImage(WebPMux* mux,
                             const WebPData* bitstream,
                             int copy_data);
Parameter

mux -- (masuk/keluar) tempat gambar akan ditetapkan

bitstream -- (di) dapat berupa bitstream VP8/VP8L mentah atau file WebP gambar tunggal (non-animasi dan tidak terfragmentasi)

copy_data -- (di) nilai 1 menunjukkan data yang diberikan AKAN disalin ke mux dan nilai 0 menunjukkan data TIDAK akan disalin ke objek mux.

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux adalah NULL atau bitstream adalah NULL.

WEBP_MUX_MEMORY_ERROR -- pada error alokasi memori.

WEBP_MUX_OK -- saat berhasil.

WebPMuxPushFrame()

Menambahkan frame di akhir objek mux.

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

Notes:

  1. frame.id harus berupa salah satu dari WEBP_CHUNK_ANMF atau WEBP_CHUNK_FRGM
  2. Untuk menetapkan gambar non-fragmen non-animasi, gunakan WebPMuxSetImage().
  3. Jenis frame yang didorong harus sama dengan frame di mux.
  4. Karena WebP hanya mendukung offset genap, setiap offset aneh akan diikat ke lokasi yang genap menggunakan: offset &= ~1
Parameter

mux -- (masuk/keluar) tempat frame akan ditambahkan

frame -- (dalam) data frame.

copy_data -- (di) nilai 1 menunjukkan data yang diberikan AKAN disalin ke mux dan nilai 0 menunjukkan data TIDAK akan disalin ke objek mux.

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux atau frame NULL atau jika konten frame tidak valid.

WEBP_MUX_MEMORY_ERROR -- pada error alokasi memori.

WEBP_MUX_OK -- saat berhasil.

WEBP_MUX_MEMORY_ERROR -- pada error alokasi memori.

WebPMuxGetFrame()

Mendapatkan frame ke-n dari objek mux. Konten frame->bitstream dialokasikan menggunakan malloc(), dan TIDAK dimiliki oleh objek mux. Izin HARUS dibatalkan alokasinya oleh pemanggil dengan memanggil WebPDataClear(). nth=0 memiliki arti khusus - posisi terakhir.

WebPMuxError WebPMuxGetFrame(const WebPMux* mux,
                             uint32_t nth,
                             WebPMuxFrameInfo* frame);
Parameter

mux -- (di) objek tempat info diambil

nth -- (in) indeks frame dalam objek mux

frame -- (keluar) data dari frame yang ditampilkan

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux atau frame adalah NULL.

WEBP_MUX_NOT_FOUND -- jika ada kurang dari frame ke-n dalam objek mux.

WEBP_MUX_BAD_DATA -- jika potongan frame ke-n di mux tidak valid.

WEBP_MUX_OK -- saat berhasil.

WebPMuxDeleteFrame()

Menghapus frame dari objek mux. nth=0 memiliki arti khusus - posisi terakhir.

WebPMuxError WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth);
Parameter

mux -- (masuk/keluar) tempat frame akan dihapus

nth -- (di) Posisi frame yang akan dihapus

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux bernilai NULL.

WEBP_MUX_NOT_FOUND -- Jika ada kurang dari frame ke-n di objek mux sebelum penghapusan.

WEBP_MUX_OK -- saat berhasil.

Animasi

Parameter Animasi

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()

Menetapkan parameter animasi di objek mux. Setiap potongan ANIM yang ada akan dihapus.

WebPMuxError WebPMuxSetAnimationParams(WebPMux* mux,
                                       const WebPMuxAnimParams* params);
Parameter

mux -- (masuk/keluar) objek tempat potongan ANIM ditetapkan/ditambahkan

params -- (in) parameter animasi.

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux atau parameter adalah NULL.

WEBP_MUX_MEMORY_ERROR -- pada error alokasi memori.

WEBP_MUX_OK -- saat berhasil.

WebPMuxGetAnimationParams()

Mendapatkan parameter animasi dari objek mux.

WebPMuxError WebPMuxGetAnimationParams(const WebPMux* mux,
                                       WebPMuxAnimParams* params);
Parameter

mux -- (di) objek tempat parameter animasi yang akan diambil

params -- (out) parameter animasi yang diekstrak dari potongan ANIM

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux atau parameter adalah NULL.

WEBP_MUX_NOT_FOUND -- jika potongan ANIM tidak ada dalam objek mux.

WEBP_MUX_OK -- saat berhasil.

Utilitas Lain-Lain

WebPMuxGetCanvasSize()

Mendapatkan ukuran kanvas dari objek mux.

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

Catatan: Metode ini mengasumsikan bahwa potongan VP8X, jika ada, sudah yang terbaru. Artinya, objek mux belum diubah sejak panggilan terakhir ke WebPMuxAssemble() atau WebPMuxCreate().

Parameter

mux -- (dalam) objek tempat ukuran kanvas akan diambil

width -- (luar) lebar kanvas

height -- (luar) tinggi kanvas

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux, lebar, atau tinggi adalah NULL.

WEBP_MUX_BAD_DATA -- jika ukuran kanvas atau potongan VP8X/VP8/VP8L tidak valid.

WEBP_MUX_OK -- saat berhasil.

WebPMuxGetFeatures()

Mendapatkan tombol fitur dari objek mux.

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

Catatan: Metode ini mengasumsikan bahwa potongan VP8X, jika ada, sudah yang terbaru. Artinya, objek mux belum diubah sejak panggilan terakhir ke WebPMuxAssemble() atau WebPMuxCreate().

Parameter

mux -- (dalam) objek tempat fitur akan diambil

flags -- (keluar) flag yang menentukan fitur yang ada dalam objek mux. Ini akan berupa OR dari berbagai nilai tanda. Enum WebPFeatureFlags dapat digunakan untuk menguji setiap nilai flag.

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux atau flag adalah NULL.

WEBP_MUX_BAD_DATA -- jika ukuran kanvas atau potongan VP8X/VP8/VP8L tidak valid.

WEBP_MUX_OK -- saat berhasil.

WebPMuxNumChunks()

Mendapatkan jumlah potongan yang memiliki nilai tag yang diberikan dalam objek mux.

WebPMuxError WebPMuxNumChunks(const WebPMux* mux,
                              WebPChunkId id,
                              int* num_elements);
Parameter

mux -- (di) objek tempat info diambil

id -- (in) id potongan yang menentukan jenis potongan

num_elements -- (keluar) jumlah potongan dengan id potongan yang diberikan

Hasil

WEBP_MUX_INVALID_ARGUMENT -- jika mux, atau num_element adalah NULL.

WEBP_MUX_OK -- saat berhasil.

WebPMuxAssemble()

Mengumpulkan semua bagian dalam format WebP RIFF dan menampilkan assembled_data. Fungsi ini juga memvalidasi objek mux.

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

Catatan: Konten assembled_data akan diabaikan dan ditimpa. Selain itu, konten assembled_data dialokasikan menggunakan malloc(), dan TIDAK dimiliki oleh objek mux. Izin harus dibatalkan alokasinya oleh pemanggil dengan memanggil WebPDataClear().

Parameter

mux -- (masuk/keluar) yang potongannya akan dirangkai

assembled_data -- (keluar) data WebP yang dirangkai

Hasil

WEBP_MUX_BAD_DATA -- jika objek mux tidak valid.

WEBP_MUX_INVALID_ARGUMENT -- jika mux atau assembled_data adalah NULL.

WEBP_MUX_MEMORY_ERROR -- pada error alokasi memori.

WEBP_MUX_OK -- saat berhasil.

API WebPAnimEncoder

API ini memungkinkan encoding (mungkin) gambar WebP animasi.

Contoh Kode

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.

Opsi Global

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()

Harus selalu dipanggil untuk menginisialisasi struktur WebPAnimEncoderOptions baru sebelum modifikasi. Menampilkan nilai salah jika versi tidak cocok. WebPAnimEncoderOptionsInit() harus sudah berhasil sebelum menggunakan objek enc_options.

Parameter
enc_options -- opsi (masuk/keluar) yang digunakan untuk encoding animasi
Hasil
Tepat pada kesuksesan.
int WebPAnimEncoderOptionsInit(
    WebPAnimEncoderOptions* enc_options);

WebPAnimEncoderNew()

Membuat dan melakukan inisialisasi objek WebPAnimEncoder.

Parameter

width/height -- (in) lebar dan tinggi kanvas animasi.

enc_options -- (dalam) opsi encoding; dapat diteruskan NULL untuk memilih default yang wajar.

Hasil

Pointer ke objek WebPAnimEncoder yang baru dibuat, atau NULL jika terjadi error memori.

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

WebPAnimEncoderAdd()

Optimalkan frame yang diberikan untuk WebP, lakukan enkode, dan tambahkan ke objek WebPAnimEncoder.

Panggilan terakhir ke WebPAnimEncoderAdd harus dilakukan dengan frame = NULL, yang menunjukkan bahwa tidak ada lagi frame yang akan ditambahkan. Panggilan ini juga digunakan untuk menentukan durasi frame terakhir.

Parameter

enc -- (masuk/keluar) tempat frame akan ditambahkan.

frame -- (masuk/keluar) data frame dalam format ARGB atau YUV(A). Jika dalam format YUV(A), model akan dikonversi ke ARGB, yang akan menimbulkan kerugian kecil.

timestamp_ms -- (in) stempel waktu frame ini dalam milidetik. Durasi frame akan dihitung sebagai "stempel waktu frame berikutnya - stempel waktu frame ini". Oleh karena itu, stempel waktu harus dalam urutan tidak menurun.

config -- (dalam) opsi encoding; dapat diteruskan NULL untuk memilih default yang wajar.

Hasil

Jika error, menampilkan nilai salah (false) dan frame->error_code disetel dengan benar. Jika tidak, menampilkan nilai benar (true).

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

WebPAnimEncoderAssemble()

Kumpulkan semua frame yang telah ditambahkan sejauh ini ke dalam bitstream WebP. Panggilan ini harus diawali dengan panggilan ke WebPAnimEncoderAdd dengan frame = NULL. Jika tidak, durasi frame terakhir akan diperkirakan secara internal.

Parameter

enc -- (masuk/keluar) tempat frame disusun.

webp_data -- (out) bitstream WebP yang dihasilkan.

Hasil

Benar dalam kesuksesan.

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

WebPAnimEncoderGetError()

Mendapatkan string error yang sesuai dengan panggilan terbaru menggunakan enc. String yang ditampilkan dimiliki oleh enc dan hanya valid hingga panggilan berikutnya ke WebPAnimEncoderAdd() atau WebPAnimEncoderAssemble() atau WebPAnimEncoderDelete().

Parameter
enc -- (masuk/keluar) objek tempat string error akan diambil.
Hasil
NULL if enc is NULL. Jika tidak, string error akan ditampilkan jika panggilan terakhir ke enc mengalami error, atau string kosong jika panggilan terakhir berhasil.
const char* WebPAnimEncoderGetError(WebPAnimEncoder* enc);

WebPAnimEncoderDelete()

Menghapus objek WebPAnimEncoder.

Parameter
enc -- objek (masuk/keluar) yang akan dihapus
void WebPAnimEncoderDelete(WebPAnimEncoder* enc);

API Demux

Memungkinkan ekstraksi data gambar dan format yang diperluas dari file WebP.

Contoh Kode

Mengurangi Data WebP untuk Mengekstrak Semua Frames, Profil ICC, dan Metadata 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);

Kehidupan Objek 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()

Menampilkan nomor versi library demux, yang dikemas dalam heksadesimal menggunakan 8 bit untuk setiap utama/minor/revisi. Misalnya, v2.5.7 adalah 0x020507.

int WebPGetDemuxVersion(void);

WebPDemux()

Mengurai file WebP lengkap yang diberikan oleh data.

WebPDemuxer WebPDemux(const WebPData* data);

Menampilkan objek WebPDemuxer pada saat penguraian yang berhasil, NULL jika tidak.

WebPDemuxPartial()

Mengurai file WebP yang mungkin tidak lengkap yang diberikan oleh data. Jika state non-NULL, status tersebut akan ditetapkan untuk menunjukkan status demuxer.

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

Menampilkan NULL jika terjadi error atau jika data tidak cukup untuk memulai penguraian; dan objek WebPDemuxer pada saat penguraian berhasil.

Perhatikan bahwa WebPDemuxer menyimpan pointer internal ke segmen memori data. Jika data ini tidak stabil, objek demuxer harus dihapus (dengan memanggil WebPDemuxDelete()) dan WebPDemuxPartial() dipanggil lagi pada data baru. Hal ini biasanya merupakan operasi yang murah.

WebPDemuxDelete()

Mengosongkan memori yang terkait dengan dmux.

void WebPDemuxDelete(WebPDemuxer* dmux);

Ekstraksi Data/Informasi

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()

Dapatkan nilai feature dari dmux.

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

Catatan: Nilai hanya valid jika WebPDemux() digunakan atau WebPDemuxPartial() menampilkan status > WEBP_DEMUX_PARSING_HEADER.

Iterasi Frame

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()

Mengambil frame frame_number dari dmux.

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

iter->fragment akan mengarah ke fragmen pertama saat kembali dari fungsi ini. Masing-masing fragmen dapat diekstrak menggunakan WebPDemuxSelectFragment(). Menetapkan frame_number sama dengan 0 akan menampilkan frame terakhir dari gambar.

Menampilkan nilai salah jika dmux adalah NULL atau frame frame_number tidak ada. Panggil WebPDemuxReleaseIterator() saat penggunaan iterator selesai.

Catatan: dmux harus tetap ada selama iter digunakan.

WebPDemuxNextFrame(), WebPDemuxPrevFrame()

Menetapkan iter->fragment untuk mengarah ke frame berikutnya (iter->frame_num + 1) atau sebelumnya (iter->frame_num - 1). Fungsi ini tidak melakukan loop.

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

Menampilkan true jika berhasil, false jika tidak berhasil.

WebPDemuxSelectFragment()

Menetapkan iter->fragment untuk mencerminkan nomor fragmen fragment_num.

int WebPDemuxSelectFragment(WebPIterator* iter, int fragment_num);

Menampilkan true jika fragmen fragment_num ada, false jika tidak.

WebPDemuxReleaseIterator()

Melepaskan memori apa pun yang terkait dengan iter.

void WebPDemuxReleaseIterator(WebPIterator* iter);

Harus dipanggil sebelum panggilan berikutnya ke WebPDemuxGetChunk() pada iter yang sama. Selain itu, harus dipanggil sebelum menghancurkan WebPDemuxer terkait dengan WebPDemuxDelete().

Iterasi Potongan

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()

Mengambil instance chunk_number dari potongan dengan id fourcc dari dmux.

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

fourcc adalah array karakter yang berisi empatcc dari potongan yang akan ditampilkan, misalnya, "ICCP", "XMP ", "EXIF", dll.

Menetapkan chunk_number yang sama dengan 0 akan menampilkan potongan terakhir dalam satu set.

Menampilkan nilai benar jika potongan ditemukan, salah jika tidak. payload potongan terkait image diakses melalui WebPDemuxGetFrame() dan fungsi terkait. Panggil WebPDemuxReleaseChunkIterator() saat penggunaan iterator selesai.

Catatan: dmux harus tetap ada di sepanjang waktu iterator tersebut.

WebPDemuxNextChunk(), WebPDemuxPrevChunk()

Menetapkan iter->chunk untuk mengarah ke potongan berikutnya (iter->chunk_num + 1) atau sebelumnya (iter->chunk_num - 1). Fungsi ini tidak melakukan loop.

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

Menampilkan true jika berhasil, false jika tidak berhasil.

WebPDemuxReleaseChunkIterator()

Melepaskan memori apa pun yang terkait dengan iter.

void WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter);

Harus dipanggil sebelum menghancurkan WebPDemuxer terkait dengan WebPDemuxDelete().

API WebPAnimDecoder

API ini memungkinkan decoding (mungkin) gambar WebP animasi.

Contoh Kode

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.

Opsi Global

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()

Harus selalu dipanggil, untuk menginisialisasi struktur WebPAnimDecoderOptions baru sebelum modifikasi. Menampilkan nilai salah jika versi tidak cocok. WebPAnimDecoderOptionsInit() harus sudah berhasil sebelum menggunakan objek dec_options.

Parameter

dec_options -- opsi (masuk/keluar) yang digunakan untuk mendekode animasi

Hasil
Benar terhadap kesuksesan
int WebPAnimDecoderOptionsInit(
    WebPAnimDecoderOptions* dec_options);

WebPAnimDecoderNew()

Membuat dan menginisialisasi objek WebPAnimDecoder.

Parameter

webp_data -- (dalam) bitstream WebP. Nilai ini tidak boleh berubah selama masa aktif objek WebPAnimDecoder output.

dec_options -- (dalam) opsi decoding. Dapat diteruskan NULL untuk memilih default yang wajar (khususnya, mode warna MODE_RGBA akan dipilih).

Hasil

Pointer ke objek WebPAnimDecoder yang baru dibuat, atau NULL jika terjadi error penguraian, opsi tidak valid, atau error memori.

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

Informasi global tentang animasi.

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

WebPAnimDecoderGetInfo()

Dapatkan informasi global tentang animasi.

Parameter

dec -- (di) instance decoder untuk mendapatkan informasinya.

info -- (keluar) informasi global yang diambil dari animasi.

Hasil

Benar dalam kesuksesan.

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

WebPAnimDecoderGetNext()

Ambil frame berikutnya dari dec berdasarkan opsi yang diberikan ke WebPAnimDecoderNew(). Ini akan menjadi kanvas ukuran canvas_width * 4 * canvas_height yang telah direkonstruksi sepenuhnya, dan bukan hanya frame sub-persegi panjang. buf buffer yang ditampilkan hanya valid hingga panggilan berikutnya ke WebPAnimDecoderGetNext(), WebPAnimDecoderReset(), atau WebPAnimDecoderDelete().

Parameter

dec -- (masuk/keluar) instance decoder yang digunakan untuk mengambil frame berikutnya.

buf -- (keluar) frame yang didekode.

stempel waktu -- (keluar) stempel waktu frame dalam milidetik.

Hasil

False jika salah satu argumen NULL, atau jika ada error penguraian atau decoding, atau jika tidak ada lagi frame. Jika tidak, menampilkan nilai benar (true).

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

WebPAnimDecoderHasMoreFrames()

Periksa apakah ada frame lain yang tersisa untuk didekode.

Parameter
dec -- (in) instance decoder akan diperiksa.
Hasil
Benar jika dec bukan NULL dan beberapa frame belum didekode. Jika tidak, menampilkan nilai salah.
int WebPAnimDecoderHasMoreFrames(const WebPAnimDecoder* dec);

WebPAnimDecoderReset()

Mereset objek WebPAnimDecoder, sehingga panggilan berikutnya ke WebPAnimDecoderGetNext() akan memulai ulang decoding dari frame ke-1. Hal ini akan berguna ketika semua frame perlu didekode beberapa kali (mis. info.loop_count kali) tanpa menghancurkan dan membuat ulang objek dec.

Parameter
dec -- instance decoder (masuk/keluar) akan direset
void WebPAnimDecoderReset(WebPAnimDecoder* dec);

WebPAnimDecoderGetDemuxer()

Ambil objek demuxer internal.

Mendapatkan objek demuxer dapat berguna jika seseorang ingin menggunakan operasi yang hanya tersedia melalui demuxer; misalnya untuk mendapatkan metadata XMP/EXIF/ICC. Objek demuxer yang ditampilkan dimiliki oleh dec dan hanya valid hingga panggilan berikutnya ke WebPAnimDecoderDelete().

Parameter
dec -- (dalam) instance decoder tempat objek demuxer akan diambil.
const WebPDemuxer* WebPAnimDecoderGetDemuxer(const WebPAnimDecoder* dec);

WebPAnimDecoderDelete()

Menghapus objek WebPAnimDecoder.

Parameter
dec -- instance decoder (masuk/keluar) akan dihapus.
Hasil
Tepat pada kesuksesan.
void WebPAnimDecoderDelete(WebPAnimDecoder* dec);

Jenis Data Umum

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()

Melakukan inisialisasi konten objek webp_data dengan nilai default.

void WebPDataInit(WebPData* webp_data);

WebPDataClear()

Menghapus konten objek webp_data dengan memanggil free(). Tidak mengalokasikan objek itu sendiri.

void WebPDataClear(WebPData* webp_data);

WebPDataCopy()

Mengalokasikan penyimpanan yang diperlukan untuk dst dan menyalin konten src. Menampilkan nilai true (benar) jika berhasil.

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