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:
- frame.id harus berupa salah satu dari
WEBP_CHUNK_ANMF
atauWEBP_CHUNK_FRGM
- Untuk menetapkan gambar non-fragmen non-animasi, gunakan
WebPMuxSetImage()
. - Jenis frame yang didorong harus sama dengan frame di mux.
- 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, ×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.
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);