[flvmeta] 7 new revisions pushed by marc.noi...@gmail.com on 2011-11-17 10:48 GMT

4 views
Skip to first unread message

flv...@googlecode.com

unread,
Nov 17, 2011, 5:49:14 AM11/17/11
to flvme...@googlegroups.com
7 new revisions:

Revision: e76f73464fc8
Author: Marc Noirot <marc....@gmail.com>
Date: Tue Sep 27 05:00:38 2011
Log: Fixed datasize calculation....
http://code.google.com/p/flvmeta/source/detail?r=e76f73464fc8

Revision: 5ae0d0c525b4
Author: Marc Noirot <marc....@gmail.com>
Date: Thu Nov 17 01:46:52 2011
Log: Fixed git command invocation to use the
OUTPUT_STRIP_TRAILING_WHITESPA...
http://code.google.com/p/flvmeta/source/detail?r=5ae0d0c525b4

Revision: d9978abb3c68
Author: Marc Noirot <marc....@gmail.com>
Date: Tue Sep 27 09:26:08 2011
Log: Started work to check keyframe metadata.
http://code.google.com/p/flvmeta/source/detail?r=d9978abb3c68

Revision: 8650a2ad461d
Author: Marc Noirot <marc....@gmail.com>
Date: Wed Sep 28 10:06:03 2011
Log: Added keyframe checks....
http://code.google.com/p/flvmeta/source/detail?r=8650a2ad461d

Revision: c03447b52222
Author: Marc Noirot <marc....@gmail.com>
Date: Fri Sep 30 08:56:31 2011
Log: Started work on better referencing check message codes.
http://code.google.com/p/flvmeta/source/detail?r=c03447b52222

Revision: 6c39da3ba076
Author: Marc Noirot <marc....@gmail.com>
Date: Mon Oct 3 09:31:05 2011
Log: Continued work on better referencing check message codes.
http://code.google.com/p/flvmeta/source/detail?r=6c39da3ba076

Revision: d59a2c406d92
Author: Marc Noirot <marc....@gmail.com>
Date: Tue Oct 4 11:14:05 2011
Log: Finished work on better referencing check message codes.
http://code.google.com/p/flvmeta/source/detail?r=d59a2c406d92

==============================================================================
Revision: e76f73464fc8
Author: Marc Noirot <marc....@gmail.com>
Date: Tue Sep 27 05:00:38 2011
Log: Fixed datasize calculation.
Fixed datasize and filesize checking.
Changed invalid previous tag size error into a non-fatal error.
Fixed height and width presence report.

http://code.google.com/p/flvmeta/source/detail?r=e76f73464fc8

Modified:
/src/check.c
/src/info.c
/src/info.h

=======================================
--- /src/check.c Tue Sep 20 09:21:37 2011
+++ /src/check.c Tue Sep 27 05:00:38 2011
@@ -32,7 +32,7 @@
#include <sys/types.h>
#include <sys/stat.h>

-#define MAX_ACCEPTABLE_TAG_BODY_LENGTH 100000
+#define MAX_ACCEPTABLE_TAG_BODY_LENGTH 1000000

