diff --git a/examples/webpmux.c b/examples/webpmux.c index 87e4bed3..5e555b66 100644 --- a/examples/webpmux.c +++ b/examples/webpmux.c @@ -191,7 +191,7 @@ static WebPMuxError DisplayInfo(const WebPMux* mux) { if ((flag & ANIMATION_FLAG) || (flag & TILE_FLAG)) { const int is_anim = !!(flag & ANIMATION_FLAG); - const WebPChunkId id = is_anim ? WEBP_CHUNK_FRAME : WEBP_CHUNK_TILE; + const WebPChunkId id = is_anim ? WEBP_CHUNK_ANMF : WEBP_CHUNK_FRGM; const char* const type_str = is_anim ? "frame" : "tile"; int nFrames; @@ -684,7 +684,7 @@ static int GetFrameTile(const WebPMux* mux, WebPMux* mux_single = NULL; long num = 0; int ok = 1; - const WebPChunkId id = isFrame ? WEBP_CHUNK_FRAME : WEBP_CHUNK_TILE; + const WebPChunkId id = isFrame ? WEBP_CHUNK_ANMF : WEBP_CHUNK_FRGM; WebPMuxFrameInfo info; WebPDataInit(&info.bitstream_); @@ -794,7 +794,7 @@ static int Process(const WebPMuxConfig* config) { WebPDataClear(&frame.bitstream_); ERROR_GOTO1("ERROR: Could not parse frame properties.\n", Err2); } - frame.id = WEBP_CHUNK_FRAME; + frame.id = WEBP_CHUNK_ANMF; err = WebPMuxPushFrame(mux, &frame, 1); WebPDataClear(&frame.bitstream_); if (err != WEBP_MUX_OK) { @@ -823,7 +823,7 @@ static int Process(const WebPMuxConfig* config) { WebPDataClear(&tile.bitstream_); ERROR_GOTO1("ERROR: Could not parse tile properties.\n", Err2); } - tile.id = WEBP_CHUNK_TILE; + tile.id = WEBP_CHUNK_FRGM; err = WebPMuxPushFrame(mux, &tile, 1); WebPDataClear(&tile.bitstream_); if (err != WEBP_MUX_OK) { diff --git a/src/mux/demux.c b/src/mux/demux.c index 4519f7d5..989f475c 100644 --- a/src/mux/demux.c +++ b/src/mux/demux.c @@ -39,7 +39,7 @@ typedef struct Frame { int x_offset_, y_offset_; int width_, height_; int duration_; - int is_tile_; // this is an image fragment from a 'TILE'. + int is_tile_; // this is an image fragment from a tile. int frame_num_; // the referent frame number for use in assembling tiles. int complete_; // img_components_ contains a full image. ChunkData img_components_[2]; // 0=VP8{,L} 1=ALPH @@ -285,7 +285,7 @@ static ParseStatus NewFrame(const MemBuffer* const mem, return (*frame == NULL) ? PARSE_ERROR : PARSE_OK; } -// Parse a 'FRM ' chunk and any image bearing chunks that immediately follow. +// Parse a 'ANMF' chunk and any image bearing chunks that immediately follow. // 'frame_chunk_size' is the previously validated, padded chunk size. static ParseStatus ParseFrame( WebPDemuxer* const dmux, uint32_t frame_chunk_size) { @@ -295,7 +295,7 @@ static ParseStatus ParseFrame( MemBuffer* const mem = &dmux->mem_; Frame* frame; ParseStatus status = - NewFrame(mem, min_size, FRAME_CHUNK_SIZE, frame_chunk_size, &frame); + NewFrame(mem, min_size, ANMF_CHUNK_SIZE, frame_chunk_size, &frame); if (status != PARSE_OK) return status; frame->x_offset_ = 2 * GetLE24s(mem); @@ -303,7 +303,7 @@ static ParseStatus ParseFrame( frame->width_ = 1 + GetLE24s(mem); frame->height_ = 1 + GetLE24s(mem); frame->duration_ = 1 + GetLE24s(mem); - Skip(mem, frame_chunk_size - FRAME_CHUNK_SIZE); // skip any trailing data. + Skip(mem, frame_chunk_size - ANMF_CHUNK_SIZE); // skip any trailing data. if (frame->width_ * (uint64_t)frame->height_ >= MAX_IMAGE_AREA) { return PARSE_ERROR; } @@ -324,7 +324,7 @@ static ParseStatus ParseFrame( return status; } -// Parse a 'TILE' chunk and any image bearing chunks that immediately follow. +// Parse a 'FRGM' chunk and any image bearing chunks that immediately follow. // 'tile_chunk_size' is the previously validated, padded chunk size. static ParseStatus ParseTile(WebPDemuxer* const dmux, uint32_t tile_chunk_size) { @@ -334,13 +334,13 @@ static ParseStatus ParseTile(WebPDemuxer* const dmux, MemBuffer* const mem = &dmux->mem_; Frame* frame; ParseStatus status = - NewFrame(mem, min_size, TILE_CHUNK_SIZE, tile_chunk_size, &frame); + NewFrame(mem, min_size, FRGM_CHUNK_SIZE, tile_chunk_size, &frame); if (status != PARSE_OK) return status; frame->is_tile_ = 1; frame->x_offset_ = 2 * GetLE24s(mem); frame->y_offset_ = 2 * GetLE24s(mem); - Skip(mem, tile_chunk_size - TILE_CHUNK_SIZE); // skip any trailing data. + Skip(mem, tile_chunk_size - FRGM_CHUNK_SIZE); // skip any trailing data. // Store a (potentially partial) tile only if the tile flag is set // and the tile contains some data. @@ -501,11 +501,11 @@ static ParseStatus ParseVP8X(WebPDemuxer* const dmux) { } break; } - case MKFOURCC('F', 'R', 'M', ' '): { + case MKFOURCC('A', 'N', 'M', 'F'): { status = ParseFrame(dmux, chunk_size_padded); break; } - case MKFOURCC('T', 'I', 'L', 'E'): { + case MKFOURCC('F', 'R', 'G', 'M'): { if (dmux->num_frames_ == 0) dmux->num_frames_ = 1; status = ParseTile(dmux, chunk_size_padded); break; @@ -576,7 +576,7 @@ static int IsValidExtendedFormat(const WebPDemuxer* const dmux) { int frame_count = 0, tile_count = 0; // Check frame properties and if the image is composed of tiles that each - // fragment came from a 'TILE'. + // fragment came from a tile. for (; f != NULL && f->frame_num_ == cur_frame_set; f = f->next_) { const ChunkData* const image = f->img_components_; const ChunkData* const alpha = f->img_components_ + 1; @@ -767,7 +767,7 @@ static int SynthesizeFrame(const WebPDemuxer* const dmux, iter->complete_ = tile->complete_; iter->tile_.bytes_ = payload; iter->tile_.size_ = payload_size; - // TODO(jzern): adjust offsets for 'TILE's embedded in 'FRM 's + // TODO(jzern): adjust offsets for 'FRGM's embedded in 'ANMF's return 1; } diff --git a/src/mux/muxedit.c b/src/mux/muxedit.c index 89098e7b..3295f406 100644 --- a/src/mux/muxedit.c +++ b/src/mux/muxedit.c @@ -115,7 +115,7 @@ static WebPMuxError CreateFrameTileData(const WebPData* const image, int width; int height; uint8_t* frame_tile_bytes; - const size_t frame_tile_size = kChunks[is_frame ? IDX_FRAME : IDX_TILE].size; + const size_t frame_tile_size = kChunks[is_frame ? IDX_ANMF : IDX_FRGM].size; const int ok = is_lossless ? VP8LGetInfo(image->bytes_, image->size_, &width, &height, NULL) : @@ -300,8 +300,8 @@ WebPMuxError WebPMuxPushFrame(WebPMux* mux, const WebPMuxFrameInfo* frame, // Sanity checks. if (mux == NULL || frame == NULL) return WEBP_MUX_INVALID_ARGUMENT; - is_frame = (frame->id == WEBP_CHUNK_FRAME); - if (!(is_frame || (frame->id == WEBP_CHUNK_TILE))) { + is_frame = (frame->id == WEBP_CHUNK_ANMF); + if (!(is_frame || (frame->id == WEBP_CHUNK_FRGM))) { return WEBP_MUX_INVALID_ARGUMENT; } @@ -328,7 +328,7 @@ WebPMuxError WebPMuxPushFrame(WebPMux* mux, const WebPMuxFrameInfo* frame, const int x_offset = frame->x_offset_ & ~1; // Snap offsets to even. const int y_offset = frame->y_offset_ & ~1; const int duration = is_frame ? frame->duration_ : 1 /* unused */; - const uint32_t tag = kChunks[is_frame ? IDX_FRAME : IDX_TILE].tag; + const uint32_t tag = kChunks[is_frame ? IDX_ANMF : IDX_FRGM].tag; WebPData frame_tile; if (x_offset < 0 || x_offset >= MAX_POSITION_OFFSET || y_offset < 0 || y_offset >= MAX_POSITION_OFFSET || @@ -392,12 +392,12 @@ static WebPMuxError GetFrameTileInfo(const WebPChunk* const frame_tile_chunk, int* const x_offset, int* const y_offset, int* const duration) { const uint32_t tag = frame_tile_chunk->tag_; - const int is_frame = (tag == kChunks[IDX_FRAME].tag); + const int is_frame = (tag == kChunks[IDX_ANMF].tag); const WebPData* const data = &frame_tile_chunk->data_; const size_t expected_data_size = - is_frame ? FRAME_CHUNK_SIZE : TILE_CHUNK_SIZE; + is_frame ? ANMF_CHUNK_SIZE : FRGM_CHUNK_SIZE; assert(frame_tile_chunk != NULL); - assert(tag == kChunks[IDX_FRAME].tag || tag == kChunks[IDX_TILE].tag); + assert(tag == kChunks[IDX_ANMF].tag || tag == kChunks[IDX_FRGM].tag); if (data->size_ != expected_data_size) return WEBP_MUX_INVALID_ARGUMENT; *x_offset = 2 * GetLE24(data->bytes_ + 0); @@ -433,7 +433,7 @@ static WebPMuxError GetImageInfo(const WebPMuxImage* const wpi, const WebPChunk* const image_chunk = wpi->img_; const WebPChunk* const frame_tile_chunk = wpi->header_; - // Get offsets and duration from FRM/TILE chunk. + // Get offsets and duration from ANMF/FRGM chunk. const WebPMuxError err = GetFrameTileInfo(frame_tile_chunk, x_offset, y_offset, duration); if (err != WEBP_MUX_OK) return err; @@ -531,10 +531,10 @@ static WebPMuxError CreateVP8XChunk(WebPMux* const mux) { } if (images->header_ != NULL) { - if (images->header_->tag_ == kChunks[IDX_TILE].tag) { + if (images->header_->tag_ == kChunks[IDX_FRGM].tag) { // This is a tiled image. flags |= TILE_FLAG; - } else if (images->header_->tag_ == kChunks[IDX_FRAME].tag) { + } else if (images->header_->tag_ == kChunks[IDX_ANMF].tag) { // This is an image with animation. flags |= ANIMATION_FLAG; } @@ -591,7 +591,7 @@ WebPMuxError WebPMuxAssemble(WebPMux* mux, WebPData* assembled_data) { err = WebPMuxNumChunks(mux, kChunks[IDX_LOOP].id, &num_loop_chunks); if (err != WEBP_MUX_OK) return err; if (num_loop_chunks >= 1) { - err = WebPMuxNumChunks(mux, kChunks[IDX_FRAME].id, &num_frames); + err = WebPMuxNumChunks(mux, kChunks[IDX_ANMF].id, &num_frames); if (err != WEBP_MUX_OK) return err; if (num_frames == 0) { err = DeleteLoopCount(mux); diff --git a/src/mux/muxi.h b/src/mux/muxi.h index b9422d3f..f3d93bb0 100644 --- a/src/mux/muxi.h +++ b/src/mux/muxi.h @@ -31,16 +31,16 @@ struct WebPChunk { uint32_t tag_; int owner_; // True if *data_ memory is owned internally. // VP8X, Loop, and other internally created chunks - // like frame/tile are always owned. + // like ANMF/FRGM are always owned. WebPData data_; WebPChunk* next_; }; -// MuxImage object. Store a full webp image (including frame/tile chunk, alpha +// MuxImage object. Store a full WebP image (including ANMF/FRGM chunk, ALPH // chunk and VP8/VP8L chunk), typedef struct WebPMuxImage WebPMuxImage; struct WebPMuxImage { - WebPChunk* header_; // Corresponds to WEBP_CHUNK_FRAME/WEBP_CHUNK_TILE. + WebPChunk* header_; // Corresponds to WEBP_CHUNK_ANMF/WEBP_CHUNK_FRGM. WebPChunk* alpha_; // Corresponds to WEBP_CHUNK_ALPHA. WebPChunk* img_; // Corresponds to WEBP_CHUNK_IMAGE. int is_partial_; // True if only some of the chunks are filled. @@ -66,8 +66,8 @@ typedef enum { IDX_VP8X = 0, IDX_ICCP, IDX_LOOP, - IDX_FRAME, - IDX_TILE, + IDX_ANMF, + IDX_FRGM, IDX_ALPHA, IDX_VP8, IDX_VP8L, @@ -205,8 +205,8 @@ int MuxImageCount(const WebPMuxImage* wpi_list, WebPChunkId id); // Check if given ID corresponds to an image related chunk. static WEBP_INLINE int IsWPI(WebPChunkId id) { switch (id) { - case WEBP_CHUNK_FRAME: - case WEBP_CHUNK_TILE: + case WEBP_CHUNK_ANMF: + case WEBP_CHUNK_FRGM: case WEBP_CHUNK_ALPHA: case WEBP_CHUNK_IMAGE: return 1; default: return 0; @@ -218,8 +218,8 @@ static WEBP_INLINE WebPChunk** MuxImageGetListFromId( const WebPMuxImage* const wpi, WebPChunkId id) { assert(wpi != NULL); switch (id) { - case WEBP_CHUNK_FRAME: - case WEBP_CHUNK_TILE: return (WebPChunk**)&wpi->header_; + case WEBP_CHUNK_ANMF: + case WEBP_CHUNK_FRGM: return (WebPChunk**)&wpi->header_; case WEBP_CHUNK_ALPHA: return (WebPChunk**)&wpi->alpha_; case WEBP_CHUNK_IMAGE: return (WebPChunk**)&wpi->img_; default: return NULL; diff --git a/src/mux/muxinternal.c b/src/mux/muxinternal.c index 20054044..d01f69e0 100644 --- a/src/mux/muxinternal.c +++ b/src/mux/muxinternal.c @@ -23,8 +23,8 @@ const ChunkInfo kChunks[] = { { MKFOURCC('V', 'P', '8', 'X'), WEBP_CHUNK_VP8X, VP8X_CHUNK_SIZE }, { MKFOURCC('I', 'C', 'C', 'P'), WEBP_CHUNK_ICCP, UNDEFINED_CHUNK_SIZE }, { MKFOURCC('L', 'O', 'O', 'P'), WEBP_CHUNK_LOOP, LOOP_CHUNK_SIZE }, - { MKFOURCC('F', 'R', 'M', ' '), WEBP_CHUNK_FRAME, FRAME_CHUNK_SIZE }, - { MKFOURCC('T', 'I', 'L', 'E'), WEBP_CHUNK_TILE, TILE_CHUNK_SIZE }, + { MKFOURCC('A', 'N', 'M', 'F'), WEBP_CHUNK_ANMF, ANMF_CHUNK_SIZE }, + { MKFOURCC('F', 'R', 'G', 'M'), WEBP_CHUNK_FRGM, FRGM_CHUNK_SIZE }, { MKFOURCC('A', 'L', 'P', 'H'), WEBP_CHUNK_ALPHA, UNDEFINED_CHUNK_SIZE }, { MKFOURCC('V', 'P', '8', ' '), WEBP_CHUNK_IMAGE, UNDEFINED_CHUNK_SIZE }, { MKFOURCC('V', 'P', '8', 'L'), WEBP_CHUNK_IMAGE, UNDEFINED_CHUNK_SIZE }, @@ -400,8 +400,8 @@ size_t MuxImageListDiskSize(const WebPMuxImage* wpi_list) { uint8_t* MuxImageEmit(const WebPMuxImage* const wpi, uint8_t* dst) { // Ordering of chunks to be emitted is strictly as follows: - // 1. Frame/Tile chunk (if present). - // 2. Alpha chunk (if present). + // 1. ANMF/FRGM chunk (if present). + // 2. ALPH chunk (if present). // 3. VP8/VP8L chunk. assert(wpi); if (wpi->header_ != NULL) dst = ChunkEmit(wpi->header_, dst); @@ -454,8 +454,8 @@ WebPChunk** MuxGetChunkListFromId(const WebPMux* mux, WebPChunkId id) { WebPMuxError MuxValidateForImage(const WebPMux* const mux) { const int num_images = MuxImageCount(mux->images_, WEBP_CHUNK_IMAGE); - const int num_frames = MuxImageCount(mux->images_, WEBP_CHUNK_FRAME); - const int num_tiles = MuxImageCount(mux->images_, WEBP_CHUNK_TILE); + const int num_frames = MuxImageCount(mux->images_, WEBP_CHUNK_ANMF); + const int num_tiles = MuxImageCount(mux->images_, WEBP_CHUNK_FRGM); if (num_images == 0) { // No images in mux. @@ -526,7 +526,7 @@ WebPMuxError MuxValidate(const WebPMux* const mux) { // At most one loop chunk. err = ValidateChunk(mux, IDX_LOOP, NO_FLAG, flags, 1, &num_loop_chunks); if (err != WEBP_MUX_OK) return err; - err = ValidateChunk(mux, IDX_FRAME, NO_FLAG, flags, -1, &num_frames); + err = ValidateChunk(mux, IDX_ANMF, NO_FLAG, flags, -1, &num_frames); if (err != WEBP_MUX_OK) return err; { @@ -540,7 +540,7 @@ WebPMuxError MuxValidate(const WebPMux* const mux) { } // Tiling: TILE_FLAG and tile chunk(s) are consistent. - err = ValidateChunk(mux, IDX_TILE, TILE_FLAG, flags, -1, &num_tiles); + err = ValidateChunk(mux, IDX_FRGM, TILE_FLAG, flags, -1, &num_tiles); if (err != WEBP_MUX_OK) return err; // Verify either VP8X chunk is present OR there is only one elem in diff --git a/src/mux/muxread.c b/src/mux/muxread.c index 53e5be89..ce4596fb 100644 --- a/src/mux/muxread.c +++ b/src/mux/muxread.c @@ -237,7 +237,7 @@ static WebPMuxError SynthesizeBitstream(const WebPMuxImage* const wpi, const int need_vp8x = (wpi->alpha_ != NULL); const size_t vp8x_size = need_vp8x ? CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE : 0; const size_t alpha_size = need_vp8x ? ChunkDiskSize(wpi->alpha_) : 0; - // Note: No need to output FRM/TILE chunk for a single image. + // Note: No need to output ANMF/FRGM chunk for a single image. const size_t size = RIFF_HEADER_SIZE + vp8x_size + alpha_size + ChunkDiskSize(wpi->img_); uint8_t* const data = (uint8_t*)malloc(size); @@ -299,8 +299,8 @@ static WebPMuxError MuxGetImageInternal(const WebPMuxImage* const wpi, static WebPMuxError MuxGetFrameTileInternal(const WebPMuxImage* const wpi, WebPMuxFrameInfo* const frame) { - const int is_frame = (wpi->header_->tag_ == kChunks[IDX_FRAME].tag); - const CHUNK_INDEX idx = is_frame ? IDX_FRAME : IDX_TILE; + const int is_frame = (wpi->header_->tag_ == kChunks[IDX_ANMF].tag); + const CHUNK_INDEX idx = is_frame ? IDX_ANMF : IDX_FRGM; const WebPData* frame_tile_data; assert(wpi->header_ != NULL); // Already checked by WebPMuxGetFrame(). // Get frame/tile chunk. diff --git a/src/webp/format_constants.h b/src/webp/format_constants.h index 7ce498f6..4accd83d 100644 --- a/src/webp/format_constants.h +++ b/src/webp/format_constants.h @@ -65,9 +65,9 @@ typedef enum { #define CHUNK_SIZE_BYTES 4 // Size needed to store chunk's size. #define CHUNK_HEADER_SIZE 8 // Size of a chunk header. #define RIFF_HEADER_SIZE 12 // Size of the RIFF header ("RIFFnnnnWEBP"). -#define FRAME_CHUNK_SIZE 15 // Size of a FRM chunk. +#define ANMF_CHUNK_SIZE 15 // Size of a ANMF chunk. #define LOOP_CHUNK_SIZE 2 // Size of a LOOP chunk. -#define TILE_CHUNK_SIZE 6 // Size of a TILE chunk. +#define FRGM_CHUNK_SIZE 6 // Size of a FRGM chunk. #define VP8X_CHUNK_SIZE 10 // Size of a VP8X chunk. #define TILING_FLAG_BIT 0x01 // Set if tiles are possibly used. diff --git a/src/webp/mux.h b/src/webp/mux.h index ea7e10cd..42b17a88 100644 --- a/src/webp/mux.h +++ b/src/webp/mux.h @@ -94,8 +94,8 @@ enum WebPChunkId { WEBP_CHUNK_VP8X, // VP8X WEBP_CHUNK_ICCP, // ICCP WEBP_CHUNK_LOOP, // LOOP - WEBP_CHUNK_FRAME, // FRM - WEBP_CHUNK_TILE, // TILE + WEBP_CHUNK_ANMF, // ANMF + WEBP_CHUNK_FRGM, // FRGM WEBP_CHUNK_ALPHA, // ALPH WEBP_CHUNK_IMAGE, // VP8/VP8L WEBP_CHUNK_META, // META @@ -165,7 +165,7 @@ static WEBP_INLINE WebPMux* WebPMuxCreate(const WebPData* bitstream, // Non-image chunks. // Note: Only non-image related chunks should be managed through chunk APIs. -// (Image related chunks are: "FRM ", "TILE", "VP8 ", "VP8L" and "ALPH"). +// (Image related chunks are: "ANMF", "FRGM", "VP8 ", "VP8L" and "ALPH"). // To add, get and delete images, use APIs WebPMuxSetImage(), // WebPMuxPushFrame(), WebPMuxGetFrame() and WebPMuxDeleteFrame(). @@ -226,8 +226,8 @@ struct WebPMuxFrameInfo { 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_FRAME, - // WEBP_CHUNK_TILE or WEBP_CHUNK_IMAGE + WebPChunkId id; // frame type: should be one of WEBP_CHUNK_ANMF, + // WEBP_CHUNK_FRGM or WEBP_CHUNK_IMAGE uint32_t pad[3]; // padding for later use }; @@ -247,7 +247,7 @@ WEBP_EXTERN(WebPMuxError) WebPMuxSetImage( WebPMux* mux, const WebPData* bitstream, int copy_data); // Adds a frame at the end of the mux object. -// Notes: (1) frame.id should be one of WEBP_CHUNK_FRAME or WEBP_CHUNK_TILE +// Notes: (1) frame.id should be one of WEBP_CHUNK_ANMF or WEBP_CHUNK_FRGM // (2) For setting a non-animated non-tiled image, use WebPMuxSetImage() // instead. // (3) Type of frame being pushed must be same as the frames in mux.