Blame README.mux

Packit 9c6abc
          __   __  ____  ____  ____  __ __  _     __ __
Packit 9c6abc
         /  \\/  \/  _ \/  _ \/  _ \/  \  \/ \___/_ / _\
Packit 9c6abc
         \       /   __/  _  \   __/      /  /  (_/  /__
Packit 9c6abc
          \__\__/\_____/_____/__/  \__//_/\_____/__/___/v1.0.0
Packit 9c6abc
Packit 9c6abc
Packit 9c6abc
Description:
Packit 9c6abc
============
Packit 9c6abc
Packit 9c6abc
WebPMux: set of two libraries 'Mux' and 'Demux' for creation, extraction and
Packit 9c6abc
manipulation of an extended format WebP file, which can have features like
Packit 9c6abc
color profile, metadata and animation. Reference command-line tools 'webpmux'
Packit 9c6abc
and 'vwebp' as well as the WebP container specification
Packit 9c6abc
'doc/webp-container-spec.txt' are also provided in this package.
Packit 9c6abc
Packit 9c6abc
WebP Mux tool:
Packit 9c6abc
==============
Packit 9c6abc
Packit 9c6abc
The examples/ directory contains a tool (webpmux) for manipulating WebP
Packit 9c6abc
files. The webpmux tool can be used to create an extended format WebP file and
Packit 9c6abc
also to extract or strip relevant data from such a file.
Packit 9c6abc
Packit 9c6abc
A list of options is available using the -help command line flag:
Packit 9c6abc
Packit 9c6abc
> webpmux -help
Packit 9c6abc
Usage: webpmux -get GET_OPTIONS INPUT -o OUTPUT
Packit 9c6abc
       webpmux -set SET_OPTIONS INPUT -o OUTPUT
Packit 9c6abc
       webpmux -duration DURATION_OPTIONS [-duration ...]
Packit 9c6abc
               INPUT -o OUTPUT
Packit 9c6abc
       webpmux -strip STRIP_OPTIONS INPUT -o OUTPUT
Packit 9c6abc
       webpmux -frame FRAME_OPTIONS [-frame...] [-loop LOOP_COUNT]
Packit 9c6abc
               [-bgcolor BACKGROUND_COLOR] -o OUTPUT
Packit 9c6abc
       webpmux -info INPUT
Packit 9c6abc
       webpmux [-h|-help]
Packit 9c6abc
       webpmux -version
Packit 9c6abc
       webpmux argument_file_name
Packit 9c6abc
Packit 9c6abc
GET_OPTIONS:
Packit 9c6abc
 Extract relevant data:
Packit 9c6abc
   icc       get ICC profile
Packit 9c6abc
   exif      get EXIF metadata
Packit 9c6abc
   xmp       get XMP metadata
Packit 9c6abc
   frame n   get nth frame
Packit 9c6abc
Packit 9c6abc
SET_OPTIONS:
Packit 9c6abc
 Set color profile/metadata:
Packit 9c6abc
   icc  file.icc     set ICC profile
Packit 9c6abc
   exif file.exif    set EXIF metadata
Packit 9c6abc
   xmp  file.xmp     set XMP metadata
Packit 9c6abc
   where:    'file.icc' contains the ICC profile to be set,
Packit 9c6abc
             'file.exif' contains the EXIF metadata to be set
Packit 9c6abc
             'file.xmp' contains the XMP metadata to be set
Packit 9c6abc
Packit 9c6abc
DURATION_OPTIONS:
Packit 9c6abc
 Set duration of selected frames:
Packit 9c6abc
   duration            set duration for each frames
Packit 9c6abc
   duration,frame      set duration of a particular frame
Packit 9c6abc
   duration,start,end  set duration of frames in the
Packit 9c6abc
                        interval [start,end])
Packit 9c6abc
   where: 'duration' is the duration in milliseconds
Packit 9c6abc
          'start' is the start frame index
Packit 9c6abc
          'end' is the inclusive end frame index
Packit 9c6abc
           The special 'end' value '0' means: last frame.
Packit 9c6abc
Packit 9c6abc
STRIP_OPTIONS:
Packit 9c6abc
 Strip color profile/metadata:
Packit 9c6abc
   icc       strip ICC profile
Packit 9c6abc
   exif      strip EXIF metadata
Packit 9c6abc
   xmp       strip XMP metadata
Packit 9c6abc
Packit 9c6abc
FRAME_OPTIONS(i):
Packit 9c6abc
 Create animation:
Packit 9c6abc
   file_i +di+[xi+yi[+mi[bi]]]
