1 // ASF GUIDs 2 // 10.1 3 #define ASF_HEADER "\x30\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA\x00\x62\xCE\x6C" 4 #define ASF_DATA "\x36\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA\x00\x62\xCE\x6C" 5 6 // 10.2 7 #define ASF_FILE_PROPERTIES "\xA1\xDC\xAB\x8C\x47\xA9\xCF\x11\x8E\xE4\x00\xC0\x0C\x20\x53\x65" 8 #define ASF_STREAM_PROPERTIES "\x91\x07\xDC\xB7\xB7\xA9\xCF\x11\x8E\xE6\x00\xC0\x0C\x20\x53\x65" 9 #define ASF_HEADER_EXTENSION "\xB5\x03\xBF\x5F\x2E\xA9\xCF\x11\x8E\xE3\x00\xC0\x0C\x20\x53\x65" 10 #define ASF_CONTENT_DESCRIPTION "\x33\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA\x00\x62\xCE\x6C" 11 #define ASF_EXTENDED_CONTENT_DESCRIPTION "\x40\xA4\xD0\xD2\x07\xE3\xD2\x11\x97\xF0\x00\xA0\xC9\x5E\xA8\x50" 12 #define ASF_STREAM_BITRATE_PROPERTIES "\xCE\x75\xF8\x7B\x8D\x46\xD1\x11\x8D\x82\x00\x60\x97\xC9\xA2\xB2" 13 // 10.3 14 #define ASF_EXTENDED_STREAM_PROPERTIES "\xCB\xA5\xE6\x14\x72\xC6\x32\x43\x83\x99\xA9\x69\x52\x06\x5B\x5A" 15 #define ASF_METADATA "\xEA\xCB\xF8\xC5\xAF\x5B\x77\x48\x84\x67\xAA\x8C\x44\xFA\x4C\xCA" 16 #define ASF_METADATA_LIBRARY "\x94\x1C\x23\x44\x98\x94\xD1\x49\xA1\x41\x1D\x13\x4E\x45\x70\x54" 17 #define ASF_COMPATIBILITY2 "\x5D\x8B\xF1\x26\x84\x45\xEC\x47\x9F\x5F\x0E\x65\x1F\x04\x52\xC9" 18 // Actually 10.2 19 #define ASF_PADDING "\x74\xD4\x06\x18\xDF\xCA\x09\x45\xA4\xBA\x9A\xAB\xCB\x96\xAA\xE8" 20 // 10.4 21 #define ASF_AUDIO_MEDIA "\x40\x9E\x69\xF8\x4D\x5B\xCF\x11\xA8\xFD\x00\x80\x5F\x5C\x44\x2B" 22 #define ASF_VIDEO_MEDIA "\xC0\xEF\x19\xBC\x4D\x5B\xCF\x11\xA8\xFD\x00\x80\x5F\x5C\x44\x2B" 23 #define ASF_BINARY_MEDIA "\xE2\x65\xFB\x3A\xEF\x47\xF2\x40\xAC\x2C\x70\xA9\x0D\x71\xD3\x43" 24 25 // ASF_BINARY_MEDIA : Major media types 26 #define DVRMS_AUDIO "\x9D\x8C\x17\x31\xE1\x03\x28\x45\xB5\x82\x3D\xF9\xDB\x22\xF5\x03" 27 #define DVRMS_NTSC "\x80\xEA\x0A\x67\x82\x3A\xD0\x11\xB7\x9B\x00\xAA\x00\x37\x67\xA7" 28 #define DVRMS_ATSC "\x89\x8A\x8B\xB8\x49\xB0\x80\x4C\xAD\xCF\x58\x98\x98\x5E\x22\xC1" 29 30 // 10.13 - Undocumented DVR-MS properties 31 #define DVRMS_PTS "\x2A\xC0\x3C\xFD\xDB\x06\xFA\x4C\x80\x1C\x72\x12\xD3\x87\x45\xE4" 32 33 typedef struct { 34 int VideoStreamNumber; 35 int AudioStreamNumber; 36 int CaptionStreamNumber; 37 int CaptionStreamStyle; // 1 = NTSC, 2 = ATSC 38 int DecodeStreamNumber; // The stream that is chosen to be decoded 39 int DecodeStreamPTS; // This will be used for the next returned block 40 int currDecodeStreamPTS; // Time of the data returned by the function 41 int prevDecodeStreamPTS; // Previous time 42 int VideoStreamMS; // See ableve, just for video 43 int currVideoStreamMS; 44 int prevVideoStreamMS; 45 int VideoJump; // Remember a jump in the video timeline 46 } asf_data_stream_properties; 47 48 #define STREAMNUM 10 49 #define PAYEXTNUM 10 50 51 typedef struct { 52 // Generic buffer to hold data 53 unsigned char *parsebuf; 54 long parsebufsize; 55 // Header Object variables 56 int64_t HeaderObjectSize; 57 int64_t FileSize; 58 uint32_t PacketSize; 59 // Stream Properties Object variables 60 asf_data_stream_properties StreamProperties; 61 // Extended Stream Properties - for DVR-MS presentation timestamp 62 // Store the Payload Extension System Data Size. First index holds the 63 // stream number and the second index holds the Extension System entry. 64 // I.e. PayloadExtSize[1][2] is the third Payload Extension System 65 // entry for stream 1. (The streams are numbered starting from 1) 66 // FIXME: What happens if we have more than 9 streams with more than 67 // 10 entries. 68 int PayloadExtSize[STREAMNUM][PAYEXTNUM]; 69 int PayloadExtPTSEntry[STREAMNUM]; 70 // Data object Header variables 71 int64_t DataObjectSize; 72 uint32_t TotalDataPackets; 73 int VideoClosedCaptioningFlag; 74 // Payload data 75 int PayloadLType; // ASF - Payload Length Type. <>0 for multiple payloads 76 uint32_t PayloadLength; // ASF - Payload Length 77 int NumberOfPayloads; // ASF - Number of payloads. 78 int payloadcur; // local 79 int PayloadStreamNumber; // ASF 80 int KeyFrame; // ASF 81 uint32_t PayloadMediaNumber; // ASF 82 // Data Object Loop 83 uint32_t datapacketcur; // Current packet number 84 int64_t dobjectread; // Bytes read in Data Object 85 // Payload parsing information 86 int MultiplePayloads; // ASF 87 int PacketLType; // ASF 88 int ReplicatedLType; // ASF 89 int OffsetMediaLType; // ASF 90 int MediaNumberLType; // ASF 91 int StreamNumberLType; // ASF 92 uint32_t PacketLength; 93 uint32_t PaddingLength; 94 } asf_data; 95