/* start the report */
static void report_start(const flvmeta_opts * opts) {
@@ -162,7 +162,7 @@
int have_desync;
int have_on_metadata;
file_offset_t on_metadata_offset;
- amf_data * on_metadata;
+ amf_data * on_metadata, * on_metadata_name;
int have_on_last_second;
uint32 on_last_second_timestamp;

@@ -184,7 +184,7 @@
video_frames_number = keyframes_number = 0;
have_on_metadata = 0;
on_metadata_offset = 0;
- on_metadata = NULL;
+ on_metadata = on_metadata_name = NULL;
have_on_last_second = 0;
on_last_second_timestamp = 0;

@@ -557,6 +557,7 @@
have_on_metadata = 1;
on_metadata_offset = offset;
on_metadata = amf_data_clone(data);
+ on_metadata_name = amf_data_clone(name);

/* check onMetadata type */
if (amf_data_get_type(on_metadata) !=
AMF_TYPE_ASSOCIATIVE_ARRAY) {
@@ -601,7 +602,6 @@
if (prev_tag_size != FLV_TAG_SIZE + body_length) {
sprintf(message, "previous tag size should be %d, %d found
instead", FLV_TAG_SIZE + body_length, prev_tag_size);
print_error("E12037", flv_get_offset(flv_in), message);
- goto end;
}
}

@@ -762,7 +762,7 @@
if (!strcmp((char*)name, "lasttimestamp")) {
if (type == AMF_TYPE_NUMBER) {
number64 lasttimestamp, file_lasttimestamp;
- lasttimestamp = info.last_timestamp;
+ lasttimestamp = info.last_timestamp / 1000.0;
file_lasttimestamp = amf_number_get_value(data);

if (fabs(file_lasttimestamp - lasttimestamp) >= 1.0) {
@@ -782,7 +782,7 @@
if (!strcmp((char*)name, "lastkeyframetimestamp")) {
if (type == AMF_TYPE_NUMBER) {
number64 lastkeyframetimestamp,
file_lastkeyframetimestamp;
- lastkeyframetimestamp = info.last_keyframe_timestamp;
+ lastkeyframetimestamp = info.last_keyframe_timestamp /
1000.0;
file_lastkeyframetimestamp =
amf_number_get_value(data);

if (fabs(file_lastkeyframetimestamp -
lastkeyframetimestamp) >= 1.0) {
@@ -812,6 +812,7 @@
sprintf(message, "width should be %.12g,
got %.12g", width, file_width);
print_warning("W80045", on_metadata_offset,
message);
}
+ have_width = 1;
}
else {
print_warning("W80047", on_metadata_offset, "width
metadata present without video data");
@@ -837,6 +838,7 @@
sprintf(message, "height should be %.12g,
got %.12g", height, file_height);
print_warning("W80045", on_metadata_offset,
message);
}
+ have_height = 1;
}
else {
print_warning("W80047",
on_metadata_offset, "height metadata present without video data");
@@ -988,7 +990,7 @@

/* stereo: (boolean) */
if (!strcmp((char*)name, "stereo")) {
- if (type == AMF_TYPE_NUMBER) {
+ if (type == AMF_TYPE_BOOLEAN) {
if (info.have_audio) {
uint8 stereo, file_stereo;
stereo = (info.audio_stereo ==
FLV_AUDIO_TAG_SOUND_TYPE_STEREO);
@@ -1015,8 +1017,12 @@
if (!strcmp((char*)name, "filesize")) {
if (type == AMF_TYPE_NUMBER) {
number64 filesize, file_filesize;
+ uint32 on_metadata_size;
+
+ on_metadata_size = FLV_TAG_SIZE + sizeof(uint32_be) +
+ (uint32)(amf_data_size(on_metadata_name) +
amf_data_size(on_metadata));
filesize = (number64)(FLV_HEADER_SIZE +
info.total_prev_tags_size + info.video_data_size +
- info.audio_data_size + info.meta_data_size +
amf_data_size(on_metadata));
+ info.audio_data_size + info.meta_data_size +
on_metadata_size);
file_filesize = amf_number_get_value(data);

if (fabs(file_filesize - filesize) >= 1.0) {
@@ -1086,8 +1092,11 @@
if (!strcmp((char*)name, "datasize")) {
if (type == AMF_TYPE_NUMBER) {
number64 datasize, file_datasize;
- datasize = (number64)(info.meta_data_only_size +
- amf_data_size(on_metadata) + (uint32)(FLV_TAG_SIZE
+ sizeof(uint32_be)));
+ uint32 on_metadata_size;
+
+ on_metadata_size = FLV_TAG_SIZE +
+ (uint32)(amf_data_size(on_metadata_name) +
amf_data_size(on_metadata));
+ datasize = (number64)(info.meta_data_size +
on_metadata_size);
file_datasize = amf_number_get_value(data);

if (fabs(file_datasize - datasize) >= 1.0) {
@@ -1249,6 +1258,7 @@
/* check array sizes */


+
/* iterate in parallel, until a diff is found
*/
}
}
@@ -1287,6 +1297,7 @@
report_end(opts, errors, warnings);

amf_data_free(on_metadata);
+ amf_data_free(on_metadata_name);
flv_close(flv_in);

return (errors > 0) ? ERROR_INVALID_FLV_FILE : OK;
=======================================
--- /src/info.c Mon Jun 27 07:07:36 2011
+++ /src/info.c Tue Sep 27 05:00:38 2011
@@ -214,7 +214,6 @@
info->video_data_size = 0;
info->audio_data_size = 0;
info->meta_data_size = 0;
- info->meta_data_only_size = 0;
info->real_video_data_size = 0;
info->real_audio_data_size = 0;
info->video_first_timestamp = 0;
@@ -364,7 +363,7 @@
}
}

- /* just ignore metadata that don't have a proper name */
+ /* check metadata name */
if (body_length > 0 && amf_data_get_type(tag_name) ==
AMF_TYPE_STRING) {
char * name = (char *)amf_string_get_bytes(tag_name);
size_t len = (size_t)amf_string_get_size(tag_name);
@@ -394,7 +393,6 @@
if (!strncmp(name, "onLastSecond", len)) {
info->have_on_last_second = 1;
}
- info->meta_data_only_size += body_length;
info->meta_data_size += (body_length + FLV_TAG_SIZE);
info->total_prev_tags_size += sizeof(uint32_be);
if (data != NULL) {
@@ -402,8 +400,8 @@
}
}
}
+ /* just ignore metadata that don't have a proper name */
else {
- info->meta_data_only_size += body_length;
info->meta_data_size += (body_length + FLV_TAG_SIZE);
info->total_prev_tags_size += sizeof(uint32_be);
amf_data_free(data);
@@ -693,16 +691,17 @@
node_f = amf_array_next(node_f);
}

- /* compute data size, ie. size of metadata excluding tags and
prev_tag_size */
- data_size = info->meta_data_only_size + new_on_metadata_size;
+ /* compute data size, ie. size of metadata excluding prev_tag_size */
+ data_size = info->meta_data_size + FLV_TAG_SIZE +
+ (uint32)(amf_data_size(meta->on_metadata_name) +
amf_data_size(meta->on_metadata));
if (!info->have_on_last_second && opts->insert_onlastsecond) {
- data_size += (uint32)on_last_second_size;
+ data_size += (uint32)on_last_second_size + FLV_TAG_SIZE;
}
amf_number_set_value(amf_total_data_size, (number64)data_size);

/* compute total file size */
- total_filesize = FLV_HEADER_SIZE + info->total_prev_tags_size +
info->video_data_size
- + info->audio_data_size + info->meta_data_size +
new_on_metadata_size;
+ total_filesize = FLV_HEADER_SIZE + info->total_prev_tags_size +
info->video_data_size +
+ info->audio_data_size + info->meta_data_size +
new_on_metadata_size;

if (!info->have_on_last_second && opts->insert_onlastsecond) {
/* if we have to add onLastSecond, we must count the header and
new prevTagSize we add */
@@ -711,100 +710,3 @@

amf_number_set_value(amf_total_filesize, (number64)total_filesize);
}
-
-/*
- compute the metadata without reserving space for actual insertion
-*/
-void compute_current_metadata(flv_info * info, flv_metadata * meta) {
- file_offset_t data_size;
- number64 duration, video_data_rate, framerate;
- amf_data * amf_total_data_size;
-
- meta->on_last_second_name = amf_str("onLastSecond");
- meta->on_last_second = amf_associative_array_new();
-
- meta->on_metadata_name = amf_str("onMetaData");
- meta->on_metadata = amf_associative_array_new();
-
- amf_associative_array_add(meta->on_metadata, "hasMetadata",
amf_boolean_new(1));
- amf_associative_array_add(meta->on_metadata, "hasVideo",
amf_boolean_new(info->have_video));
- amf_associative_array_add(meta->on_metadata, "hasAudio",
amf_boolean_new(info->have_audio));
-
- if (info->have_audio) {
- duration = (info->last_timestamp - info->first_timestamp +
info->audio_frame_duration) / 1000.0;
- }
- else {
- duration = (info->last_timestamp - info->first_timestamp +
info->video_frame_duration) / 1000.0;
- }
- amf_associative_array_add(meta->on_metadata, "duration",
amf_number_new(duration));
-
- amf_associative_array_add(meta->on_metadata, "lasttimestamp",
amf_number_new(info->last_timestamp / 1000.0));
- amf_associative_array_add(meta->on_metadata, "lastkeyframetimestamp",
amf_number_new(info->last_keyframe_timestamp / 1000.0));
-
- if (info->video_width > 0)
- amf_associative_array_add(meta->on_metadata, "width",
amf_number_new(info->video_width));
- if (info->video_height > 0)
- amf_associative_array_add(meta->on_metadata, "height",
amf_number_new(info->video_height));
-
- video_data_rate = ((info->real_video_data_size / 1024.0) * 8.0) /
duration;
- amf_associative_array_add(meta->on_metadata, "videodatarate",
amf_number_new(video_data_rate));
-
- framerate = info->video_frames_number / duration;
- amf_associative_array_add(meta->on_metadata, "framerate",
amf_number_new(framerate));
-
- if (info->have_audio) {
- number64 audio_khz, audio_sample_rate;
- number64 audio_data_rate = ((info->real_audio_data_size / 1024.0)
* 8.0) / duration;
- amf_associative_array_add(meta->on_metadata, "audiodatarate",
amf_number_new(audio_data_rate));
-
- audio_khz = 0.0;
- switch (info->audio_rate) {
- case FLV_AUDIO_TAG_SOUND_RATE_5_5: audio_khz = 5500.0; break;
- case FLV_AUDIO_TAG_SOUND_RATE_11: audio_khz = 11000.0; break;
- case FLV_AUDIO_TAG_SOUND_RATE_22: audio_khz = 22050.0; break;
- case FLV_AUDIO_TAG_SOUND_RATE_44: audio_khz = 44100.0; break;
- }
- amf_associative_array_add(meta->on_metadata, "audiosamplerate",
amf_number_new(audio_khz));
- audio_sample_rate = 0.0;
- switch (info->audio_size) {
- case FLV_AUDIO_TAG_SOUND_SIZE_8: audio_sample_rate = 8.0;
break;
- case FLV_AUDIO_TAG_SOUND_SIZE_16: audio_sample_rate = 16.0;
break;
- }
- amf_associative_array_add(meta->on_metadata, "audiosamplesize",
amf_number_new(audio_sample_rate));
- amf_associative_array_add(meta->on_metadata, "stereo",
amf_boolean_new(info->audio_stereo == FLV_AUDIO_TAG_SOUND_TYPE_STEREO));
- }
-
- if (info->have_video) {
- amf_associative_array_add(meta->on_metadata, "videosize",
amf_number_new((number64)info->video_data_size));
- }
- if (info->have_audio) {
- amf_associative_array_add(meta->on_metadata, "audiosize",
amf_number_new((number64)info->audio_data_size));
- }
-
- /* to be computed later */
- amf_total_data_size = amf_number_new(0);
- amf_associative_array_add(meta->on_metadata, "datasize",
amf_total_data_size);
-
- amf_associative_array_add(meta->on_metadata, "metadatacreator",
amf_str(PACKAGE_STRING));
-
- amf_associative_array_add(meta->on_metadata, "metadatadate",
amf_date_new((number64)time(NULL)*1000, 0));
- if (info->have_audio) {
- amf_associative_array_add(meta->on_metadata, "audiocodecid",
amf_number_new((number64)info->audio_codec));
- }
- if (info->have_video) {
- amf_associative_array_add(meta->on_metadata, "videocodecid",
amf_number_new((number64)info->video_codec));
- }
- if (info->have_audio && info->have_video) {
- number64 audio_delay = ((sint32)info->audio_first_timestamp -
(sint32)info->video_first_timestamp) / 1000.0;
- amf_associative_array_add(meta->on_metadata, "audiodelay",
amf_number_new((number64)audio_delay));
- }
- amf_associative_array_add(meta->on_metadata, "canSeekToEnd",
amf_boolean_new(info->can_seek_to_end));
-
- amf_associative_array_add(meta->on_metadata, "hasKeyframes",
amf_boolean_new(info->have_keyframes));
- amf_associative_array_add(meta->on_metadata, "keyframes",
info->keyframes);
-
- /* compute data size, ie. size of metadata excluding tags and
prev_tag_size */
- data_size = info->meta_data_only_size +
amf_data_size(info->original_on_metadata) + (uint32)(FLV_TAG_SIZE +
sizeof(uint32_be));
-
- amf_number_set_value(amf_total_data_size, (number64)data_size);
-}
=======================================
--- /src/info.h Mon Jun 27 07:07:36 2011
+++ /src/info.h Tue Sep 27 05:00:38 2011
@@ -41,7 +41,6 @@
file_offset_t video_data_size;
file_offset_t audio_data_size;
file_offset_t meta_data_size;
- file_offset_t meta_data_only_size;
file_offset_t real_video_data_size;
file_offset_t real_audio_data_size;
uint32 video_first_timestamp;

==============================================================================
Revision: 5ae0d0c525b4
Author: Marc Noirot <marc....@gmail.com>
Date: Thu Nov 17 01:46:52 2011
Log: Fixed git command invocation to use the
OUTPUT_STRIP_TRAILING_WHITESPACE parameter.

http://code.google.com/p/flvmeta/source/detail?r=5ae0d0c525b4

Modified:
/CMakeLists.txt

=======================================
--- /CMakeLists.txt Tue Sep 20 09:24:49 2011
+++ /CMakeLists.txt Thu Nov 17 01:46:52 2011
@@ -13,8 +13,8 @@
if(GIT)
execute_process(COMMAND "${GIT}" rev-parse --short HEAD
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
- OUTPUT_VARIABLE GIT_RELEASE)
- string(REPLACE "\n" "" GIT_RELEASE ${GIT_RELEASE})
+ OUTPUT_VARIABLE GIT_RELEASE
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
set(FLVMETA_VERSION "${FLVMETA_VERSION}-g${GIT_RELEASE}")
message(STATUS "Set unstable flvmeta version to ${FLVMETA_VERSION}")
unset(GIT CACHE)

==============================================================================
Revision: d9978abb3c68
Author: Marc Noirot <marc....@gmail.com>
Date: Tue Sep 27 09:26:08 2011
Log: Started work to check keyframe metadata.

http://code.google.com/p/flvmeta/source/detail?r=d9978abb3c68

Modified:
/src/check.c

=======================================
--- /src/check.c Tue Sep 27 05:00:38 2011
+++ /src/check.c Tue Sep 27 09:26:08 2011
@@ -1222,10 +1222,14 @@
/* keyframes: (object) */
if (!strcmp((char*)name, "keyframes")) {
if (type == AMF_TYPE_OBJECT) {
- amf_data * times, * filepositions;
+ amf_data * times, * filepositions, * file_times, *
file_filepositions;
times = amf_object_get(data, "times");
filepositions = amf_object_get(data, "filepositions");

+ /* TODO : do not check an array against itself, not a
very productive approach */
+ file_times = amf_object_get(on_metadata, "times");
+ file_filepositions =
amf_object_get(on_metadata, "filepositions");
+
/* check sub-arrays' presence */
if (times == NULL) {
print_warning("W81050",
on_metadata_offset, "Missing times metadata");
@@ -1248,7 +1252,7 @@

fp_type = amf_data_get_type(filepositions);
if (fp_type != AMF_TYPE_ARRAY) {
- sprintf(message, "Invalid type for times:
expected %s, got %s",
+ sprintf(message, "Invalid type for
filepositions: expected %s, got %s",
get_amf_type_string(AMF_TYPE_ARRAY),
get_amf_type_string(fp_type));
print_warning("W81046", on_metadata_offset,
message);
@@ -1256,7 +1260,10 @@

if (times_type == AMF_TYPE_ARRAY && fp_type ==
AMF_TYPE_ARRAY) {
/* check array sizes */
-
+ if (amf_array_size(times) !=
amf_array_size(file_times) ||
+ amf_array_size(filepositions) !=
amf_array_size(file_filepositions)) {
+ print_warning("W81047",
on_metadata_offset, "Invalid keyframes");
+ }


/* iterate in parallel, until a diff is found
*/

==============================================================================
Revision: 8650a2ad461d
Author: Marc Noirot <marc....@gmail.com>
Date: Wed Sep 28 10:06:03 2011
Log: Added keyframe checks.
Fixed handling of overflowing metadata.

http://code.google.com/p/flvmeta/source/detail?r=8650a2ad461d

Modified:
/src/check.c
/src/flv.c
/src/flv.h

=======================================
--- /src/check.c Tue Sep 27 09:26:08 2011
+++ /src/check.c Wed Sep 28 10:06:03 2011
@@ -535,8 +535,8 @@
sprintf(message, "%d bytes not read in tag body
after metadata end", body_length - flv_in->current_tag_body_length);
print_warning("W70040", flv_get_offset(flv_in),
message);
}
- else if (flv_in->current_tag_body_length < 0) {
- sprintf(message, "%d bytes missing from tag body
after metadata end", flv_in->current_tag_body_length - body_length);
+ else if (flv_in->current_tag_body_overflow > 0) {
+ sprintf(message, "%d bytes missing from tag body
after metadata end", flv_in->current_tag_body_overflow);
print_warning("W70041", flv_get_offset(flv_in),
message);
}

@@ -700,7 +700,7 @@
}
}
else {
- sprintf(message, "Invalid type for hasMetadata:
expected %s, got %s",
+ sprintf(message, "invalid type for hasMetadata:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -716,7 +716,7 @@
}
}
else {
- sprintf(message, "Invalid type for hasVideo:
expected %s, got %s",
+ sprintf(message, "invalid type for hasVideo:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -732,7 +732,7 @@
}
}
else {
- sprintf(message, "Invalid type for hasAudio:
expected %s, got %s",
+ sprintf(message, "invalid type for hasAudio:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -751,7 +751,7 @@
}
}
else {
- sprintf(message, "Invalid type for duration:
expected %s, got %s",
+ sprintf(message, "invalid type for duration:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -771,7 +771,7 @@
}
}
else {
- sprintf(message, "Invalid type for lasttimestamp:
expected %s, got %s",
+ sprintf(message, "invalid type for lasttimestamp:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -793,7 +793,7 @@
}
}
else {
- sprintf(message, "Invalid type for
lastkeyframetimestamp: expected %s, got %s",
+ sprintf(message, "invalid type for
lastkeyframetimestamp: expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -819,7 +819,7 @@
}
}
else {
- sprintf(message, "Invalid type for width: expected %s,
got %s",
+ sprintf(message, "invalid type for width: expected %s,
got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -845,7 +845,7 @@
}
}
else {
- sprintf(message, "Invalid type for height:
expected %s, got %s",
+ sprintf(message, "invalid type for height:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -870,7 +870,7 @@
}
}
else {
- sprintf(message, "Invalid type for videodatarate:
expected %s, got %s",
+ sprintf(message, "invalid type for videodatarate:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -895,7 +895,7 @@
}
}
else {
- sprintf(message, "Invalid type for framerate:
expected %s, got %s",
+ sprintf(message, "invalid type for framerate:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -920,7 +920,7 @@
}
}
else {
- sprintf(message, "Invalid type for audiodatarate:
expected %s, got %s",
+ sprintf(message, "invalid type for audiodatarate:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -952,7 +952,7 @@
}
}
else {
- sprintf(message, "Invalid type for audiosamplerate:
expected %s, got %s",
+ sprintf(message, "invalid type for audiosamplerate:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -981,7 +981,7 @@
}
}
else {
- sprintf(message, "Invalid type for audiosamplesize:
expected %s, got %s",
+ sprintf(message, "invalid type for audiosamplesize:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1006,7 +1006,7 @@
}
}
else {
- sprintf(message, "Invalid type for stereo:
expected %s, got %s",
+ sprintf(message, "invalid type for stereo:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1017,12 +1017,8 @@
if (!strcmp((char*)name, "filesize")) {
if (type == AMF_TYPE_NUMBER) {
number64 filesize, file_filesize;
- uint32 on_metadata_size;
-
- on_metadata_size = FLV_TAG_SIZE + sizeof(uint32_be) +
- (uint32)(amf_data_size(on_metadata_name) +
amf_data_size(on_metadata));
- filesize = (number64)(FLV_HEADER_SIZE +
info.total_prev_tags_size + info.video_data_size +
- info.audio_data_size + info.meta_data_size +
on_metadata_size);
+
+ filesize = (number64)(file_stats.st_size);
file_filesize = amf_number_get_value(data);

if (fabs(file_filesize - filesize) >= 1.0) {
@@ -1031,7 +1027,7 @@
}
}
else {
- sprintf(message, "Invalid type for filesize:
expected %s, got %s",
+ sprintf(message, "invalid type for filesize:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1056,7 +1052,7 @@
}
}
else {
- sprintf(message, "Invalid type for videosize:
expected %s, got %s",
+ sprintf(message, "invalid type for videosize:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1081,7 +1077,7 @@
}
}
else {
- sprintf(message, "Invalid type for audiosize:
expected %s, got %s",
+ sprintf(message, "invalid type for audiosize:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1105,7 +1101,7 @@
}
}
else {
- sprintf(message, "Invalid type for datasize:
expected %s, got %s",
+ sprintf(message, "invalid type for datasize:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1130,7 +1126,7 @@
}
}
else {
- sprintf(message, "Invalid type for audiocodecid:
expected %s, got %s",
+ sprintf(message, "invalid type for audiocodecid:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1155,7 +1151,7 @@
}
}
else {
- sprintf(message, "Invalid type for videocodecid:
expected %s, got %s",
+ sprintf(message, "invalid type for videocodecid:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1180,7 +1176,7 @@
}
}
else {
- sprintf(message, "Invalid type for audiodelay:
expected %s, got %s",
+ sprintf(message, "invalid type for audiodelay:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1196,7 +1192,7 @@
}
}
else {
- sprintf(message, "Invalid type for canSeekToEnd:
expected %s, got %s",
+ sprintf(message, "invalid type for canSeekToEnd:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1212,7 +1208,7 @@
}
}
else {
- sprintf(message, "Invalid type for hasKeyframes:
expected %s, got %s",
+ sprintf(message, "invalid type for hasKeyframes:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1222,37 +1218,34 @@
/* keyframes: (object) */
if (!strcmp((char*)name, "keyframes")) {
if (type == AMF_TYPE_OBJECT) {
- amf_data * times, * filepositions, * file_times, *
file_filepositions;
- times = amf_object_get(data, "times");
- filepositions = amf_object_get(data, "filepositions");
-
- /* TODO : do not check an array against itself, not a
very productive approach */
- file_times = amf_object_get(on_metadata, "times");
- file_filepositions =
amf_object_get(on_metadata, "filepositions");
+ amf_data * file_times, * file_filepositions;
+
+ file_times = amf_object_get(data, "times");
+ file_filepositions =
amf_object_get(data, "filepositions");

/* check sub-arrays' presence */
- if (times == NULL) {
+ if (file_times == NULL) {
print_warning("W81050",
on_metadata_offset, "Missing times metadata");
}
- if (filepositions == NULL) {
+ if (file_filepositions == NULL) {
print_warning("W81051",
on_metadata_offset, "Missing filepositions metadata");
}

- if (times != NULL && filepositions != NULL) {
+ if (file_times != NULL && file_filepositions != NULL) {
/* check types */
uint8 times_type, fp_type;

- times_type = amf_data_get_type(times);
+ times_type = amf_data_get_type(file_times);
if (times_type != AMF_TYPE_ARRAY) {
- sprintf(message, "Invalid type for times:
expected %s, got %s",
+ sprintf(message, "invalid type for times:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_ARRAY),
get_amf_type_string(times_type));
print_warning("W81046", on_metadata_offset,
message);
}

- fp_type = amf_data_get_type(filepositions);
+ fp_type = amf_data_get_type(file_filepositions);
if (fp_type != AMF_TYPE_ARRAY) {
- sprintf(message, "Invalid type for
filepositions: expected %s, got %s",
+ sprintf(message, "invalid type for
filepositions: expected %s, got %s",
get_amf_type_string(AMF_TYPE_ARRAY),
get_amf_type_string(fp_type));
print_warning("W81046", on_metadata_offset,
message);
@@ -1260,18 +1253,84 @@

if (times_type == AMF_TYPE_ARRAY && fp_type ==
AMF_TYPE_ARRAY) {
/* check array sizes */
- if (amf_array_size(times) !=
amf_array_size(file_times) ||
- amf_array_size(filepositions) !=
amf_array_size(file_filepositions)) {
- print_warning("W81047",
on_metadata_offset, "Invalid keyframes");
- }
-
-
- /* iterate in parallel, until a diff is found
*/
+ if (amf_array_size(info.times) !=
amf_array_size(file_times) ||
+ amf_array_size(info.filepositions) !=
amf_array_size(file_filepositions) ||
+ amf_array_size(file_filepositions) !=
amf_array_size(file_times)) {
+ print_warning("W81047",
on_metadata_offset, "invalid keyframes arrays length");
+ }
+ else {
+ number64 last_file_time;
+ int have_last_time;
+ amf_node * ff_node, * ft_node, * f_node, *
t_node;
+
+ /* iterate in parallel, report diffs */
+ last_file_time = 0;
+ have_last_time = 0;
+
+ t_node = amf_array_first(info.times);
+ f_node =
amf_array_first(info.filepositions);
+ ft_node = amf_array_first(file_times);
+ ff_node =
amf_array_first(file_filepositions);
+
+ while (t_node != NULL && f_node != NULL &&
ft_node != NULL && ff_node != NULL) {
+ number64 time, f_time, position,
f_position;
+ time =
amf_number_get_value(amf_array_get(t_node));
+ position =
amf_number_get_value(amf_array_get(f_node));
+
+ /* time */
+ if
(amf_data_get_type(amf_array_get(ft_node)) != AMF_TYPE_NUMBER) {
+ sprintf(message, "invalid type for
time: expected %s, got %s",
+
get_amf_type_string(AMF_TYPE_NUMBER),
+ get_amf_type_string(type));
+ print_warning("W81048",
on_metadata_offset, message);
+ }
+ else {
+ f_time =
amf_number_get_value(amf_array_get(ft_node));
+
+ if (fabs(time - f_time) >= 1.0) {
+ sprintf(message, "invalid
keyframe time: expected %.12g, got %.12g",
+ time, f_time);
+ print_warning("W81049",
on_metadata_offset, message);
+ }
+
+ /* check for duplicate time, can
happen in H.264 files */
+ if (have_last_time &&
last_file_time == f_time) {
+ sprintf(message, "Duplicate
keyframe time: %.12g", f_time);
+ print_warning("W81050",
on_metadata_offset, message);
+ }
+ have_last_time = 1;
+ last_file_time = f_time;
+ }
+
+ /* position */
+ if
(amf_data_get_type(amf_array_get(ff_node)) != AMF_TYPE_NUMBER) {
+ sprintf(message, "invalid type for
file position: expected %s, got %s",
+
get_amf_type_string(AMF_TYPE_NUMBER),
+ get_amf_type_string(type));
+ print_warning("W81051",
on_metadata_offset, message);
+ }
+ else {
+ f_position =
amf_number_get_value(amf_array_get(ff_node));
+
+ if (fabs(time - f_time) >= 1.0) {
+ sprintf(message, "invalid
keyframe file position: expected %.12g, got %.12g",
+ time, f_time);
+ print_warning("W81052",
on_metadata_offset, message);
+ }
+ }
+
+ /* next entry */
+ t_node = amf_array_next(t_node);
+ f_node = amf_array_next(f_node);
+ ft_node = amf_array_next(ft_node);
+ ff_node = amf_array_next(ff_node);
+ }
+ }
}
}
}
else {
- sprintf(message, "Invalid type for keyframes:
expected %s, got %s",
+ sprintf(message, "invalid type for keyframes:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
print_warning("W80046", on_metadata_offset, message);
@@ -1287,17 +1346,17 @@
/* missing width or height can cause size problem in various
players */
if (info.have_video) {
if (!have_width) {
- print_error("E60047", on_metadata_offset, "width
information not found in metadata, problems might occur in some players");
+ print_error("E60053", on_metadata_offset, "width
information not found in metadata, problems might occur in some players");
}
if (!have_height) {
- print_error("E60047", on_metadata_offset, "height
information not found in metadata, problems might occur in some players");
+ print_error("E60054", on_metadata_offset, "height
information not found in metadata, problems might occur in some players");
}
}
}

/* could we compute video resolution ? */
if (info.video_width == 0 && info.video_height == 0) {
- print_warning("W60044", file_stats.st_size, "unable to determine
video resolution");
+ print_warning("W60055", file_stats.st_size, "unable to determine
video resolution");
}

end:
=======================================
--- /src/flv.c Mon Jun 27 07:07:36 2011
+++ /src/flv.c Wed Sep 28 10:06:03 2011
@@ -42,6 +42,7 @@
return NULL;
}
stream->current_tag_body_length = 0;
+ stream->current_tag_body_overflow = 0;
stream->current_tag_offset = 0;
stream->state = FLV_STREAM_STATE_START;
return stream;
@@ -139,6 +140,7 @@
else {
memcpy(&stream->current_tag, tag, sizeof(flv_tag));
stream->current_tag_body_length =
uint24_be_to_uint32(tag->body_length);
+ stream->current_tag_body_overflow = 0;
stream->state = FLV_STREAM_STATE_TAG_BODY;
return FLV_OK;
}
@@ -164,10 +166,19 @@
return FLV_ERROR_EOF;
}

- stream->current_tag_body_length -= sizeof(flv_audio_tag);
-
- if (stream->current_tag_body_length <= 0) {
+ if (stream->current_tag_body_length >= sizeof(flv_audio_tag)) {
+ stream->current_tag_body_length -= sizeof(flv_audio_tag);
+ }
+ else {
+ stream->current_tag_body_overflow = sizeof(flv_audio_tag) -
stream->current_tag_body_length;
+ stream->current_tag_body_length = 0;
+ }
+
+ if (stream->current_tag_body_length == 0) {
stream->state = FLV_STREAM_STATE_PREV_TAG_SIZE;
+ if (stream->current_tag_body_overflow > 0) {
+ lfs_fseek(stream->flvin,
-(file_offset_t)stream->current_tag_body_overflow, SEEK_CUR);
+ }
}

return FLV_OK;
@@ -189,10 +200,19 @@
return FLV_ERROR_EOF;
}

- stream->current_tag_body_length -= sizeof(flv_video_tag);
-
- if (stream->current_tag_body_length <= 0) {
+ if (stream->current_tag_body_length >= sizeof(flv_video_tag)) {
+ stream->current_tag_body_length -= sizeof(flv_video_tag);
+ }
+ else {
+ stream->current_tag_body_overflow = sizeof(flv_video_tag) -
stream->current_tag_body_length;
+ stream->current_tag_body_length = 0;
+ }
+
+ if (stream->current_tag_body_length == 0) {
stream->state = FLV_STREAM_STATE_PREV_TAG_SIZE;
+ if (stream->current_tag_body_overflow > 0) {
+ lfs_fseek(stream->flvin,
-(file_offset_t)stream->current_tag_body_overflow, SEEK_CUR);
+ }
}

return FLV_OK;
@@ -201,6 +221,7 @@
int flv_read_metadata(flv_stream * stream, amf_data ** name, amf_data **
data) {
amf_data * d;
byte error_code;
+ size_t data_size;

if (stream == NULL
|| stream->flvin == NULL
@@ -224,7 +245,22 @@
return FLV_ERROR_INVALID_METADATA_NAME;
}

- stream->current_tag_body_length -= amf_data_size(d);
+ /* if only name can be read, metadata are invalid */
+ data_size = amf_data_size(d);
+ if (stream->current_tag_body_length > data_size) {
+ stream->current_tag_body_length -= data_size;
+ }
+ else {
+ stream->current_tag_body_length = 0;
+ stream->current_tag_body_overflow = data_size -
stream->current_tag_body_length;
+
+ stream->state = FLV_STREAM_STATE_PREV_TAG_SIZE;
+ if (stream->current_tag_body_overflow > 0) {
+ lfs_fseek(stream->flvin,
-(file_offset_t)stream->current_tag_body_overflow, SEEK_CUR);
+ }
+
+ return FLV_ERROR_INVALID_METADATA;
+ }

/* read metadata contents */
d = amf_data_file_read(stream->flvin);
@@ -237,10 +273,20 @@
return FLV_ERROR_INVALID_METADATA;
}

- stream->current_tag_body_length -= amf_data_size(d);
-
- if (stream->current_tag_body_length <= 0) {
+ data_size = amf_data_size(d);
+ if (stream->current_tag_body_length >= data_size) {
+ stream->current_tag_body_length -= data_size;
+ }
+ else {
+ stream->current_tag_body_overflow = data_size -
stream->current_tag_body_length;
+ stream->current_tag_body_length = 0;
+ }
+
+ if (stream->current_tag_body_length == 0) {
stream->state = FLV_STREAM_STATE_PREV_TAG_SIZE;
+ if (stream->current_tag_body_overflow > 0) {
+ lfs_fseek(stream->flvin,
-(file_offset_t)stream->current_tag_body_overflow, SEEK_CUR);
+ }
}

return FLV_OK;
=======================================
--- /src/flv.h Mon Jun 27 07:07:36 2011
+++ /src/flv.h Wed Sep 28 10:06:03 2011
@@ -158,6 +158,7 @@
flv_tag current_tag;
file_offset_t current_tag_offset;
uint32 current_tag_body_length;
+ uint32 current_tag_body_overflow;
} flv_stream;

/* FLV stream functions */

==============================================================================
Revision: c03447b52222
Author: Marc Noirot <marc....@gmail.com>
Date: Fri Sep 30 08:56:31 2011
Log: Started work on better referencing check message codes.

http://code.google.com/p/flvmeta/source/detail?r=c03447b52222

Modified:
/src/check.c
/src/check.h

=======================================
--- /src/check.c Wed Sep 28 10:06:03 2011
+++ /src/check.c Fri Sep 30 08:56:31 2011
@@ -208,57 +208,57 @@
/* check signature */
result = flv_read_header(flv_in, &header);
if (result == FLV_ERROR_EOF) {
- print_fatal("F11001", 0, "unexpected end of file in header");
+ print_fatal(FATAL_HEADER_EOF, 0, "unexpected end of file in
header");
goto end;
}
else if (result == FLV_ERROR_NO_FLV) {
- print_fatal("F11002", 0, "FLV signature not found in header");
+ print_fatal(FATAL_HEADER_NO_SIGNATURE, 0, "FLV signature not found
in header");
goto end;
}

/* version */
if (header.version != FLV_VERSION) {
sprintf(message, "header version should be 1, %d found instead",
header.version);
- print_error("E11003", 3, message);
+ print_error(ERROR_HEADER_BAD_VERSION, 3, message);
}

/* video and audio flags */
if (!flv_header_has_audio(header) && !flv_header_has_video(header)) {
- print_error("E11004", 4, "header signals the file does not contain
video tags or audio tags");
+ print_error(ERROR_HEADER_NO_STREAMS, 4, "header signals the file
does not contain video tags or audio tags");
}
else if (!flv_header_has_audio(header)) {
- print_info("I11005", 4, "header signals the file does not contain
audio tags");
+ print_info(INFO_HEADER_NO_AUDIO, 4, "header signals the file does
not contain audio tags");
}
else if (!flv_header_has_video(header)) {
- print_warning("W11006", 4, "header signals the file does not
contain video tags");
+ print_warning(WARNING_HEADER_NO_VIDEO, 4, "header signals the file
does not contain video tags");
}

/* reserved flags */
if (header.flags & 0xFA) {
- print_error("E11007", 4, "header reserved flags are not zero");
+ print_error(ERROR_HEADER_BAD_RESERVED_FLAGS, 4, "header reserved
flags are not zero");
}

/* offset */
if (flv_header_get_offset(header) != 9) {
sprintf(message, "header offset should be 9, %d found instead",
flv_header_get_offset(header));
- print_error("E11008", 5, message);
+ print_error(ERROR_HEADER_BAD_OFFSET, 5, message);
}

/** check first previous tag size **/

result = flv_read_prev_tag_size(flv_in, &prev_tag_size);
if (result == FLV_ERROR_EOF) {
- print_fatal("F12009", 9, "unexpected end of file in previous tag
size");
+ print_fatal(FATAL_PREV_TAG_SIZE_EOF, 9, "unexpected end of file in
previous tag size");
goto end;
}
else if (prev_tag_size != 0) {
sprintf(message, "first previous tag size should be 0, %d found
instead", prev_tag_size);
- print_error("E12010", 9, message);
+ print_error(ERROR_PREV_TAG_SIZE_BAD_FIRST, 9, message);
}

/* we reached the end of file: no tags in file */
if (flv_get_offset(flv_in) == file_stats.st_size) {
- print_fatal("F10011", 13, "file does not contain tags");
+ print_fatal(FATAL_GENERAL_NO_TAG, 13, "file does not contain
tags");
goto end;
}

@@ -271,7 +271,7 @@

result = flv_read_tag(flv_in, &tag);
if (result != FLV_OK) {
- print_fatal("F20012", flv_get_offset(flv_in), "unexpected end
of file in tag");
+ print_fatal(FATAL_TAG_EOF, flv_get_offset(flv_in), "unexpected
end of file in tag");
goto end;
}

@@ -288,19 +288,19 @@
&& tag.type != FLV_TAG_TYPE_META
) {
sprintf(message, "unknown tag type %hhd", tag.type);
- print_error("E30013", offset, message);
+ print_error(ERROR_TAG_TYPE_UNKNOWN, offset, message);
}

/* check consistency with global header */
if (!have_video && tag.type == FLV_TAG_TYPE_VIDEO) {
if (!flv_header_has_video(header)) {
- print_warning("W11014", offset, "video tag found despite
header signaling the file contains no video");
+ print_warning(WARNING_HEADER_UNEXPECTED_VIDEO,
offset, "video tag found despite header signaling the file contains no
video");
}
have_video = 1;
}
if (!have_audio && tag.type == FLV_TAG_TYPE_AUDIO) {
if (!flv_header_has_audio(header)) {
- print_warning("W11015", offset, "audio tag found despite
header signaling the file contains no audio");
+ print_warning(WARNING_HEADER_UNEXPECTED_AUDIO,
offset, "audio tag found despite header signaling the file contains no
audio");
}
have_audio = 1;
}
@@ -308,15 +308,15 @@
/* check body length */
if (body_length > (file_stats.st_size - flv_get_offset(flv_in))) {
sprintf(message, "tag body length (%d bytes) exceeds file
size", body_length);
- print_fatal("F20016", offset + 1, message);
+ print_fatal(FATAL_TAG_BODY_LENGTH_OVERFLOW, offset + 1,
message);
goto end;
}
else if (body_length > MAX_ACCEPTABLE_TAG_BODY_LENGTH) {
sprintf(message, "tag body length (%d bytes) is abnormally
large", body_length);
- print_warning("W20017", offset + 1, message);
+ print_warning(WARNING_TAG_BODY_LENGTH_LARGE, offset + 1,
message);
}
else if (body_length == 0) {
- print_warning("W20018", offset + 1, "tag body length is zero");
+ print_warning(WARNING_TAG_BODY_LENGTH_ZERO, offset + 1, "tag
body length is zero");
}

/** check timestamp **/
@@ -325,14 +325,14 @@
/* check whether first timestamp is zero */
if (tag_number == 1 && timestamp != 0) {
sprintf(message, "first timestamp should be zero, %d found
instead", timestamp);
- print_error("E40019", offset + 4, message);
+ print_error(ERROR_TIMESTAMP_FIRST_NON_ZERO, offset + 4,
message);
}

/* check whether timestamps decrease in a given stream */
if (tag.type == FLV_TAG_TYPE_AUDIO) {
if (last_audio_timestamp > timestamp) {
sprintf(message, "audio tag timestamps are decreasing
from %d to %d", last_audio_timestamp, timestamp);
- print_error("E40020", offset + 4, message);
+ print_error(ERROR_TIMESTAMP_AUDIO_DECREASE, offset + 4,
message);
}
last_audio_timestamp = timestamp;
decr_timestamp_signaled = 1;
@@ -340,7 +340,7 @@
if (tag.type == FLV_TAG_TYPE_VIDEO) {
if (last_video_timestamp > timestamp) {
sprintf(message, "video tag timestamps are decreasing
from %d to %d", last_video_timestamp, timestamp);
- print_error("E40021", offset + 4, message);
+ print_error(ERROR_TIMESTAMP_VIDEO_DECREASE, offset + 4,
message);
}
last_video_timestamp = timestamp;
decr_timestamp_signaled = 1;
@@ -348,13 +348,13 @@

/* check for overflow error */
if (last_timestamp > timestamp && last_timestamp - timestamp >
0xF00000) {
- print_error("E40022", offset + 4, "extended bits not used
after timestamp overflow");
+ print_error(ERROR_TIMESTAMP_OVERFLOW, offset + 4, "extended
bits not used after timestamp overflow");
}

/* check whether timestamps decrease globally */
else if (!decr_timestamp_signaled && last_timestamp > timestamp &&
last_timestamp - timestamp >= 1000) {
sprintf(message, "timestamps are decreasing from %d to %d",
last_timestamp, timestamp);
- print_error("E40023", offset + 4, message);
+ print_error(ERROR_TIMESTAMP_DECREASE, offset + 4, message);
}

last_timestamp = timestamp;
@@ -363,14 +363,14 @@
if (have_video && have_audio && !have_desync &&
labs(last_video_timestamp - last_audio_timestamp) >= 1000) {
sprintf(message, "audio and video streams are desynchronized
by %ld ms",
labs(last_video_timestamp - last_audio_timestamp));
- print_warning("W40024", offset + 4, message);
+ print_warning(WARNING_TIMESTAMP_DESYNC, offset + 4, message);
have_desync = 1; /* do not repeat */
}

/** stream id must be zero **/
if (stream_id != 0) {
sprintf(message, "tag stream id must be zero, %d found
instead", stream_id);
- print_error("E20025", offset + 8, message);
+ print_error(ERROR_TAG_STREAM_ID_NON_ZERO, offset + 8, message);
}

/* check tag body contents only if not empty */
@@ -383,20 +383,20 @@

result = flv_read_audio_tag(flv_in, &at);
if (result == FLV_ERROR_EOF) {
- print_fatal("F20012", offset + 11, "unexpected end of
file in tag");
+ print_fatal(FATAL_TAG_EOF, offset + 11, "unexpected
end of file in tag");
goto end;
}

/* check whether the format varies between tags */
if (have_prev_audio_tag && prev_audio_tag != at) {
- print_warning("W51026", offset + 11, "audio format
changed since last tag");
+ print_warning(WARNING_AUDIO_FORMAT_CHANGED, offset +
11, "audio format changed since last tag");
}

/* check format */
audio_format = flv_audio_tag_sound_format(at);
if (audio_format == 12 || audio_format == 13) {
sprintf(message, "unknown audio format %d",
audio_format);
- print_warning("W51027", offset + 11, message);
+ print_warning(WARNING_AUDIO_CODEC_UNKNOWN, offset +
11, message);
}
else if (audio_format == FLV_AUDIO_TAG_SOUND_FORMAT_G711_A
|| audio_format == FLV_AUDIO_TAG_SOUND_FORMAT_G711_MU
@@ -405,14 +405,14 @@
|| audio_format ==
FLV_AUDIO_TAG_SOUND_FORMAT_DEVICE_SPECIFIC
) {
sprintf(message, "audio format %d is reserved for
internal use", audio_format);
- print_warning("W51028", offset + 11, message);
+ print_warning(WARNING_AUDIO_CODEC_RESERVED, offset +
11, message);
}

/* check consistency, see flash video spec */
if (flv_audio_tag_sound_rate(at) !=
FLV_AUDIO_TAG_SOUND_RATE_44
&& audio_format == FLV_AUDIO_TAG_SOUND_FORMAT_AAC
) {
- print_warning("W51029", offset + 11, "audio data in
AAC format should have a 44KHz rate, field will be ignored");
+ print_warning(WARNING_AUDIO_CODEC_AAC_BAD, offset +
11, "audio data in AAC format should have a 44KHz rate, field will be
ignored");
}

if (flv_audio_tag_sound_type(at) ==
FLV_AUDIO_TAG_SOUND_TYPE_STEREO
@@ -420,7 +420,7 @@
|| audio_format ==
FLV_AUDIO_TAG_SOUND_FORMAT_NELLYMOSER_16_MONO
|| audio_format ==
FLV_AUDIO_TAG_SOUND_FORMAT_NELLYMOSER_8_MONO)
) {
- print_warning("W51030", offset + 11, "audio data in
Nellymoser format cannot be stereo, field will be ignored");
+ print_warning(WARNING_AUDIO_CODEC_NELLYMOSER_BAD,
offset + 11, "audio data in Nellymoser format cannot be stereo, field will
be ignored");
}

else if (flv_audio_tag_sound_type(at) ==
FLV_AUDIO_TAG_SOUND_TYPE_MONO
=======================================
--- /src/check.h Mon Jun 27 07:07:36 2011
+++ /src/check.h Fri Sep 30 08:56:31 2011
@@ -26,6 +26,61 @@

#include "flvmeta.h"

+/* message level codes */
+#define LEVEL_FATAL "F"
+#define LEVEL_ERROR "E"
+#define LEVEL_WARNING "W"
+#define LEVEL_INFO "I"
+
+/* message topic codes */
+#define TOPIC_GENERAL_FORMAT "10"
+#define TOPIC_HEADER "11"
+#define TOPIC_PREV_TAG_SIZE "12"
+#define TOPIC_TAG_FORMAT "20"
+#define TOPIC_TAG_TYPES "30"
+#define TOPIC_TIMESTAMPS "40"
+#define TOPIC_AUDIO_DATA "50"
+#define TOPIC_AUDIO_CODECS "51"
+#define TOPIC_VIDEO_DATA "60"
+#define TOPIC_VIDEO_CODECS "61"
+#define TOPIC_METADATA "70"
+#define TOPIC_AMF_DATA "80"
+#define TOPIC_KEYFRAMES "81"
+#define TOPIC_CUE_POINTS "82"
+
+/* info, warning, error codes, sorted by unique identifier */
+#define FATAL_HEADER_EOF LEVEL_FATAL
TOPIC_HEADER "001"
+#define FATAL_HEADER_NO_SIGNATURE LEVEL_FATAL
TOPIC_HEADER "002"
+#define ERROR_HEADER_BAD_VERSION LEVEL_ERROR
TOPIC_HEADER "003"
+#define ERROR_HEADER_NO_STREAMS LEVEL_ERROR
TOPIC_HEADER "004"
+#define INFO_HEADER_NO_AUDIO LEVEL_INFO
TOPIC_HEADER "005"
+#define WARNING_HEADER_NO_VIDEO LEVEL_WARNING
TOPIC_HEADER "006"
+#define ERROR_HEADER_BAD_RESERVED_FLAGS LEVEL_ERROR
TOPIC_HEADER "007"
+#define ERROR_HEADER_BAD_OFFSET LEVEL_ERROR
TOPIC_HEADER "008"
+#define FATAL_PREV_TAG_SIZE_EOF LEVEL_FATAL
TOPIC_PREV_TAG_SIZE "009"
+#define ERROR_PREV_TAG_SIZE_BAD_FIRST LEVEL_ERROR
TOPIC_PREV_TAG_SIZE "010"
+#define FATAL_GENERAL_NO_TAG LEVEL_FATAL
TOPIC_GENERAL_FORMAT "011"
+#define FATAL_TAG_EOF LEVEL_FATAL
TOPIC_TAG_FORMAT "012"
+#define ERROR_TAG_TYPE_UNKNOWN LEVEL_ERROR
TOPIC_TAG_TYPES "013"
+#define WARNING_HEADER_UNEXPECTED_VIDEO LEVEL_WARNING
TOPIC_HEADER "014"
+#define WARNING_HEADER_UNEXPECTED_AUDIO LEVEL_WARNING
TOPIC_HEADER "015"
+#define FATAL_TAG_BODY_LENGTH_OVERFLOW LEVEL_FATAL
TOPIC_TAG_FORMAT "016"
+#define WARNING_TAG_BODY_LENGTH_LARGE LEVEL_WARNING
TOPIC_TAG_FORMAT "017"
+#define WARNING_TAG_BODY_LENGTH_ZERO LEVEL_WARNING
TOPIC_TAG_FORMAT "018"
+#define ERROR_TIMESTAMP_FIRST_NON_ZERO LEVEL_ERROR
TOPIC_TIMESTAMPS "019"
+#define ERROR_TIMESTAMP_AUDIO_DECREASE LEVEL_ERROR
TOPIC_TIMESTAMPS "020"
+#define ERROR_TIMESTAMP_VIDEO_DECREASE LEVEL_ERROR
TOPIC_TIMESTAMPS "021"
+#define ERROR_TIMESTAMP_OVERFLOW LEVEL_ERROR
TOPIC_TIMESTAMPS "022"
+#define ERROR_TIMESTAMP_DECREASE LEVEL_ERROR
TOPIC_TIMESTAMPS "023"
+#define WARNING_TIMESTAMP_DESYNC LEVEL_WARNING
TOPIC_TIMESTAMPS "024"
+#define ERROR_TAG_STREAM_ID_NON_ZERO LEVEL_ERROR
TOPIC_TAG_FORMAT "025"
+#define WARNING_AUDIO_FORMAT_CHANGED LEVEL_WARNING
TOPIC_AUDIO_DATA "026"
+#define WARNING_AUDIO_CODEC_UNKNOWN LEVEL_WARNING
TOPIC_AUDIO_CODECS "027"
+#define WARNING_AUDIO_CODEC_RESERVED LEVEL_WARNING
TOPIC_AUDIO_CODECS "028"
+#define WARNING_AUDIO_CODEC_AAC_BAD LEVEL_WARNING
TOPIC_AUDIO_CODECS "029"
+#define WARNING_AUDIO_CODEC_NELLYMOSER_BAD LEVEL_WARNING
TOPIC_AUDIO_CODECS "030"
+
+
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

==============================================================================
Revision: 6c39da3ba076
Author: Marc Noirot <marc....@gmail.com>
Date: Mon Oct 3 09:31:05 2011
Log: Continued work on better referencing check message codes.

http://code.google.com/p/flvmeta/source/detail?r=6c39da3ba076

Modified:
/src/check.c
/src/check.h

=======================================
--- /src/check.c Fri Sep 30 08:56:31 2011
+++ /src/check.c Mon Oct 3 09:31:05 2011
@@ -426,11 +426,11 @@
else if (flv_audio_tag_sound_type(at) ==
FLV_AUDIO_TAG_SOUND_TYPE_MONO
&& audio_format == FLV_AUDIO_TAG_SOUND_FORMAT_AAC
) {
- print_warning("W51031", offset + 11, "audio data in
AAC format should be stereo, field will be ignored");
+ print_warning(WARNING_AUDIO_CODEC_AAC_MONO, offset +
11, "audio data in AAC format should be stereo, field will be ignored");
}

else if (audio_format ==
FLV_AUDIO_TAG_SOUND_FORMAT_LINEAR_PCM) {
- print_warning("W51032", offset + 11, "audio data in
Linear PCM, platform endian format should not be used because of
non-portability");
+ print_warning(WARNING_AUDIO_CODEC_LINEAR_PCM, offset +
11, "audio data in Linear PCM, platform endian format should not be used
because of non-portability");
}

prev_audio_tag = at;
@@ -445,13 +445,13 @@

result = flv_read_video_tag(flv_in, &vt);
if (result == FLV_ERROR_EOF) {
- print_fatal("F20012", offset + 11, "unexpected end of
file in tag");
+ print_fatal(FATAL_TAG_EOF, offset + 11, "unexpected
end of file in tag");
goto end;
}

/* check whether the format varies between tags */
if (have_prev_video_tag &&
flv_video_tag_codec_id(prev_video_tag) != flv_video_tag_codec_id(vt)) {
- print_warning("W60033", offset + 11, "video format
changed since last tag");
+ print_warning(WARNING_VIDEO_FORMAT_CHANGED, offset +
11, "video format changed since last tag");
}

/* check video frame type */
@@ -463,7 +463,7 @@
&& video_frame_type !=
FLV_VIDEO_TAG_FRAME_TYPE_COMMAND_FRAME
) {
sprintf(message, "unknown video frame type %d",
video_frame_type);
- print_error("E60034", offset + 11, message);
+ print_error(ERROR_VIDEO_FRAME_TYPE_UNKNOWN, offset +
11, message);
}

if (video_frame_type == FLV_VIDEO_TAG_FRAME_TYPE_KEYFRAME)
{
@@ -472,7 +472,7 @@

/* check whether first frame is a keyframe */
if (!have_prev_video_tag && video_frame_type !=
FLV_VIDEO_TAG_FRAME_TYPE_KEYFRAME) {
- print_warning("W60035", offset + 11, "first video
frame is not a keyframe, playback will suffer");
+ print_warning(WARNING_VIDEO_NO_FIRST_KEYFRAME, offset
+ 11, "first video frame is not a keyframe, playback will suffer");
}

/* check video codec */
@@ -486,12 +486,12 @@
&& video_codec != FLV_VIDEO_TAG_CODEC_AVC
) {
sprintf(message, "unknown video codec id %d",
video_codec);
- print_error("E61034", offset + 11, message);
+ print_error(ERROR_VIDEO_CODEC_UNKNOWN, offset + 11,
message);
}

/* according to spec, JPEG codec is not currently used */
if (video_codec == FLV_VIDEO_TAG_CODEC_JPEG) {
- print_warning("W61035", offset + 11, "JPEG codec not
currently used");
+ print_warning(WARNING_VIDEO_CODEC_JPEG, offset +
11, "JPEG codec not currently used");
}

prev_video_tag = vt;
@@ -505,39 +505,39 @@
result = flv_read_metadata(flv_in, &name, &data);

if (result == FLV_ERROR_EOF) {
- print_fatal("F20012", offset + 11, "unexpected end of
file in tag");
+ print_fatal(FATAL_TAG_EOF, offset + 11, "unexpected
end of file in tag");
amf_data_free(name);
amf_data_free(data);
goto end;
}
else if (result == FLV_ERROR_EMPTY_TAG) {
- print_warning("W70038", offset + 11, "empty metadata
tag");
+ print_warning(WARNING_METADATA_EMPTY, offset +
11, "empty metadata tag");
}
else if (result == FLV_ERROR_INVALID_METADATA_NAME) {
- print_error("E70039", offset + 11, "invalid metadata
name");
+ print_error(ERROR_METADATA_NAME_INVALID, offset +
11, "invalid metadata name");
}
else if (result == FLV_ERROR_INVALID_METADATA) {
- print_error("E70039", offset + 11, "invalid metadata");
+ print_error(ERROR_METADATA_DATA_INVALID, offset +
11, "invalid metadata");
}
else if (amf_data_get_type(name) != AMF_TYPE_STRING) {
/* name type checking */
sprintf(message, "invalid metadata name type: %d,
should be a string (2)", amf_data_get_type(name));
- print_error("E70038", offset, message);
+ print_error(ERROR_METADATA_NAME_INVALID_TYPE, offset,
message);
}
else {
/* empty name checking */
if (amf_string_get_size(name) == 0) {
- print_warning("W70038", offset, "empty metadata
name");
+ print_warning(WARNING_METADATA_NAME_EMPTY,
offset, "empty metadata name");
}

/* check whether all body size has been read */
if (flv_in->current_tag_body_length > 0) {
sprintf(message, "%d bytes not read in tag body
after metadata end", body_length - flv_in->current_tag_body_length);
- print_warning("W70040", flv_get_offset(flv_in),
message);
+ print_warning(WARNING_METADATA_DATA_REMAINING,
flv_get_offset(flv_in), message);
}
else if (flv_in->current_tag_body_overflow > 0) {
sprintf(message, "%d bytes missing from tag body
after metadata end", flv_in->current_tag_body_overflow);
- print_warning("W70041", flv_get_offset(flv_in),
message);
+ print_warning(WARNING_METADATA_DATA_MISSING,
flv_get_offset(flv_in), message);
}

/* onLastSecond checking */
@@ -547,7 +547,7 @@
on_last_second_timestamp = timestamp;
}
else {
- print_warning("W70038", offset, "duplicate
onLastSecond event");
+
print_warning(WARNING_METADATA_LAST_SECOND_DUP, offset, "duplicate
onLastSecond event");
}
}

@@ -562,19 +562,19 @@
/* check onMetadata type */
if (amf_data_get_type(on_metadata) !=
AMF_TYPE_ASSOCIATIVE_ARRAY) {
sprintf(message, "invalid onMetaData data
type: %d, should be an associative array (8)",
amf_data_get_type(on_metadata));
- print_error("E70038", offset, message);
+
print_error(ERROR_METADATA_DATA_INVALID_TYPE, offset, message);
}

/* onMetaData must be the first tag at 0
timestamp */
if (tag_number != 1) {
- print_warning("W70038",
offset, "onMetadata event found after the first tag");
+ print_warning(WARNING_METADATA_BAD_TAG,
offset, "onMetadata event found after the first tag");
}
if (timestamp != 0) {
- print_warning("W70038",
offset, "onMetadata event found after timestamp zero");
+
print_warning(WARNING_METADATA_BAD_TIMESTAMP, offset, "onMetadata event
found after timestamp zero");
}
}
else {
- print_warning("W70038", offset, "duplicate
onMetaData event");
+ print_warning(WARNING_METADATA_DUPLICATE,
offset, "duplicate onMetaData event");
}
}

@@ -583,7 +583,7 @@
&&
strcmp((char*)amf_string_get_bytes(name), "onCuePoint")
&&
strcmp((char*)amf_string_get_bytes(name), "onLastSecond")) {
sprintf(message, "unknown metadata event
name: '%s'", (char*)amf_string_get_bytes(name));
- print_info("I70039", flv_get_offset(flv_in),
message);
+ print_info(INFO_METADATA_NAME_UNKNOWN,
flv_get_offset(flv_in), message);
}
}

@@ -595,13 +595,13 @@
/* check body length against previous tag size */
result = flv_read_prev_tag_size(flv_in, &prev_tag_size);
if (result != FLV_OK) {
- print_fatal("F12036", flv_get_offset(flv_in), "unexpected end
of file after tag");
+ print_fatal(FATAL_PREV_TAG_SIZE_EOF,
flv_get_offset(flv_in), "unexpected end of file in previous tag size");
goto end;
}

if (prev_tag_size != FLV_TAG_SIZE + body_length) {
sprintf(message, "previous tag size should be %d, %d found
instead", FLV_TAG_SIZE + body_length, prev_tag_size);
- print_error("E12037", flv_get_offset(flv_in), message);
+ print_error(ERROR_PREV_TAG_SIZE_BAD, flv_get_offset(flv_in),
message);
}
}

@@ -609,46 +609,46 @@

/* check consistency with global header */
if (!have_video && flv_header_has_video(header)) {
- print_warning("W11038", 4, "no video tag found despite header
signaling the file contains video");
+ print_warning(WARNING_HEADER_VIDEO_NOT_FOUND, 4, "no video tag
found despite header signaling the file contains video");
}
if (!have_audio && flv_header_has_audio(header)) {
- print_warning("W11039", 4, "no audio tag found despite header
signaling the file contains audio");
+ print_warning(WARNING_HEADER_AUDIO_NOT_FOUND, 4, "no audio tag
found despite header signaling the file contains audio");
}

/* check last timestamps */
if (have_video && have_audio && labs(last_audio_timestamp -
last_video_timestamp) >= 1000) {
if (last_audio_timestamp > last_video_timestamp) {
sprintf(message, "video stops %d ms before audio",
last_audio_timestamp - last_video_timestamp);
- print_warning("W40040", file_stats.st_size, message);
+ print_warning(WARNING_TIMESTAMP_VIDEO_ENDS_FIRST,
file_stats.st_size, message);
}
else {
sprintf(message, "audio stops %d ms before video",
last_video_timestamp - last_audio_timestamp);
- print_warning("W40041", file_stats.st_size, message);
+ print_warning(WARNING_TIMESTAMP_AUDIO_ENDS_FIRST,
file_stats.st_size, message);
}
}

/* check video keyframes */
if (have_video && keyframes_number == 0) {
- print_warning("W60042", file_stats.st_size, "no keyframe detected,
file is probably broken or incomplete");
+ print_warning(WARNING_VIDEO_NO_KEYFRAME, file_stats.st_size, "no
keyframe detected, file is probably broken or incomplete");
}
if (have_video && keyframes_number == video_frames_number) {
- print_warning("W60043", file_stats.st_size, "only keyframes
detected, probably inefficient compression scheme used");
+ print_warning(WARNING_VIDEO_ONLY_KEYFRAMES,
file_stats.st_size, "only keyframes detected, probably inefficient
compression scheme used");
}

/* only keyframes + onLastSecond bug */
if (have_video && have_on_last_second && keyframes_number ==
video_frames_number) {
- print_warning("W60044", file_stats.st_size, "only keyframes
detected and onLastSecond event present, file is probably not playable");
+ print_warning(WARNING_VIDEO_ONLY_KF_LAST_SEC,
file_stats.st_size, "only keyframes detected and onLastSecond event
present, file is probably not playable");
}

/* check onLastSecond timestamp */
if (have_on_last_second && (last_timestamp - on_last_second_timestamp)
>= 2000) {
sprintf(message, "onLastSecond event located %d ms before the last
tag", last_timestamp - on_last_second_timestamp);
- print_warning("W70050", file_stats.st_size, message);
+ print_warning(WARNING_METADATA_LAST_SECOND_BAD,
file_stats.st_size, message);
}

/* check onMetaData presence */
if (!have_on_metadata) {
- print_warning("W70044", file_stats.st_size, "onMetaData event not
found, file might not be playable");
+ print_warning(WARNING_METADATA_NOT_PRESENT,
file_stats.st_size, "onMetaData event not found, file might not be
playable");
}
else {
amf_node * n;
@@ -667,7 +667,7 @@

flv_reset(flv_in);
if (get_flv_info(flv_in, &info, &opts_loc) != OK) {
- print_fatal("F10042", 0, "unable to compute metadata");
+ print_fatal(FATAL_INFO_COMPUTATION_ERROR, 0, "unable to
compute file information");
goto end;
}

@@ -696,14 +696,14 @@
if (!strcmp((char*)name, "hasMetadata")) {
if (type == AMF_TYPE_BOOLEAN) {
if (amf_boolean_get_value(data) == 0) {
- print_warning("W80045",
on_metadata_offset, "hasMetadata should be set to true");
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, "hasMetadata should be set to true");
}
}
else {
sprintf(message, "invalid type for hasMetadata:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -712,14 +712,14 @@
if (type == AMF_TYPE_BOOLEAN) {
if (amf_boolean_get_value(data) != info.have_video) {
sprintf(message, "hasVideo should be set to %s",
info.have_video ? "true" : "false");
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
sprintf(message, "invalid type for hasVideo:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -728,14 +728,14 @@
if (type == AMF_TYPE_BOOLEAN) {
if (amf_boolean_get_value(data) != info.have_audio) {
sprintf(message, "hasAudio should be set to %s",
info.have_audio ? "true" : "false");
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
sprintf(message, "invalid type for hasAudio:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -747,14 +747,14 @@

if (fabs(file_duration - duration) >= 1.0) {
sprintf(message, "duration should be %.12g,
got %.12g", duration, file_duration);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
sprintf(message, "invalid type for duration:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -767,14 +767,14 @@

if (fabs(file_lasttimestamp - lasttimestamp) >= 1.0) {
sprintf(message, "lasttimestamp should be %.12g,
got %.12g", lasttimestamp, file_lasttimestamp);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
sprintf(message, "invalid type for lasttimestamp:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -789,14 +789,14 @@
sprintf(message, "lastkeyframetimestamp should
be %.12g, got %.12g",
lastkeyframetimestamp,
file_lastkeyframetimestamp);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
sprintf(message, "invalid type for
lastkeyframetimestamp: expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -810,7 +810,7 @@

if (fabs(file_width - width) >= 1.0) {
sprintf(message, "width should be %.12g,
got %.12g", width, file_width);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
have_width = 1;
}
@@ -822,7 +822,7 @@
sprintf(message, "invalid type for width: expected %s,
got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -836,7 +836,7 @@

if (fabs(file_height - height) >= 1.0) {
sprintf(message, "height should be %.12g,
got %.12g", height, file_height);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
have_height = 1;
}
@@ -848,7 +848,7 @@
sprintf(message, "invalid type for height:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -862,7 +862,7 @@

if (fabs(file_videodatarate - videodatarate) >=
1.0) {
sprintf(message, "videodatarate should
be %.12g, got %.12g", videodatarate, file_videodatarate);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
@@ -873,7 +873,7 @@
sprintf(message, "invalid type for videodatarate:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -887,7 +887,7 @@

if (fabs(file_framerate - framerate) >= 1.0) {
sprintf(message, "framerate should be %.12g,
got %.12g", framerate, file_framerate);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
@@ -898,7 +898,7 @@
sprintf(message, "invalid type for framerate:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -912,7 +912,7 @@

if (fabs(file_audiodatarate - audiodatarate) >=
1.0) {
sprintf(message, "audiodatarate should
be %.12g, got %.12g", audiodatarate, file_audiodatarate);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
@@ -923,7 +923,7 @@
sprintf(message, "invalid type for audiodatarate:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -944,7 +944,7 @@
/* 100 tolerance, since 44000 is sometimes used
instead of 44100 */
if (fabs(file_audiosamplerate - audiosamplerate) >
100.0) {
sprintf(message, "audiosamplerate should
be %.12g, got %.12g", audiosamplerate, file_audiosamplerate);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
@@ -955,7 +955,7 @@
sprintf(message, "invalid type for audiosamplerate:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -973,7 +973,7 @@

if (fabs(file_audiosamplesize - audiosamplesize)
>= 1.0) {
sprintf(message, "audiosamplesize should
be %.12g, got %.12g", audiosamplesize, file_audiosamplesize);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
@@ -984,7 +984,7 @@
sprintf(message, "invalid type for audiosamplesize:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -998,7 +998,7 @@

if (file_stereo != stereo) {
sprintf(message, "stereo should be %s",
stereo ? "true" : "false");
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
@@ -1009,7 +1009,7 @@
sprintf(message, "invalid type for stereo:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -1023,14 +1023,14 @@

if (fabs(file_filesize - filesize) >= 1.0) {
sprintf(message, "filesize should be %.12g,
got %.12g", filesize, file_filesize);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
sprintf(message, "invalid type for filesize:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -1044,7 +1044,7 @@

if (fabs(file_videosize - videosize) >= 1.0) {
sprintf(message, "videosize should be %.12g,
got %.12g", videosize, file_videosize);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
@@ -1055,7 +1055,7 @@
sprintf(message, "invalid type for videosize:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -1069,7 +1069,7 @@

if (fabs(file_audiosize - audiosize) >= 1.0) {
sprintf(message, "audiosize should be %.12g,
got %.12g", audiosize, file_audiosize);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
@@ -1080,7 +1080,7 @@
sprintf(message, "invalid type for audiosize:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -1097,14 +1097,14 @@

if (fabs(file_datasize - datasize) >= 1.0) {
sprintf(message, "datasize should be %.12g,
got %.12g", datasize, file_datasize);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
sprintf(message, "invalid type for datasize:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -1118,7 +1118,7 @@

if (fabs(file_audiocodecid - audiocodecid) >= 1.0)
{
sprintf(message, "audiocodecid should
be %.12g, got %.12g", audiocodecid, file_audiocodecid);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
@@ -1129,7 +1129,7 @@
sprintf(message, "invalid type for audiocodecid:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -1143,7 +1143,7 @@

if (fabs(file_videocodecid - videocodecid) >= 1.0)
{
sprintf(message, "videocodecid should
be %.12g, got %.12g", videocodecid, file_videocodecid);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
@@ -1154,7 +1154,7 @@
sprintf(message, "invalid type for videocodecid:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -1168,7 +1168,7 @@

if (fabs(file_audiodelay - audiodelay) >= 1.0) {
sprintf(message, "audiodelay should be %.12g,
got %.12g", audiodelay, file_audiodelay);
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
@@ -1179,7 +1179,7 @@
sprintf(message, "invalid type for audiodelay:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -1188,14 +1188,14 @@
if (type == AMF_TYPE_BOOLEAN) {
if (amf_boolean_get_value(data) !=
info.can_seek_to_end) {
sprintf(message, "canSeekToEnd should be set
to %s", info.can_seek_to_end ? "true" : "false");
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
sprintf(message, "invalid type for canSeekToEnd:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -1204,14 +1204,14 @@
if (type == AMF_TYPE_BOOLEAN) {
if (amf_boolean_get_value(data) !=
info.have_keyframes) {
sprintf(message, "hasKeyframes should be set
to %s", info.have_keyframes ? "true" : "false");
- print_warning("W80045", on_metadata_offset,
message);
+ print_warning(WARNING_AMF_DATA_INVALID_VALUE,
on_metadata_offset, message);
}
}
else {
sprintf(message, "invalid type for hasKeyframes:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}

@@ -1333,7 +1333,7 @@
sprintf(message, "invalid type for keyframes:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_BOOLEAN),
get_amf_type_string(type));
- print_warning("W80046", on_metadata_offset, message);
+ print_warning(WARNING_AMF_DATA_INVALID_TYPE,
on_metadata_offset, message);
}
}
}
=======================================
--- /src/check.h Fri Sep 30 08:56:31 2011
+++ /src/check.h Mon Oct 3 09:31:05 2011
@@ -79,6 +79,39 @@
#define WARNING_AUDIO_CODEC_RESERVED LEVEL_WARNING
TOPIC_AUDIO_CODECS "028"
#define WARNING_AUDIO_CODEC_AAC_BAD LEVEL_WARNING
TOPIC_AUDIO_CODECS "029"
#define WARNING_AUDIO_CODEC_NELLYMOSER_BAD LEVEL_WARNING
TOPIC_AUDIO_CODECS "030"
+#define WARNING_AUDIO_CODEC_AAC_MONO LEVEL_WARNING
TOPIC_AUDIO_CODECS "031"
+#define WARNING_AUDIO_CODEC_LINEAR_PCM LEVEL_WARNING
TOPIC_AUDIO_CODECS "032"
+#define WARNING_VIDEO_FORMAT_CHANGED LEVEL_WARNING
TOPIC_VIDEO_DATA "033"
+#define ERROR_VIDEO_FRAME_TYPE_UNKNOWN LEVEL_ERROR
TOPIC_VIDEO_DATA "034"
+#define WARNING_VIDEO_NO_FIRST_KEYFRAME LEVEL_WARNING
TOPIC_VIDEO_DATA "035"
+#define ERROR_VIDEO_CODEC_UNKNOWN LEVEL_ERROR
TOPIC_VIDEO_CODECS "036"
+#define WARNING_VIDEO_CODEC_JPEG LEVEL_WARNING
TOPIC_VIDEO_CODECS "037"
+#define WARNING_METADATA_EMPTY LEVEL_WARNING
TOPIC_METADATA "038"
+#define ERROR_METADATA_NAME_INVALID LEVEL_ERROR
TOPIC_METADATA "039"
+#define ERROR_METADATA_DATA_INVALID LEVEL_ERROR
TOPIC_METADATA "040"
+#define ERROR_METADATA_NAME_INVALID_TYPE LEVEL_ERROR
TOPIC_METADATA "041"
+#define WARNING_METADATA_NAME_EMPTY LEVEL_WARNING
TOPIC_METADATA "042"
+#define WARNING_METADATA_DATA_REMAINING LEVEL_WARNING
TOPIC_METADATA "043"
+#define WARNING_METADATA_DATA_MISSING LEVEL_WARNING
TOPIC_METADATA "044"
+#define WARNING_METADATA_LAST_SECOND_DUP LEVEL_WARNING
TOPIC_METADATA "045"
+#define ERROR_METADATA_DATA_INVALID_TYPE LEVEL_ERROR
TOPIC_METADATA "046"
+#define WARNING_METADATA_BAD_TAG LEVEL_WARNING
TOPIC_METADATA "047"
+#define WARNING_METADATA_BAD_TIMESTAMP LEVEL_WARNING
TOPIC_METADATA "048"
+#define WARNING_METADATA_DUPLICATE LEVEL_WARNING
TOPIC_METADATA "049"
+#define INFO_METADATA_NAME_UNKNOWN LEVEL_INFO
TOPIC_METADATA "050"
+#define ERROR_PREV_TAG_SIZE_BAD LEVEL_ERROR
TOPIC_PREV_TAG_SIZE "051"
+#define WARNING_HEADER_VIDEO_NOT_FOUND LEVEL_WARNING
TOPIC_HEADER "052"
+#define WARNING_HEADER_AUDIO_NOT_FOUND LEVEL_WARNING
TOPIC_HEADER "053"
+#define WARNING_TIMESTAMP_VIDEO_ENDS_FIRST LEVEL_WARNING
TOPIC_TIMESTAMPS "054"
+#define WARNING_TIMESTAMP_AUDIO_ENDS_FIRST LEVEL_WARNING
TOPIC_TIMESTAMPS "055"
+#define WARNING_VIDEO_NO_KEYFRAME LEVEL_WARNING
TOPIC_VIDEO_DATA "056"
+#define WARNING_VIDEO_ONLY_KEYFRAMES LEVEL_WARNING
TOPIC_VIDEO_DATA "057"
+#define WARNING_VIDEO_ONLY_KF_LAST_SEC LEVEL_WARNING
TOPIC_VIDEO_DATA "058"
+#define WARNING_METADATA_LAST_SECOND_BAD LEVEL_WARNING
TOPIC_METADATA "059"
+#define WARNING_METADATA_NOT_PRESENT LEVEL_WARNING
TOPIC_METADATA "060"
+#define FATAL_INFO_COMPUTATION_ERROR LEVEL_FATAL
TOPIC_GENERAL_FORMAT "061"
+#define WARNING_AMF_DATA_INVALID_VALUE LEVEL_WARNING
TOPIC_AMF_DATA "062"
+#define WARNING_AMF_DATA_INVALID_TYPE LEVEL_WARNING
TOPIC_AMF_DATA "063"


#ifdef __cplusplus
@@ -93,3 +126,4 @@
#endif /* __cplusplus */

#endif /* __CHECK_H__ */
+

==============================================================================
Revision: d59a2c406d92
Author: Marc Noirot <marc....@gmail.com>
Date: Tue Oct 4 11:14:05 2011
Log: Finished work on better referencing check message codes.

http://code.google.com/p/flvmeta/source/detail?r=d59a2c406d92

Modified:
/src/check.c
/src/check.h

=======================================
--- /src/check.c Mon Oct 3 09:31:05 2011
+++ /src/check.c Tue Oct 4 11:14:05 2011
@@ -815,7 +815,7 @@
have_width = 1;
}
else {
- print_warning("W80047", on_metadata_offset, "width
metadata present without video data");
+ print_warning(WARNING_AMF_DATA_VIDEO_NEEDED,
on_metadata_offset, "width metadata present without video data");
}
}
else {
@@ -841,7 +841,7 @@
have_height = 1;
}
else {
- print_warning("W80047",
on_metadata_offset, "height metadata present without video data");
+ print_warning(WARNING_AMF_DATA_VIDEO_NEEDED,
on_metadata_offset, "height metadata present without video data");
}
}
else {
@@ -866,7 +866,7 @@
}
}
else {
- print_warning("W80047",
on_metadata_offset, "videodatarate metadata present without video data");
+ print_warning(WARNING_AMF_DATA_VIDEO_NEEDED,
on_metadata_offset, "videodatarate metadata present without video data");
}
}
else {
@@ -891,7 +891,7 @@
}
}
else {
- print_warning("W80047",
on_metadata_offset, "framerate metadata present without video data");
+ print_warning(WARNING_AMF_DATA_VIDEO_NEEDED,
on_metadata_offset, "framerate metadata present without video data");
}
}
else {
@@ -916,7 +916,7 @@
}
}
else {
- print_warning("W80048",
on_metadata_offset, "audiodatarate metadata present without audio data");
+ print_warning(WARNING_AMF_DATA_AUDIO_NEEDED,
on_metadata_offset, "audiodatarate metadata present without audio data");
}
}
else {
@@ -948,7 +948,7 @@
}
}
else {
- print_warning("W80048",
on_metadata_offset, "audiosamplerate metadata present without audio data");
+ print_warning(WARNING_AMF_DATA_AUDIO_NEEDED,
on_metadata_offset, "audiosamplerate metadata present without audio data");
}
}
else {
@@ -977,7 +977,7 @@
}
}
else {
- print_warning("W80048",
on_metadata_offset, "audiosamplesize metadata present without audio data");
+ print_warning(WARNING_AMF_DATA_AUDIO_NEEDED,
on_metadata_offset, "audiosamplesize metadata present without audio data");
}
}
else {
@@ -1002,7 +1002,7 @@
}
}
else {
- print_warning("W80048",
on_metadata_offset, "stereo metadata present without audio data");
+ print_warning(WARNING_AMF_DATA_AUDIO_NEEDED,
on_metadata_offset, "stereo metadata present without audio data");
}
}
else {
@@ -1048,7 +1048,7 @@
}
}
else {
- print_warning("W80047",
on_metadata_offset, "videosize metadata present without video data");
+ print_warning(WARNING_AMF_DATA_VIDEO_NEEDED,
on_metadata_offset, "videosize metadata present without video data");
}
}
else {
@@ -1073,7 +1073,7 @@
}
}
else {
- print_warning("W80047",
on_metadata_offset, "audiosize metadata present without video data");
+ print_warning(WARNING_AMF_DATA_AUDIO_NEEDED,
on_metadata_offset, "audiosize metadata present without audio data");
}
}
else {
@@ -1122,7 +1122,7 @@
}
}
else {
- print_warning("W80048",
on_metadata_offset, "audiocodecid metadata present without audio data");
+ print_warning(WARNING_AMF_DATA_AUDIO_NEEDED,
on_metadata_offset, "audiocodecid metadata present without audio data");
}
}
else {
@@ -1147,7 +1147,7 @@
}
}
else {
- print_warning("W80048",
on_metadata_offset, "videocodecid metadata present without audio data");
+ print_warning(WARNING_AMF_DATA_VIDEO_NEEDED,
on_metadata_offset, "videocodecid metadata present without video data");
}
}
else {
@@ -1172,7 +1172,7 @@
}
}
else {
- print_warning("W80049",
on_metadata_offset, "audiodelay metadata present without audio and video
data");
+ print_warning(WARNING_AMF_DATA_AUDIO_VIDEO_NEEDED,
on_metadata_offset, "audiodelay metadata present without audio and video
data");
}
}
else {
@@ -1225,10 +1225,10 @@

/* check sub-arrays' presence */
if (file_times == NULL) {
- print_warning("W81050",
on_metadata_offset, "Missing times metadata");
+ print_warning(WARNING_KEYFRAMES_TIMES_MISSING,
on_metadata_offset, "Missing times metadata");
}
if (file_filepositions == NULL) {
- print_warning("W81051",
on_metadata_offset, "Missing filepositions metadata");
+ print_warning(WARNING_KEYFRAMES_FILEPOS_MISSING,
on_metadata_offset, "Missing filepositions metadata");
}

if (file_times != NULL && file_filepositions != NULL) {
@@ -1240,7 +1240,7 @@
sprintf(message, "invalid type for times:
expected %s, got %s",
get_amf_type_string(AMF_TYPE_ARRAY),
get_amf_type_string(times_type));
- print_warning("W81046", on_metadata_offset,
message);
+
print_warning(WARNING_KEYFRAMES_TIMES_TYPE_BAD, on_metadata_offset,
message);
}

fp_type = amf_data_get_type(file_filepositions);
@@ -1248,7 +1248,7 @@
sprintf(message, "invalid type for
filepositions: expected %s, got %s",
get_amf_type_string(AMF_TYPE_ARRAY),
get_amf_type_string(fp_type));
- print_warning("W81046", on_metadata_offset,
message);
+
print_warning(WARNING_KEYFRAMES_FILEPOS_TYPE_BAD, on_metadata_offset,
message);
}

if (times_type == AMF_TYPE_ARRAY && fp_type ==
AMF_TYPE_ARRAY) {
@@ -1256,7 +1256,7 @@
if (amf_array_size(info.times) !=
amf_array_size(file_times) ||
amf_array_size(info.filepositions) !=
amf_array_size(file_filepositions) ||
amf_array_size(file_filepositions) !=
amf_array_size(file_times)) {
- print_warning("W81047",
on_metadata_offset, "invalid keyframes arrays length");
+
print_warning(WARNING_KEYFRAMES_ARRAY_LENGTH_BAD,
on_metadata_offset, "invalid keyframes arrays length");
}
else {
number64 last_file_time;
@@ -1282,7 +1282,7 @@
sprintf(message, "invalid type for
time: expected %s, got %s",

get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W81048",
on_metadata_offset, message);
+
print_warning(WARNING_KEYFRAMES_TIME_TYPE_BAD, on_metadata_offset, message);
}
else {
f_time =
amf_number_get_value(amf_array_get(ft_node));
@@ -1290,13 +1290,13 @@
if (fabs(time - f_time) >= 1.0) {
sprintf(message, "invalid
keyframe time: expected %.12g, got %.12g",
time, f_time);
- print_warning("W81049",
on_metadata_offset, message);
+
print_warning(WARNING_KEYFRAMES_TIME_BAD, on_metadata_offset, message);
}

/* check for duplicate time, can
happen in H.264 files */
if (have_last_time &&
last_file_time == f_time) {
sprintf(message, "Duplicate
keyframe time: %.12g", f_time);
- print_warning("W81050",
on_metadata_offset, message);
+
print_warning(WARNING_KEYFRAMES_TIME_DUPLICATE, on_metadata_offset,
message);
}
have_last_time = 1;
last_file_time = f_time;
@@ -1307,7 +1307,7 @@
sprintf(message, "invalid type for
file position: expected %s, got %s",

get_amf_type_string(AMF_TYPE_NUMBER),
get_amf_type_string(type));
- print_warning("W81051",
on_metadata_offset, message);
+
print_warning(WARNING_KEYFRAMES_POS_TYPE_BAD, on_metadata_offset, message);
}
else {
f_position =
amf_number_get_value(amf_array_get(ff_node));
@@ -1315,7 +1315,7 @@
if (fabs(time - f_time) >= 1.0) {
sprintf(message, "invalid
keyframe file position: expected %.12g, got %.12g",
time, f_time);
- print_warning("W81052",
on_metadata_offset, message);
+
print_warning(WARNING_KEYFRAMES_POS_BAD, on_metadata_offset, message);
}
}

@@ -1346,17 +1346,17 @@
/* missing width or height can cause size problem in various
players */
if (info.have_video) {
if (!have_width) {
- print_error("E60053", on_metadata_offset, "width
information not found in metadata, problems might occur in some players");
+ print_error(ERROR_VIDEO_WIDTH_MISSING,
on_metadata_offset, "width information not found in metadata, problems
might occur in some players");
}
if (!have_height) {
- print_error("E60054", on_metadata_offset, "height
information not found in metadata, problems might occur in some players");
+ print_error(ERROR_VIDEO_HEIGHT_MISSING,
on_metadata_offset, "height information not found in metadata, problems
might occur in some players");
}
}
}

/* could we compute video resolution ? */
if (info.video_width == 0 && info.video_height == 0) {
- print_warning("W60055", file_stats.st_size, "unable to determine
video resolution");
+ print_warning(WARNING_VIDEO_SIZE_ERROR,
file_stats.st_size, "unable to determine video resolution");
}

end:
=======================================
--- /src/check.h Mon Oct 3 09:31:05 2011
+++ /src/check.h Tue Oct 4 11:14:05 2011
@@ -112,7 +112,22 @@
#define FATAL_INFO_COMPUTATION_ERROR LEVEL_FATAL
TOPIC_GENERAL_FORMAT "061"
#define WARNING_AMF_DATA_INVALID_VALUE LEVEL_WARNING
TOPIC_AMF_DATA "062"
#define WARNING_AMF_DATA_INVALID_TYPE LEVEL_WARNING
TOPIC_AMF_DATA "063"
-
+#define WARNING_AMF_DATA_VIDEO_NEEDED LEVEL_WARNING
TOPIC_AMF_DATA "064"
+#define WARNING_AMF_DATA_AUDIO_NEEDED LEVEL_WARNING
TOPIC_AMF_DATA "065"
+#define WARNING_AMF_DATA_AUDIO_VIDEO_NEEDED LEVEL_WARNING
TOPIC_AMF_DATA "066"
+#define WARNING_KEYFRAMES_TIMES_MISSING LEVEL_WARNING
TOPIC_KEYFRAMES "067"
+#define WARNING_KEYFRAMES_FILEPOS_MISSING LEVEL_WARNING
TOPIC_KEYFRAMES "068"
+#define WARNING_KEYFRAMES_TIMES_TYPE_BAD LEVEL_WARNING
TOPIC_KEYFRAMES "069"
+#define WARNING_KEYFRAMES_FILEPOS_TYPE_BAD LEVEL_WARNING
TOPIC_KEYFRAMES "070"
+#define WARNING_KEYFRAMES_ARRAY_LENGTH_BAD LEVEL_WARNING
TOPIC_KEYFRAMES "071"
+#define WARNING_KEYFRAMES_TIME_TYPE_BAD LEVEL_WARNING
TOPIC_KEYFRAMES "072"
+#define WARNING_KEYFRAMES_POS_TYPE_BAD LEVEL_WARNING
TOPIC_KEYFRAMES "073"
+#define WARNING_KEYFRAMES_TIME_BAD LEVEL_WARNING
TOPIC_KEYFRAMES "074"
+#define WARNING_KEYFRAMES_POS_BAD LEVEL_WARNING
TOPIC_KEYFRAMES "075"
+#define WARNING_KEYFRAMES_TIME_DUPLICATE LEVEL_WARNING
TOPIC_KEYFRAMES "076"
+#define ERROR_VIDEO_WIDTH_MISSING LEVEL_ERROR
TOPIC_VIDEO_DATA "077"
+#define ERROR_VIDEO_HEIGHT_MISSING LEVEL_ERROR
TOPIC_VIDEO_DATA "078"
+#define WARNING_VIDEO_SIZE_ERROR LEVEL_WARNING
TOPIC_VIDEO_DATA "079"

#ifdef __cplusplus
extern "C" {

Reply all
Reply to author
Forward
0 new messages