32 #include "libavutil/channel_layout.h"
33 #include "libavutil/intreadwrite.h"
37 #define RIFF_TAG MKTAG('R', 'I', 'F', 'F')
38 #define CDXA_TAG MKTAG('C', 'D', 'X', 'A')
40 #define RAW_CD_SECTOR_SIZE 2352
41 #define RAW_CD_SECTOR_DATA_SIZE 2304
42 #define VIDEO_DATA_CHUNK_SIZE 0x7E0
43 #define VIDEO_DATA_HEADER_SIZE 0x38
44 #define RIFF_HEADER_SIZE 0x2C
46 #define CDXA_TYPE_MASK 0x0E
47 #define CDXA_TYPE_DATA 0x08
48 #define CDXA_TYPE_AUDIO 0x04
49 #define CDXA_TYPE_VIDEO 0x02
51 #define STR_MAGIC (0x80010160)
68 static const uint8_t sync_header[12] = {0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00};
91 if (sector[0x11] >= 32)
97 int current_sector =
AV_RL16(§or[0x1C]);
98 int sector_count =
AV_RL16(§or[0x1E]);
102 && current_sector < sector_count
117 if(sector[0x13]&0x2A)
122 if(sector[0x12] & CDXA_TYPE_MASK)
129 if(vid+aud > 3)
return 50;
130 else if(vid+aud)
return 1;
177 channel = sector[0x11];
187 int current_sector =
AV_RL16(§or[0x1C]);
188 int sector_count =
AV_RL16(§or[0x1E]);
192 && current_sector < sector_count
194 av_log(s,
AV_LOG_ERROR,
"Invalid parameters %d %d %d\n", current_sector, sector_count, frame_size);
229 memcpy(pkt->
data + current_sector*VIDEO_DATA_CHUNK_SIZE,
231 VIDEO_DATA_CHUNK_SIZE);
233 if (current_sector == sector_count-1) {
246 int fmt = sector[0x13];
275 memcpy(pkt->
data,sector+24,2304);