mirror of
https://github.com/webmproject/libwebp.git
synced 2024-12-26 05:38:22 +01:00
Common APIs for chunks metadata and color profile.
Change-Id: Ie105ce913c0b56e34cc26fd7ec397103354f268a
This commit is contained in:
parent
2a3117a1e6
commit
1c04a0d438
@ -77,9 +77,9 @@ profile & XMP metadata.
|
|||||||
// ... (Prepare image data).
|
// ... (Prepare image data).
|
||||||
WebPMuxSetImage(mux, &image, copy_data);
|
WebPMuxSetImage(mux, &image, copy_data);
|
||||||
// ... (Prepare ICCP color profile data).
|
// ... (Prepare ICCP color profile data).
|
||||||
WebPMuxSetColorProfile(mux, &icc_profile, copy_data);
|
WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data);
|
||||||
// ... (Prepare XMP metadata).
|
// ... (Prepare XMP metadata).
|
||||||
WebPMuxSetMetadata(mux, &xmp, copy_data);
|
WebPMuxSetChunk(mux, "META", &xmp, copy_data);
|
||||||
// Get data from mux in WebP RIFF format.
|
// Get data from mux in WebP RIFF format.
|
||||||
WebPMuxAssemble(mux, &output_data);
|
WebPMuxAssemble(mux, &output_data);
|
||||||
WebPMuxDelete(mux);
|
WebPMuxDelete(mux);
|
||||||
@ -94,7 +94,7 @@ Example#2 (pseudo code): Get image & color profile data from a WebP file.
|
|||||||
WebPMux* mux = WebPMuxCreate(&data, copy_data);
|
WebPMux* mux = WebPMuxCreate(&data, copy_data);
|
||||||
WebPMuxGetImage(mux, &image);
|
WebPMuxGetImage(mux, &image);
|
||||||
// ... (Consume image; e.g. call WebPDecode() to decode the data).
|
// ... (Consume image; e.g. call WebPDecode() to decode the data).
|
||||||
WebPMuxGetColorProfile(mux, &icc_profile);
|
WebPMuxGetChunk(mux, "ICCP", &icc_profile);
|
||||||
// ... (Consume icc_profile).
|
// ... (Consume icc_profile).
|
||||||
WebPMuxDelete(mux);
|
WebPMuxDelete(mux);
|
||||||
free(data);
|
free(data);
|
||||||
|
@ -234,14 +234,14 @@ static WebPMuxError DisplayInfo(const WebPMux* mux) {
|
|||||||
|
|
||||||
if (flag & ICCP_FLAG) {
|
if (flag & ICCP_FLAG) {
|
||||||
WebPData icc_profile;
|
WebPData icc_profile;
|
||||||
err = WebPMuxGetColorProfile(mux, &icc_profile);
|
err = WebPMuxGetChunk(mux, "ICCP", &icc_profile);
|
||||||
RETURN_IF_ERROR("Failed to retrieve the color profile\n");
|
RETURN_IF_ERROR("Failed to retrieve the color profile\n");
|
||||||
printf("Size of the color profile data: %zu\n", icc_profile.size_);
|
printf("Size of the color profile data: %zu\n", icc_profile.size_);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag & META_FLAG) {
|
if (flag & META_FLAG) {
|
||||||
WebPData metadata;
|
WebPData metadata;
|
||||||
err = WebPMuxGetMetadata(mux, &metadata);
|
err = WebPMuxGetChunk(mux, "META", &metadata);
|
||||||
RETURN_IF_ERROR("Failed to retrieve the XMP metadata\n");
|
RETURN_IF_ERROR("Failed to retrieve the XMP metadata\n");
|
||||||
printf("Size of the XMP metadata: %zu\n", metadata.size_);
|
printf("Size of the XMP metadata: %zu\n", metadata.size_);
|
||||||
}
|
}
|
||||||
@ -755,7 +755,7 @@ static int Process(const WebPMuxConfig* config) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case FEATURE_ICCP:
|
case FEATURE_ICCP:
|
||||||
err = WebPMuxGetColorProfile(mux, &color_profile);
|
err = WebPMuxGetChunk(mux, "ICCP", &color_profile);
|
||||||
if (err != WEBP_MUX_OK) {
|
if (err != WEBP_MUX_OK) {
|
||||||
ERROR_GOTO2("ERROR (%s): Could not get color profile.\n",
|
ERROR_GOTO2("ERROR (%s): Could not get color profile.\n",
|
||||||
ErrorString(err), Err2);
|
ErrorString(err), Err2);
|
||||||
@ -763,7 +763,7 @@ static int Process(const WebPMuxConfig* config) {
|
|||||||
ok = WriteData(config->output_, &color_profile);
|
ok = WriteData(config->output_, &color_profile);
|
||||||
break;
|
break;
|
||||||
case FEATURE_XMP:
|
case FEATURE_XMP:
|
||||||
err = WebPMuxGetMetadata(mux, &metadata);
|
err = WebPMuxGetChunk(mux, "META", &metadata);
|
||||||
if (err != WEBP_MUX_OK) {
|
if (err != WEBP_MUX_OK) {
|
||||||
ERROR_GOTO2("ERROR (%s): Could not get XMP metadata.\n",
|
ERROR_GOTO2("ERROR (%s): Could not get XMP metadata.\n",
|
||||||
ErrorString(err), Err2);
|
ErrorString(err), Err2);
|
||||||
@ -848,7 +848,7 @@ static int Process(const WebPMuxConfig* config) {
|
|||||||
if (!ok) goto Err2;
|
if (!ok) goto Err2;
|
||||||
ok = ReadFileToWebPData(feature->args_[0].filename_, &color_profile);
|
ok = ReadFileToWebPData(feature->args_[0].filename_, &color_profile);
|
||||||
if (!ok) goto Err2;
|
if (!ok) goto Err2;
|
||||||
err = WebPMuxSetColorProfile(mux, &color_profile, 1);
|
err = WebPMuxSetChunk(mux, "ICCP", &color_profile, 1);
|
||||||
free((void*)color_profile.bytes_);
|
free((void*)color_profile.bytes_);
|
||||||
if (err != WEBP_MUX_OK) {
|
if (err != WEBP_MUX_OK) {
|
||||||
ERROR_GOTO2("ERROR (%s): Could not set color profile.\n",
|
ERROR_GOTO2("ERROR (%s): Could not set color profile.\n",
|
||||||
@ -861,7 +861,7 @@ static int Process(const WebPMuxConfig* config) {
|
|||||||
if (!ok) goto Err2;
|
if (!ok) goto Err2;
|
||||||
ok = ReadFileToWebPData(feature->args_[0].filename_, &metadata);
|
ok = ReadFileToWebPData(feature->args_[0].filename_, &metadata);
|
||||||
if (!ok) goto Err2;
|
if (!ok) goto Err2;
|
||||||
err = WebPMuxSetMetadata(mux, &metadata, 1);
|
err = WebPMuxSetChunk(mux, "META", &metadata, 1);
|
||||||
free((void*)metadata.bytes_);
|
free((void*)metadata.bytes_);
|
||||||
if (err != WEBP_MUX_OK) {
|
if (err != WEBP_MUX_OK) {
|
||||||
ERROR_GOTO2("ERROR (%s): Could not set XMP metadata.\n",
|
ERROR_GOTO2("ERROR (%s): Could not set XMP metadata.\n",
|
||||||
@ -881,14 +881,14 @@ static int Process(const WebPMuxConfig* config) {
|
|||||||
if (!ok) goto Err2;
|
if (!ok) goto Err2;
|
||||||
switch (feature->type_) {
|
switch (feature->type_) {
|
||||||
case FEATURE_ICCP:
|
case FEATURE_ICCP:
|
||||||
err = WebPMuxDeleteColorProfile(mux);
|
err = WebPMuxDeleteChunk(mux, "ICCP");
|
||||||
if (err != WEBP_MUX_OK) {
|
if (err != WEBP_MUX_OK) {
|
||||||
ERROR_GOTO2("ERROR (%s): Could not delete color profile.\n",
|
ERROR_GOTO2("ERROR (%s): Could not delete color profile.\n",
|
||||||
ErrorString(err), Err2);
|
ErrorString(err), Err2);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FEATURE_XMP:
|
case FEATURE_XMP:
|
||||||
err = WebPMuxDeleteMetadata(mux);
|
err = WebPMuxDeleteChunk(mux, "META");
|
||||||
if (err != WEBP_MUX_OK) {
|
if (err != WEBP_MUX_OK) {
|
||||||
ERROR_GOTO2("ERROR (%s): Could not delete XMP metadata.\n",
|
ERROR_GOTO2("ERROR (%s): Could not delete XMP metadata.\n",
|
||||||
ErrorString(err), Err2);
|
ErrorString(err), Err2);
|
||||||
|
@ -185,8 +185,8 @@ static WebPMuxError DeleteChunks(WebPChunk** chunk_list, uint32_t tag) {
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static WebPMuxError MuxDeleteAllNamedData(WebPMux* const mux, CHUNK_INDEX idx) {
|
static WebPMuxError MuxDeleteAllNamedData(WebPMux* const mux, uint32_t tag) {
|
||||||
const WebPChunkId id = kChunks[idx].id;
|
const WebPChunkId id = ChunkGetIdFromTag(tag);
|
||||||
WebPChunk** chunk_list;
|
WebPChunk** chunk_list;
|
||||||
|
|
||||||
if (mux == NULL) return WEBP_MUX_INVALID_ARGUMENT;
|
if (mux == NULL) return WEBP_MUX_INVALID_ARGUMENT;
|
||||||
@ -195,11 +195,11 @@ static WebPMuxError MuxDeleteAllNamedData(WebPMux* const mux, CHUNK_INDEX idx) {
|
|||||||
chunk_list = MuxGetChunkListFromId(mux, id);
|
chunk_list = MuxGetChunkListFromId(mux, id);
|
||||||
if (chunk_list == NULL) return WEBP_MUX_INVALID_ARGUMENT;
|
if (chunk_list == NULL) return WEBP_MUX_INVALID_ARGUMENT;
|
||||||
|
|
||||||
return DeleteChunks(chunk_list, kChunks[idx].tag);
|
return DeleteChunks(chunk_list, tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
static WebPMuxError DeleteLoopCount(WebPMux* const mux) {
|
static WebPMuxError DeleteLoopCount(WebPMux* const mux) {
|
||||||
return MuxDeleteAllNamedData(mux, IDX_LOOP);
|
return MuxDeleteAllNamedData(mux, kChunks[IDX_LOOP].tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
@ -260,39 +260,24 @@ WebPMuxError WebPMuxSetImage(WebPMux* mux,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
WebPMuxError WebPMuxSetMetadata(WebPMux* mux, const WebPData* metadata,
|
WebPMuxError WebPMuxSetChunk(WebPMux* mux, const char fourcc[4],
|
||||||
int copy_data) {
|
const WebPData* chunk_data, int copy_data) {
|
||||||
|
const CHUNK_INDEX idx = ChunkGetIndexFromFourCC(fourcc);
|
||||||
|
const uint32_t tag = ChunkGetTagFromFourCC(fourcc);
|
||||||
WebPMuxError err;
|
WebPMuxError err;
|
||||||
|
if (mux == NULL || chunk_data == NULL || chunk_data->bytes_ == NULL ||
|
||||||
if (mux == NULL || metadata == NULL || metadata->bytes_ == NULL ||
|
chunk_data->size_ > MAX_CHUNK_PAYLOAD) {
|
||||||
metadata->size_ > MAX_CHUNK_PAYLOAD) {
|
|
||||||
return WEBP_MUX_INVALID_ARGUMENT;
|
return WEBP_MUX_INVALID_ARGUMENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete the existing metadata chunk(s).
|
// Delete existing chunk(s) with the same 'fourcc'.
|
||||||
err = WebPMuxDeleteMetadata(mux);
|
err = MuxDeleteAllNamedData(mux, tag);
|
||||||
if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err;
|
if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err;
|
||||||
|
|
||||||
// Add the given metadata chunk.
|
// Add the given chunk.
|
||||||
return MuxSet(mux, IDX_META, 1, metadata, copy_data);
|
return MuxSet(mux, idx, 1, chunk_data, copy_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
WebPMuxError WebPMuxSetColorProfile(WebPMux* mux, const WebPData* color_profile,
|
|
||||||
int copy_data) {
|
|
||||||
WebPMuxError err;
|
|
||||||
|
|
||||||
if (mux == NULL || color_profile == NULL || color_profile->bytes_ == NULL ||
|
|
||||||
color_profile->size_ > MAX_CHUNK_PAYLOAD) {
|
|
||||||
return WEBP_MUX_INVALID_ARGUMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete the existing ICCP chunk(s).
|
|
||||||
err = WebPMuxDeleteColorProfile(mux);
|
|
||||||
if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err;
|
|
||||||
|
|
||||||
// Add the given ICCP chunk.
|
|
||||||
return MuxSet(mux, IDX_ICCP, 1, color_profile, copy_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
WebPMuxError WebPMuxSetLoopCount(WebPMux* mux, int loop_count) {
|
WebPMuxError WebPMuxSetLoopCount(WebPMux* mux, int loop_count) {
|
||||||
WebPMuxError err;
|
WebPMuxError err;
|
||||||
@ -437,12 +422,8 @@ WebPMuxError WebPMuxDeleteImage(WebPMux* mux) {
|
|||||||
return WEBP_MUX_OK;
|
return WEBP_MUX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
WebPMuxError WebPMuxDeleteMetadata(WebPMux* mux) {
|
WebPMuxError WebPMuxDeleteChunk(WebPMux* mux, const char fourcc[4]) {
|
||||||
return MuxDeleteAllNamedData(mux, IDX_META);
|
return MuxDeleteAllNamedData(mux, ChunkGetTagFromFourCC(fourcc));
|
||||||
}
|
|
||||||
|
|
||||||
WebPMuxError WebPMuxDeleteColorProfile(WebPMux* mux) {
|
|
||||||
return MuxDeleteAllNamedData(mux, IDX_ICCP);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static WebPMuxError DeleteFrameTileInternal(WebPMux* const mux, uint32_t nth,
|
static WebPMuxError DeleteFrameTileInternal(WebPMux* const mux, uint32_t nth,
|
||||||
@ -595,7 +576,7 @@ static WebPMuxError CreateVP8XChunk(WebPMux* const mux) {
|
|||||||
|
|
||||||
// If VP8X chunk(s) is(are) already present, remove them (and later add new
|
// If VP8X chunk(s) is(are) already present, remove them (and later add new
|
||||||
// VP8X chunk with updated flags).
|
// VP8X chunk with updated flags).
|
||||||
err = MuxDeleteAllNamedData(mux, IDX_VP8X);
|
err = MuxDeleteAllNamedData(mux, kChunks[IDX_VP8X].tag);
|
||||||
if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err;
|
if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err;
|
||||||
|
|
||||||
// Set flags.
|
// Set flags.
|
||||||
|
@ -140,6 +140,12 @@ CHUNK_INDEX ChunkGetIndexFromTag(uint32_t tag);
|
|||||||
// Get chunk id from chunk tag. Returns WEBP_CHUNK_NIL if not found.
|
// Get chunk id from chunk tag. Returns WEBP_CHUNK_NIL if not found.
|
||||||
WebPChunkId ChunkGetIdFromTag(uint32_t tag);
|
WebPChunkId ChunkGetIdFromTag(uint32_t tag);
|
||||||
|
|
||||||
|
// Convert a fourcc string to a tag.
|
||||||
|
uint32_t ChunkGetTagFromFourCC(const char fourcc[4]);
|
||||||
|
|
||||||
|
// Get chunk index from fourcc. Returns IDX_UNKNOWN if given fourcc is unknown.
|
||||||
|
CHUNK_INDEX ChunkGetIndexFromFourCC(const char fourcc[4]);
|
||||||
|
|
||||||
// Search for nth chunk with given 'tag' in the chunk list.
|
// Search for nth chunk with given 'tag' in the chunk list.
|
||||||
// nth = 0 means "last of the list".
|
// nth = 0 means "last of the list".
|
||||||
WebPChunk* ChunkSearchList(WebPChunk* first, uint32_t nth, uint32_t tag);
|
WebPChunk* ChunkSearchList(WebPChunk* first, uint32_t nth, uint32_t tag);
|
||||||
|
@ -73,6 +73,16 @@ WebPChunkId ChunkGetIdFromTag(uint32_t tag) {
|
|||||||
return WEBP_CHUNK_NIL;
|
return WEBP_CHUNK_NIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t ChunkGetTagFromFourCC(const char fourcc[4]) {
|
||||||
|
return MKFOURCC(fourcc[0], fourcc[1], fourcc[2], fourcc[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
CHUNK_INDEX ChunkGetIndexFromFourCC(const char fourcc[4]) {
|
||||||
|
const uint32_t tag = ChunkGetTagFromFourCC(fourcc);
|
||||||
|
const CHUNK_INDEX idx = ChunkGetIndexFromTag(tag);
|
||||||
|
return (idx == IDX_NIL) ? IDX_UNKNOWN : idx;
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Chunk search methods.
|
// Chunk search methods.
|
||||||
|
|
||||||
|
@ -289,15 +289,21 @@ WebPMuxError WebPMuxGetImage(const WebPMux* mux, WebPData* bitstream) {
|
|||||||
return SynthesizeBitstream(wpi, bitstream);
|
return SynthesizeBitstream(wpi, bitstream);
|
||||||
}
|
}
|
||||||
|
|
||||||
WebPMuxError WebPMuxGetMetadata(const WebPMux* mux, WebPData* metadata) {
|
WebPMuxError WebPMuxGetChunk(const WebPMux* mux, const char fourcc[4],
|
||||||
if (mux == NULL || metadata == NULL) return WEBP_MUX_INVALID_ARGUMENT;
|
WebPData* chunk_data) {
|
||||||
return MuxGet(mux, IDX_META, 1, metadata);
|
const CHUNK_INDEX idx = ChunkGetIndexFromFourCC(fourcc);
|
||||||
}
|
if (mux == NULL || chunk_data == NULL || IsWPI(kChunks[idx].id)) {
|
||||||
|
return WEBP_MUX_INVALID_ARGUMENT;
|
||||||
WebPMuxError WebPMuxGetColorProfile(const WebPMux* mux,
|
}
|
||||||
WebPData* color_profile) {
|
if (idx != IDX_UNKNOWN) { // A known chunk type.
|
||||||
if (mux == NULL || color_profile == NULL) return WEBP_MUX_INVALID_ARGUMENT;
|
return MuxGet(mux, idx, 1, chunk_data);
|
||||||
return MuxGet(mux, IDX_ICCP, 1, color_profile);
|
} else { // An unknown chunk type.
|
||||||
|
const WebPChunk* const chunk =
|
||||||
|
ChunkSearchList(mux->unknown_, 1, ChunkGetTagFromFourCC(fourcc));
|
||||||
|
if (chunk == NULL) return WEBP_MUX_NOT_FOUND;
|
||||||
|
*chunk_data = chunk->data_;
|
||||||
|
return WEBP_MUX_OK;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WebPMuxError WebPMuxGetLoopCount(const WebPMux* mux, int* loop_count) {
|
WebPMuxError WebPMuxGetLoopCount(const WebPMux* mux, int* loop_count) {
|
||||||
|
@ -21,9 +21,9 @@
|
|||||||
// // ... (Prepare image data).
|
// // ... (Prepare image data).
|
||||||
// WebPMuxSetImage(mux, &image, copy_data);
|
// WebPMuxSetImage(mux, &image, copy_data);
|
||||||
// // ... (Prepare ICCP color profile data).
|
// // ... (Prepare ICCP color profile data).
|
||||||
// WebPMuxSetColorProfile(mux, &icc_profile, copy_data);
|
// WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data);
|
||||||
// // ... (Prepare XMP metadata).
|
// // ... (Prepare XMP metadata).
|
||||||
// WebPMuxSetMetadata(mux, &xmp, copy_data);
|
// WebPMuxSetChunk(mux, "META", &xmp, copy_data);
|
||||||
// // Get data from mux in WebP RIFF format.
|
// // Get data from mux in WebP RIFF format.
|
||||||
// WebPMuxAssemble(mux, &output_data);
|
// WebPMuxAssemble(mux, &output_data);
|
||||||
// WebPMuxDelete(mux);
|
// WebPMuxDelete(mux);
|
||||||
@ -37,7 +37,7 @@
|
|||||||
// WebPMux* mux = WebPMuxCreate(&data, copy_data);
|
// WebPMux* mux = WebPMuxCreate(&data, copy_data);
|
||||||
// WebPMuxGetImage(mux, &image);
|
// WebPMuxGetImage(mux, &image);
|
||||||
// // ... (Consume image; e.g. call WebPDecode() to decode the data).
|
// // ... (Consume image; e.g. call WebPDecode() to decode the data).
|
||||||
// WebPMuxGetColorProfile(mux, &icc_profile);
|
// WebPMuxGetChunk(mux, "ICCP", &icc_profile);
|
||||||
// // ... (Consume icc_data).
|
// // ... (Consume icc_data).
|
||||||
// WebPMuxDelete(mux);
|
// WebPMuxDelete(mux);
|
||||||
// free(data);
|
// free(data);
|
||||||
@ -191,82 +191,56 @@ WEBP_EXTERN(WebPMuxError) WebPMuxGetImage(const WebPMux* mux,
|
|||||||
WEBP_EXTERN(WebPMuxError) WebPMuxDeleteImage(WebPMux* mux);
|
WEBP_EXTERN(WebPMuxError) WebPMuxDeleteImage(WebPMux* mux);
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// XMP Metadata.
|
// Chunks.
|
||||||
|
|
||||||
// Sets the XMP metadata in the mux object. Any existing metadata chunk(s) will
|
// Note: Only non-image related chunks should be managed through chunk APIs.
|
||||||
// be removed.
|
// (Image related chunks are: "FRM ", "TILE", "VP8 ", "VP8L" and "ALPH").
|
||||||
|
|
||||||
|
// Adds a chunk with id 'fourcc' and data 'chunk_data' in the mux object.
|
||||||
|
// Any existing chunk(s) with the same id will be removed.
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// mux - (in/out) object to which the XMP metadata is to be added
|
// mux - (in/out) object to which the chunk is to be added
|
||||||
// metadata - (in) the XMP metadata data to be added
|
// fourcc - (in) a character array containing the fourcc of the given chunk;
|
||||||
|
// e.g., "ICCP", "META" etc.
|
||||||
|
// chunk_data - (in) the chunk data to be added
|
||||||
// copy_data - (in) value 1 indicates given data WILL copied to the mux, and
|
// copy_data - (in) value 1 indicates given data WILL copied to the mux, and
|
||||||
// value 0 indicates data will NOT be copied.
|
// value 0 indicates data will NOT be copied.
|
||||||
// Returns:
|
// Returns:
|
||||||
// WEBP_MUX_INVALID_ARGUMENT - if mux or metadata is NULL.
|
// WEBP_MUX_INVALID_ARGUMENT - if mux or chunk_data is NULL
|
||||||
|
// or if fourcc corresponds to an image chunk.
|
||||||
// WEBP_MUX_MEMORY_ERROR - on memory allocation error.
|
// WEBP_MUX_MEMORY_ERROR - on memory allocation error.
|
||||||
// WEBP_MUX_OK - on success.
|
// WEBP_MUX_OK - on success.
|
||||||
WEBP_EXTERN(WebPMuxError) WebPMuxSetMetadata(WebPMux* mux,
|
WEBP_EXTERN(WebPMuxError) WebPMuxSetChunk(
|
||||||
const WebPData* metadata,
|
WebPMux* mux, const char fourcc[4], const WebPData* chunk_data,
|
||||||
int copy_data);
|
int copy_data);
|
||||||
|
|
||||||
// Gets a reference to the XMP metadata in the mux object.
|
// Gets a reference to the data of the chunk with id 'fourcc' in the mux object.
|
||||||
// The caller should NOT free the returned data.
|
// The caller should NOT free the returned data.
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// mux - (in) object from which the XMP metadata is to be fetched
|
// mux - (in) object from which the chunk data is to be fetched
|
||||||
// metadata - (out) XMP metadata
|
// fourcc - (in) a character array containing the fourcc of the chunk;
|
||||||
|
// e.g., "ICCP", "META" etc.
|
||||||
|
// chunk_data - (out) returned chunk data
|
||||||
// Returns:
|
// Returns:
|
||||||
// WEBP_MUX_INVALID_ARGUMENT - if either mux or metadata is NULL.
|
// WEBP_MUX_INVALID_ARGUMENT - if either mux or chunk_data is NULL
|
||||||
// WEBP_MUX_NOT_FOUND - if metadata is not present in mux object.
|
// or if fourcc corresponds to an image chunk.
|
||||||
|
// WEBP_MUX_NOT_FOUND - If mux does not contain a chunk with the given id.
|
||||||
// WEBP_MUX_OK - on success.
|
// WEBP_MUX_OK - on success.
|
||||||
WEBP_EXTERN(WebPMuxError) WebPMuxGetMetadata(const WebPMux* mux,
|
WEBP_EXTERN(WebPMuxError) WebPMuxGetChunk(
|
||||||
WebPData* metadata);
|
const WebPMux* mux, const char fourcc[4], WebPData* chunk_data);
|
||||||
|
|
||||||
// Deletes the XMP metadata in the mux object.
|
// Deletes the chunk with the given 'fourcc' from the mux object.
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// mux - (in/out) object from which XMP metadata is to be deleted
|
// mux - (in/out) object from which the chunk is to be deleted
|
||||||
|
// fourcc - (in) a character array containing the fourcc of the chunk;
|
||||||
|
// e.g., "ICCP", "META" etc.
|
||||||
// Returns:
|
// Returns:
|
||||||
// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL
|
// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL
|
||||||
// WEBP_MUX_NOT_FOUND - If mux does not contain metadata.
|
// or if fourcc corresponds to an image chunk.
|
||||||
|
// WEBP_MUX_NOT_FOUND - If mux does not contain a chunk with the given fourcc.
|
||||||
// WEBP_MUX_OK - on success.
|
// WEBP_MUX_OK - on success.
|
||||||
WEBP_EXTERN(WebPMuxError) WebPMuxDeleteMetadata(WebPMux* mux);
|
WEBP_EXTERN(WebPMuxError) WebPMuxDeleteChunk(
|
||||||
|
WebPMux* mux, const char fourcc[4]);
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// ICC Color Profile.
|
|
||||||
|
|
||||||
// Sets the color profile in the mux object. Any existing color profile chunk(s)
|
|
||||||
// will be removed.
|
|
||||||
// Parameters:
|
|
||||||
// mux - (in/out) object to which the color profile is to be added
|
|
||||||
// color_profile - (in) the color profile data to be added
|
|
||||||
// copy_data - (in) value 1 indicates given data WILL copied to the mux, and
|
|
||||||
// value 0 indicates data will NOT be copied.
|
|
||||||
// Returns:
|
|
||||||
// WEBP_MUX_INVALID_ARGUMENT - if mux or color_profile is NULL
|
|
||||||
// WEBP_MUX_MEMORY_ERROR - on memory allocation error
|
|
||||||
// WEBP_MUX_OK - on success
|
|
||||||
WEBP_EXTERN(WebPMuxError) WebPMuxSetColorProfile(WebPMux* mux,
|
|
||||||
const WebPData* color_profile,
|
|
||||||
int copy_data);
|
|
||||||
|
|
||||||
// Gets a reference to the color profile in the mux object.
|
|
||||||
// The caller should NOT free the returned data.
|
|
||||||
// Parameters:
|
|
||||||
// mux - (in) object from which the color profile data is to be fetched
|
|
||||||
// color_profile - (out) color profile data
|
|
||||||
// Returns:
|
|
||||||
// WEBP_MUX_INVALID_ARGUMENT - if either mux or color_profile is NULL.
|
|
||||||
// WEBP_MUX_NOT_FOUND - if color profile is not present in mux object.
|
|
||||||
// WEBP_MUX_OK - on success.
|
|
||||||
WEBP_EXTERN(WebPMuxError) WebPMuxGetColorProfile(const WebPMux* mux,
|
|
||||||
WebPData* color_profile);
|
|
||||||
|
|
||||||
// Deletes the color profile in the mux object.
|
|
||||||
// Parameters:
|
|
||||||
// mux - (in/out) object from which color profile is to be deleted
|
|
||||||
// Returns:
|
|
||||||
// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL
|
|
||||||
// WEBP_MUX_NOT_FOUND - If mux does not contain color profile.
|
|
||||||
// WEBP_MUX_OK - on success.
|
|
||||||
WEBP_EXTERN(WebPMuxError) WebPMuxDeleteColorProfile(WebPMux* mux);
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Animation.
|
// Animation.
|
||||||
|
Loading…
Reference in New Issue
Block a user