Good day!

I have made some changes to AVIFileSink.cpp for correct index chunk.
After these changes avi file with MJPEG data is opened correctly in VLC without message that index is corrupted.

Unfortunately at this moment I have no time to test my patch with other video data rather then MJPEG and test other players rather then VLC. But I hope that my patch will be useful for other people maybe with some additional changes to support non-MJPEG frames.

--
Best Regards!
---
Victor V. Vinokurov
LAIN LLC Programmer
http://dialog-nibelung.ru
--- AVIFileSink.cpp.orig        2017-07-18 09:40:15.000000000 +0300
+++ AVIFileSink.cpp     2017-08-10 13:06:42.875924000 +0300
@@ -25,6 +25,11 @@
 
 #define fourChar(x,y,z,w) ( ((w)<<24)|((z)<<16)|((y)<<8)|(x) )/*little-endian*/
 
+#define AVIIF_LIST             0x00000001
+#define AVIIF_KEYFRAME         0x00000010
+#define AVIIF_NO_TIME          0x00000100
+#define AVIIF_COMPRESSOR       0x0FFF0000
+
 ////////// AVISubsessionIOState ///////////
 // A structure used to represent the I/O state of each input 'subsession':
 
@@ -365,7 +370,7 @@
     addWord(indexRecord->size());
   }
 
-  fRIFFSizeValue += fNumBytesWritten;
+  fRIFFSizeValue += fNumBytesWritten + fNumIndexRecords*4*4 - 4;
   setWord(fRIFFSizePosition, fRIFFSizeValue);
 
   setWord(fAVIHMaxBytesPerSecondPosition, maxBytesPerSecond);
@@ -531,9 +536,9 @@
   // Add an index record for this frame:
   AVIIndexRecord* newIndexRecord
     = new AVIIndexRecord(fAVISubsessionTag, // chunk id
-                        frameSource[0] == 0x67 ? 0x10 : 0, // flags
-                        fOurSink.fMoviSizePosition + 8 + 
fOurSink.fNumBytesWritten, // offset (note: 8 == size + 'movi')
-                        frameSize + 4); // size
+                        AVIIF_KEYFRAME, // flags
+                        4 + fOurSink.fNumBytesWritten, // offset (note: 4 == 
'movi')
+                        frameSize); // size
   fOurSink.addIndexRecord(newIndexRecord);
 
   // Write the data into the file:
_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to