30 #define DEINT_ID_GENR MKTAG('g', 'e', 'n', 'r')
31 #define DEINT_ID_INT0 MKTAG('I', 'n', 't', '0')
32 #define DEINT_ID_INT4 MKTAG('I', 'n', 't', '4')
33 #define DEINT_ID_SIPR MKTAG('s', 'i', 'p', 'r')
34 #define DEINT_ID_VBRF MKTAG('v', 'b', 'r', 'f')
35 #define DEINT_ID_VBRS MKTAG('v', 'b', 'r', 's')
63 { 0, 63 }, { 1, 22 }, { 2, 44 }, { 3, 90 },
64 { 5, 81 }, { 7, 31 }, { 8, 86 }, { 9, 58 },
65 { 10, 36 }, { 12, 68 }, { 13, 39 }, { 14, 73 },
66 { 15, 53 }, { 16, 69 }, { 17, 57 }, { 19, 88 },
67 { 20, 34 }, { 21, 71 }, { 24, 46 }, { 25, 94 },
68 { 26, 54 }, { 28, 75 }, { 29, 50 }, { 32, 70 },
69 { 33, 92 }, { 35, 74 }, { 38, 85 }, { 40, 56 },
70 { 42, 87 }, { 43, 65 }, { 45, 59 }, { 48, 79 },
71 { 49, 93 }, { 51, 89 }, { 55, 95 }, { 61, 76 },
72 { 67, 83 }, { 77, 80 }
88 if (buf_size > 0) *q =
'\0';
147 if ((startpos + header_size) >=
avio_tell(pb) + 2) {
153 if ((startpos + header_size) >
avio_tell(pb))
161 int flavor, sub_packet_h, coded_framesize, sub_packet_size;
162 int codecdata_length;
228 if(sub_packet_size <= 0){
246 if (codecdata_length >= 1) {
309 if (v ==
MKTAG(0xfd,
'a',
'r',
'.')) {
338 0x10000, fps, (1 << 30) - 1);
355 unsigned int size, n_pkts, str_id, next_off, n, pos, pts;
375 "Invalid stream index %d for index at pos %"PRId64
"\n",
380 "Nr. of packets in packet index for stream index %d "
381 "exceeds filesize (%"PRId64
" at %"PRId64
" = %d)\n",
387 for (n = 0; n < n_pkts; n++) {
397 if (next_off &&
avio_tell(pb) < next_off &&
400 "Non-linear index detected, not supported\n");
429 unsigned int data_off = 0, indx_off = 0;
434 if (tag ==
MKTAG(
'.',
'r',
'a', 0xfd)) {
437 }
else if (tag !=
MKTAG(
'.',
'R',
'M',
'F')) {
452 av_dlog(s,
"tag=%c%c%c%c (%08x) size=%d\n",
459 if (tag_size < 10 && tag !=
MKTAG(
'D',
'A',
'T',
'A'))
462 case MKTAG(
'P',
'R',
'O',
'P'):
476 case MKTAG(
'C',
'O',
'N',
'T'):
479 case MKTAG(
'M',
'D',
'P',
'R'):
501 case MKTAG(
'D',
'A',
'T',
'A'):
518 avio_seek(pb, indx_off, SEEK_SET) >= 0) {
538 return (n << 16) | n1;
543 #define RAW_PACKET_SIZE 1000
549 uint32_t
state=0xFFFFFFFF;
560 state= (state<<8) +
avio_r8(pb);
562 if(state ==
MKBETAG(
'I',
'N',
'D',
'X')){
563 int n_pkts, expected_len;
567 expected_len = 20 + n_pkts * 14;
571 else if (len != expected_len)
573 "Index size %d (%d pkts) is wrong, should be %d.\n",
574 len, n_pkts, expected_len);
579 }
else if (state ==
MKBETAG(
'D',
'A',
'T',
'A')) {
581 "DATA tag in middle of chunk, file may be broken.\n");
584 if(state > (
unsigned)0xFFFF || state <= 12)
618 int hdr, seq, pic_num, len2, pos;
654 if((seq & 0x7F) == 1 || vst->
curpic_num != pic_num){
655 vst->
slices = ((hdr & 0x3F) << 1) + 1;
666 len =
FFMIN(len, pos);
705 for (j=0;j<pkt->
size;j+=2) {
706 FFSWAP(
int, ptr[0], ptr[1]);
718 int n, bs = sub_packet_h * framesize * 2 / 96;
720 for (n = 0; n < 38; n++) {
723 int o = bs * sipr_swaps[n][1];
726 for (j = 0; j < bs; j++, i++, o++) {
727 int x = (buf[i >> 1] >> (4 * (i & 1))) & 0xF,
728 y = (buf[o >> 1] >> (4 * (o & 1))) & 0xF;
730 buf[o >> 1] = (x << (4 * (o & 1))) |
731 (buf[o >> 1] & (0xF << (4 * !(o & 1))));
732 buf[i >> 1] = (y << (4 * (i & 1))) |
733 (buf[i >> 1] & (0xF << (4 * !(i & 1))));
741 int *seq,
int flags, int64_t timestamp)
767 for (x = 0; x < h/2; x++)
771 for (x = 0; x < w/sps; x++)
811 int seq= 128*(pkt->
data[2]&0x7F) + (pkt->
data[3]>>1);
814 seq |= (timestamp&~0x3FFF);
815 if(seq - timestamp > 0x2000) seq -= 0x4000;
816 if(seq - timestamp < -0x2000) seq += 0x4000;
821 pkt->
pts = timestamp;
860 int i,
len, res, seq = 1;
861 int64_t timestamp, pos;
879 flags = (seq++ == 1) ? 2 : 0;
882 len=
sync(s, ×tamp, &flags, &i, &pos);
887 if(len<0 || s->pb->eof_reached)
891 &seq, flags, timestamp);
892 if((flags&2) && (seq&0x7F) == 1)
921 if ((p->
buf[0] ==
'.' && p->
buf[1] ==
'R' &&
922 p->
buf[2] ==
'M' && p->
buf[3] ==
'F' &&
923 p->
buf[4] == 0 && p->
buf[5] == 0) ||
924 (p->
buf[0] ==
'.' && p->
buf[1] ==
'r' &&
925 p->
buf[2] ==
'a' && p->
buf[3] == 0xfd))
932 int64_t *ppos, int64_t pos_limit)
949 len=
sync(s, &dts, &flags, &stream_index2, &pos);
953 st = s->
streams[stream_index2];
961 if((flags&2) && (seq&0x7F) == 1){
964 if(stream_index2 == stream_index)