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