Packit 9c6abc
   where:    'file_i' is the i'th animation frame (WebP format),
Packit 9c6abc
             'di' is the pause duration before next frame,
Packit 9c6abc
             'xi','yi' specify the image offset for this frame,
Packit 9c6abc
             'mi' is the dispose method for this frame (0 or 1),
Packit 9c6abc
             'bi' is the blending method for this frame (+b or -b)
Packit 9c6abc
Packit 9c6abc
LOOP_COUNT:
Packit 9c6abc
 Number of times to repeat the animation.
Packit 9c6abc
 Valid range is 0 to 65535 [Default: 0 (infinite)].
Packit 9c6abc
Packit 9c6abc
BACKGROUND_COLOR:
Packit 9c6abc
 Background color of the canvas.
Packit 9c6abc
  A,R,G,B
Packit 9c6abc
  where:    'A', 'R', 'G' and 'B' are integers in the range 0 to 255 specifying
Packit 9c6abc
            the Alpha, Red, Green and Blue component values respectively
Packit 9c6abc
            [Default: 255,255,255,255]
Packit 9c6abc
Packit 9c6abc
INPUT & OUTPUT are in WebP format.
Packit 9c6abc
Packit 9c6abc
Note: The nature of EXIF, XMP and ICC data is not checked and is assumed to be
Packit 9c6abc
valid.
Packit 9c6abc
Packit 9c6abc
Note: if a single file name is passed as the argument, the arguments will be
Packit 9c6abc
tokenized from this file. The file name must not start with the character '-'.
Packit 9c6abc
Packit 9c6abc
Visualization tool:
Packit 9c6abc
===================
Packit 9c6abc
Packit 9c6abc
The examples/ directory also contains a tool (vwebp) for viewing WebP files.
Packit 9c6abc
It decodes the image and visualizes it using OpenGL. See the libwebp README
Packit 9c6abc
for details on building and running this program.
Packit 9c6abc
Packit 9c6abc
Mux API:
Packit 9c6abc
========
Packit 9c6abc
The Mux API contains methods for adding data to and reading data from WebP
Packit 9c6abc
files. This API currently supports XMP/EXIF metadata, ICC profile and animation.
Packit 9c6abc
Other features may be added in subsequent releases.
Packit 9c6abc
Packit 9c6abc
Example#1 (pseudo code): Creating a WebPMux object with image data, color
Packit 9c6abc
profile and XMP metadata.
Packit 9c6abc
Packit 9c6abc
  int copy_data = 0;
Packit 9c6abc
  WebPMux* mux = WebPMuxNew();
Packit 9c6abc
  // ... (Prepare image data).
Packit 9c6abc
  WebPMuxSetImage(mux, &image, copy_data);
Packit 9c6abc
  // ... (Prepare ICC profile data).
Packit 9c6abc
  WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data);
Packit 9c6abc
  // ... (Prepare XMP metadata).
Packit 9c6abc
  WebPMuxSetChunk(mux, "XMP ", &xmp, copy_data);
Packit 9c6abc
  // Get data from mux in WebP RIFF format.
Packit 9c6abc
  WebPMuxAssemble(mux, &output_data);
Packit 9c6abc
  WebPMuxDelete(mux);
Packit 9c6abc
  // ... (Consume output_data; e.g. write output_data.bytes to file).
Packit 9c6abc
  WebPDataClear(&output_data);
Packit 9c6abc
Packit 9c6abc
Packit 9c6abc
Example#2 (pseudo code): Get image and color profile data from a WebP file.
Packit 9c6abc
Packit 9c6abc
  int copy_data = 0;
Packit 9c6abc
  // ... (Read data from file).
Packit 9c6abc
  WebPMux* mux = WebPMuxCreate(&data, copy_data);
Packit 9c6abc
  WebPMuxGetFrame(mux, 1, &image);
Packit 9c6abc
  // ... (Consume image; e.g. call WebPDecode() to decode the data).
Packit 9c6abc
  WebPMuxGetChunk(mux, "ICCP", &icc_profile);
Packit 9c6abc
  // ... (Consume icc_profile).
Packit 9c6abc
  WebPMuxDelete(mux);
Packit 9c6abc
  free(data);
