More spec/code matching in mux:

- Match offsets, duration, width/height for frames/tiles and enforce
some constraints.
- Note that this also means using 'int's instead of 'uint32_t's for
16-bit and 24-bit fields.

Change-Id: If0b229ad9fce296372d961104aa36731a3b1304b
This commit is contained in:
Urvang Joshi
2012-07-06 11:35:36 +05:30
parent 1bd7dd5097
commit 6808e69db8
9 changed files with 173 additions and 134 deletions

View File

@ -47,7 +47,7 @@ static struct {
int print_info;
uint32_t flags;
uint32_t loop_count;
int loop_count;
int frame_num;
int frame_max;
@ -155,10 +155,10 @@ static void StartDisplay(const WebPDecBuffer* const pic) {
//------------------------------------------------------------------------------
// File decoding
static int Decode(const int frame_number, uint32_t* const duration) {
static int Decode(const int frame_number, int* const duration) {
WebPDecoderConfig* const config = kParams.config;
WebPData *data, image_data;
uint32_t x_off = 0, y_off = 0;
int x_off = 0, y_off = 0;
WebPDecBuffer* const output_buffer = &config->output;
int ok = 0;
@ -192,7 +192,7 @@ static int Decode(const int frame_number, uint32_t* const duration) {
static void decode_callback(int what) {
if (what == 0 && !kParams.done) {
uint32_t duration = 0;
int duration = 0;
if (kParams.mux != NULL) {
if (!Decode(kParams.frame_num, &duration)) {
kParams.decoding_error = 1;
@ -317,7 +317,7 @@ int main(int argc, char *argv[]) {
// Decode first frame
{
uint32_t duration;
int duration;
if (!Decode(1, &duration)) goto Error;
}

View File

@ -186,7 +186,7 @@ static WebPMuxError DisplayInfo(const WebPMux* mux) {
if (flag & ANIMATION_FLAG) {
int nFrames;
uint32_t loop_count;
int loop_count;
err = WebPMuxGetLoopCount(mux, &loop_count);
RETURN_IF_ERROR("Failed to retrieve loop count\n");
printf("Loop Count : %d\n", loop_count);
@ -200,7 +200,7 @@ static WebPMuxError DisplayInfo(const WebPMux* mux) {
printf("No.: x_offset y_offset duration image_size");
printf("\n");
for (i = 1; i <= nFrames; i++) {
uint32_t x_offset, y_offset, duration;
int x_offset, y_offset, duration;
WebPData bitstream;
err = WebPMuxGetFrame(mux, i, &bitstream,
&x_offset, &y_offset, &duration);
@ -223,7 +223,7 @@ static WebPMuxError DisplayInfo(const WebPMux* mux) {
printf("No.: x_offset y_offset image_size");
printf("\n");
for (i = 1; i <= nTiles; i++) {
uint32_t x_offset, y_offset;
int x_offset, y_offset;
WebPData bitstream;
err = WebPMuxGetTile(mux, i, &bitstream, &x_offset, &y_offset);
RETURN_IF_ERROR2("Failed to retrieve tile#%d\n", i);
@ -356,13 +356,13 @@ static int WriteWebP(WebPMux* const mux, const char* filename) {
return ok;
}
static int ParseFrameArgs(const char* args, uint32_t* x_offset,
uint32_t* y_offset, uint32_t* duration) {
static int ParseFrameArgs(const char* args, int* const x_offset,
int* const y_offset, int* const duration) {
return (sscanf(args, "+%d+%d+%d", x_offset, y_offset, duration) == 3);
}
static int ParseTileArgs(const char* args, uint32_t* x_offset,
uint32_t* y_offset) {
static int ParseTileArgs(const char* args,
int* const x_offset, int* const y_offset) {
return (sscanf(args, "+%d+%d", x_offset, y_offset) == 2);
}
@ -690,9 +690,9 @@ static int InitializeConfig(int argc, const char* argv[],
static int GetFrameTile(const WebPMux* mux,
const WebPMuxConfig* config, int isFrame) {
WebPData bitstream;
uint32_t x_offset = 0;
uint32_t y_offset = 0;
uint32_t duration = 0;
int x_offset = 0;
int y_offset = 0;
int duration = 0;
WebPMuxError err = WEBP_MUX_OK;
WebPMux* mux_single = NULL;
long num = 0;
@ -741,8 +741,8 @@ static int Process(const WebPMuxConfig* config) {
WebPMux* mux = NULL;
WebPData webpdata;
WebPData metadata, color_profile;
uint32_t x_offset = 0;
uint32_t y_offset = 0;
int x_offset = 0;
int y_offset = 0;
WebPMuxError err = WEBP_MUX_OK;
int index = 0;
int ok = 1;
@ -804,7 +804,7 @@ static int Process(const WebPMuxConfig* config) {
ErrorString(err), Err2);
}
} else if (feature->args_[index].subtype_ == SUBTYPE_FRM) {
uint32_t duration;
int duration;
ok = ReadFileToWebPData(feature->args_[index].filename_,
&webpdata);
if (!ok) goto Err2;