# HG changeset patch
# User Diego 'Flameeyes' Pettenò <[EMAIL PROTECTED]>
# Date 1181317127 -7200
# Node ID 3967a042e533538daf2bf6f7d145190487744935
# Parent dd59a55edb5b5257879bef0529dcdf4bbc8f4262
Update parse_meta_atom to use a switch case rather than a series of if. By the
way, the code is totally broken and does not work as intended.
diff -r 3967a042e533538daf2bf6f7d145190487744935 -r
dd59a55edb5b5257879bef0529dcdf4bbc8f4262 src/demuxers/demux_qt.c
--- a/src/demuxers/demux_qt.c Fri Jun 08 17:38:47 2007 +0200
+++ b/src/demuxers/demux_qt.c Wed Jun 06 21:52:15 2007 +0200
@@ -729,50 +729,53 @@ static int is_qt_file(input_plugin_t *qt
/* parse out a meta data atom */
static void parse_meta_atom(qt_info *info, unsigned char *meta_atom) {
- int i;
- unsigned int meta_atom_size = BE_32(&meta_atom[0]);
- qt_atom current_atom;
- int string_size;
-
- for (i = 0; i < meta_atom_size - 4; i++) {
- current_atom = BE_32(&meta_atom[i]);
-
- if (current_atom == ART_ATOM) {
- string_size = BE_32(&meta_atom[i + 4]) - 16 + 1;
+ uint32_t i = 4;
+ uint32_t meta_atom_size = BE_32(&meta_atom[0]);
+
+ while ( i < meta_atom_size ) {
+ qt_atom current_atom = BE_32(&meta_atom[i]);
+ uint32_t sub_atom_size = BE_32(&meta_atom[i + 4]);
+ uint32_t string_size = sub_atom_size - 16 + 1;
+
+ switch (current_atom) {
+ case ART_ATOM:
info->artist = xine_xmalloc(string_size);
strncpy(info->artist, &meta_atom[i + 20], string_size - 1);
info->artist[string_size - 1] = 0;
- } else if (current_atom == NAM_ATOM) {
- string_size = BE_32(&meta_atom[i + 4]) - 16 + 1;
+ break;
+ case NAM_ATOM:
info->name = xine_xmalloc(string_size);
strncpy(info->name, &meta_atom[i + 20], string_size - 1);
info->name[string_size - 1] = 0;
- } else if (current_atom == ALB_ATOM) {
- string_size = BE_32(&meta_atom[i + 4]) - 16 + 1;
+ break;
+ case ALB_ATOM:
info->album = xine_xmalloc(string_size);
strncpy(info->album, &meta_atom[i + 20], string_size - 1);
info->album[string_size - 1] = 0;
- } else if (current_atom == GEN_ATOM) {
- string_size = BE_32(&meta_atom[i + 4]) - 16 + 1;
+ break;
+ case GEN_ATOM:
info->genre = xine_xmalloc(string_size);
strncpy(info->genre, &meta_atom[i + 20], string_size - 1);
info->genre[string_size - 1] = 0;
- } else if (current_atom == TOO_ATOM) {
- string_size = BE_32(&meta_atom[i + 4]) - 16 + 1;
+ break;
+ case TOO_ATOM:
info->comment = xine_xmalloc(string_size);
strncpy(info->comment, &meta_atom[i + 20], string_size - 1);
info->comment[string_size - 1] = 0;
- } else if (current_atom == WRT_ATOM) {
- string_size = BE_32(&meta_atom[i + 4]) - 16 + 1;
+ break;
+ case WRT_ATOM:
info->composer = xine_xmalloc(string_size);
strncpy(info->composer, &meta_atom[i + 20], string_size - 1);
info->composer[string_size - 1] = 0;
- } else if (current_atom == DAY_ATOM) {
- string_size = BE_32(&meta_atom[i + 4]) - 16 + 1;
+ break;
+ case DAY_ATOM:
info->year = xine_xmalloc(string_size);
strncpy(info->year, &meta_atom[i + 20], string_size - 1);
info->year[string_size - 1] = 0;
- }
+ break;
+ }
+
+ i += sub_atom_size;
}
}
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Xine-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xine-cvslog