Packit 9c6abc
Packit 9c6abc
Packit 9c6abc
For a detailed Mux API reference, please refer to the header file
Packit 9c6abc
(src/webp/mux.h).
Packit 9c6abc
Packit 9c6abc
Demux API:
Packit 9c6abc
==========
Packit 9c6abc
The Demux API enables extraction of images and extended format data from
Packit 9c6abc
WebP files. This API currently supports reading of XMP/EXIF metadata, ICC
Packit 9c6abc
profile and animated images. Other features may be added in subsequent
Packit 9c6abc
releases.
Packit 9c6abc
Packit 9c6abc
Code example: Demuxing WebP data to extract all the frames, ICC profile
Packit 9c6abc
and EXIF/XMP metadata.
Packit 9c6abc
Packit 9c6abc
  WebPDemuxer* demux = WebPDemux(&webp_data);
Packit 9c6abc
  uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH);
Packit 9c6abc
  uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT);
Packit 9c6abc
  // ... (Get information about the features present in the WebP file).
Packit 9c6abc
  uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS);
Packit 9c6abc
Packit 9c6abc
  // ... (Iterate over all frames).
Packit 9c6abc
  WebPIterator iter;
Packit 9c6abc
  if (WebPDemuxGetFrame(demux, 1, &iter)) {
Packit 9c6abc
    do {
Packit 9c6abc
      // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(),
Packit 9c6abc
      // ... and get other frame properties like width, height, offsets etc.
Packit 9c6abc
      // ... see 'struct WebPIterator' below for more info).
Packit 9c6abc
    } while (WebPDemuxNextFrame(&iter));
Packit 9c6abc
    WebPDemuxReleaseIterator(&iter);
Packit 9c6abc
  }
Packit 9c6abc
Packit 9c6abc
  // ... (Extract metadata).
Packit 9c6abc
  WebPChunkIterator chunk_iter;
Packit 9c6abc
  if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter);
Packit 9c6abc
  // ... (Consume the ICC profile in 'chunk_iter.chunk').
Packit 9c6abc
  WebPDemuxReleaseChunkIterator(&chunk_iter);
Packit 9c6abc
  if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter);
Packit 9c6abc
  // ... (Consume the EXIF metadata in 'chunk_iter.chunk').
Packit 9c6abc
  WebPDemuxReleaseChunkIterator(&chunk_iter);
Packit 9c6abc
  if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter);
Packit 9c6abc
  // ... (Consume the XMP metadata in 'chunk_iter.chunk').
Packit 9c6abc
  WebPDemuxReleaseChunkIterator(&chunk_iter);
Packit 9c6abc
  WebPDemuxDelete(demux);
Packit 9c6abc
Packit 9c6abc
Packit 9c6abc
For a detailed Demux API reference, please refer to the header file
Packit 9c6abc
(src/webp/demux.h).
Packit 9c6abc
Packit 9c6abc
AnimEncoder API:
Packit 9c6abc
================
Packit 9c6abc
The AnimEncoder API can be used to create animated WebP images.
Packit 9c6abc
Packit 9c6abc
Code example:
Packit 9c6abc
Packit 9c6abc
  WebPAnimEncoderOptions enc_options;
Packit 9c6abc
  WebPAnimEncoderOptionsInit(&enc_options);
Packit 9c6abc
  // ... (Tune 'enc_options' as needed).
Packit 9c6abc
  WebPAnimEncoder* enc = WebPAnimEncoderNew(width, height, &enc_options);
Packit 9c6abc
  while(<there are more frames>) {
Packit 9c6abc
    WebPConfig config;
Packit 9c6abc
    WebPConfigInit(&config);
Packit 9c6abc
    // ... (Tune 'config' as needed).
Packit 9c6abc
    WebPAnimEncoderAdd(enc, frame, duration, &config);
Packit 9c6abc
  }
Packit 9c6abc
  WebPAnimEncoderAssemble(enc, webp_data);
Packit 9c6abc
  WebPAnimEncoderDelete(enc);
Packit 9c6abc
  // ... (Write the 'webp_data' to a file, or re-mux it further).
Packit 9c6abc
Packit 9c6abc
Packit 9c6abc
For a detailed AnimEncoder API reference, please refer to the header file
Packit 9c6abc
(src/webp/mux.h).
Packit 9c6abc
Packit 9c6abc
Packit 9c6abc
Bugs:
Packit 9c6abc
=====
Packit 9c6abc
Packit 9c6abc
Please report all bugs to the issue tracker:
Packit 9c6abc
    https://bugs.chromium.org/p/webp
Packit 9c6abc
Patches welcome! See this page to get started:
Packit 9c6abc
    http://www.webmproject.org/code/contribute/submitting-patches/
Packit 9c6abc
Packit 9c6abc
Discuss:
Packit 9c6abc
========
Packit 9c6abc
Packit 9c6abc
Email: webp-discuss@webmproject.org
Packit 9c6abc
Web: http://groups.google.com/a/webmproject.org/group/webp-discuss