[haiku-commits] r34431 - haiku/trunk/src/add-ons/media/plugins/asf_reader/libasf

  • From: dlmcpaul@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 1 Dec 2009 23:06:31 +0100 (CET)

Author: dlmcpaul
Date: 2009-12-01 23:06:31 +0100 (Tue, 01 Dec 2009)
New Revision: 34431
Changeset: http://dev.haiku-os.org/changeset/34431/haiku

Modified:
   haiku/trunk/src/add-ons/media/plugins/asf_reader/libasf/asf.c
   haiku/trunk/src/add-ons/media/plugins/asf_reader/libasf/parse.c
Log:
Added support for files with an index header but no index entries

Modified: haiku/trunk/src/add-ons/media/plugins/asf_reader/libasf/asf.c
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/asf_reader/libasf/asf.c       
2009-12-01 20:58:44 UTC (rev 34430)
+++ haiku/trunk/src/add-ons/media/plugins/asf_reader/libasf/asf.c       
2009-12-01 22:06:31 UTC (rev 34431)
@@ -96,7 +96,7 @@
 
        tmp = asf_parse_header(file);
        if (tmp < 0) {
-               debug_printf("error parsing header: %d", tmp);
+               printf("error parsing header: %d\n", tmp);
                return tmp;
        }
        file->position += tmp;
@@ -104,7 +104,7 @@
 
        tmp = asf_parse_data(file);
        if (tmp < 0) {
-               debug_printf("error parsing data object: %d", tmp);
+               printf("error parsing data object: %d\n", tmp);
                return tmp;
        }
        file->position += tmp;
@@ -124,7 +124,7 @@
                               file->index_position < file->file_size && 
!file->index) {
                                tmp = asf_parse_index(file);
                                if (tmp < 0) {
-                                       debug_printf("Error finding index 
object! %d", tmp);
+                                       printf("Error finding index object! 
%d\n", tmp);
                                        break;
                                }
 
@@ -152,7 +152,7 @@
 
        for (tmp = 0; tmp < ASF_MAX_STREAMS; tmp++) {
                if (file->streams[tmp].type != ASF_STREAM_TYPE_NONE) {
-                       debug_printf("stream %d of type %d found!", tmp, 
file->streams[tmp].type);
+                       debug_printf("stream %d of type %s found!", tmp, 
file->streams[tmp].type == 1 ? "Audio" : file->streams[tmp].type == 2 ? "Video" 
: "Unknown");
                }
        }
 
@@ -269,7 +269,14 @@
                return ASF_ERROR_SEEK;
        }
 
-       if (file->index) {
+       if (file->index && file->index->entry_count == 0) {
+               // Some sort of Constant packet size?
+
+               /* Calculate current packet from index header */
+               packet = msec * 10000 / file->index->entry_time_interval;
+               new_msec = msec;
+               
+       } else if (file->index && file->index->entry_count > 0) {
                uint32_t index_entry;
 
                /* Fetch current packet from index entry structure */

Modified: haiku/trunk/src/add-ons/media/plugins/asf_reader/libasf/parse.c
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/asf_reader/libasf/parse.c     
2009-12-01 20:58:44 UTC (rev 34430)
+++ haiku/trunk/src/add-ons/media/plugins/asf_reader/libasf/parse.c     
2009-12-01 22:06:31 UTC (rev 34431)
@@ -363,6 +363,7 @@
        /* read the raw data of an index header */
        tmp = asf_byteio_read(idata, 56, iostream);
        if (tmp < 0) {
+               printf("Could not read index header\n");
                return tmp;
        }
 
@@ -392,6 +393,18 @@
        index->max_packet_count = asf_byteio_getDWLE(idata + 48);
        index->entry_count = asf_byteio_getDWLE(idata + 52);
 
+       printf("INDEX\n");
+       printf("Total Index Entries %d\n",index->entry_count);
+       printf("Index Size in bytes %Ld\n",index->size);
+       printf("Index Max Packet Count %d\n",index->max_packet_count);
+       printf("Index Entry Time Interval %Ld\n",index->entry_time_interval);
+       
+       if (index->entry_count == 0) {
+               printf("Index has no entries\n");
+               file->index = index;
+               return index->size;
+       }
+
        if (index->entry_count * 6 + 56 > index->size) {
                free(index);
                return ASF_ERROR_INVALID_LENGTH;
@@ -403,8 +416,10 @@
                free(index);
                return ASF_ERROR_OUTOFMEM;
        }
+               
        tmp = asf_byteio_read(entry_data, entry_data_size, iostream);
        if (tmp < 0) {
+               printf("Could not read entry data\n");
                free(index);
                free(entry_data);
                return tmp;


Other related posts:

  • » [haiku-commits] r34431 - haiku/trunk/src/add-ons/media/plugins/asf_reader/libasf - dlmcpaul