36 #define DEINT_ID_GENR MKTAG('g', 'e', 'n', 'r')
37 #define DEINT_ID_INT0 MKTAG('I', 'n', 't', '0')
38 #define DEINT_ID_INT4 MKTAG('I', 'n', 't', '4')
39 #define DEINT_ID_SIPR MKTAG('s', 'i', 'p', 'r')
40 #define DEINT_ID_VBRF MKTAG('v', 'b', 'r', 'f')
41 #define DEINT_ID_VBRS MKTAG('v', 'b', 'r', 's')
81 if (buf_size > 0) *q =
'\0';
107 get_strl(pb, buf,
sizeof(buf), len);
136 unsigned bytes_per_minute;
143 if ((startpos + header_size) >=
avio_tell(pb) + 2) {
149 if ((startpos + header_size) >
avio_tell(pb))
151 if (bytes_per_minute)
160 int flavor, sub_packet_h, coded_framesize, sub_packet_size;
161 int codecdata_length;
162 unsigned bytes_per_minute;
174 if (bytes_per_minute)
217 codecdata_length = 0;
238 if(sub_packet_size <= 0){
257 if (codecdata_length >= 1) {
314 unsigned int codec_data_size,
const uint8_t *mime)
321 if (codec_data_size > INT_MAX)
323 if (codec_data_size == 0)
330 if (v ==
MKBETAG(
'M',
'L',
'T',
'I')) {
334 for (i = 0; i<number_of_streams; i++)
337 if (number_of_mdpr != 1) {
344 if (v ==
MKTAG(0xfd,
'a',
'r',
'.')) {
348 }
else if (v ==
MKBETAG(
'L',
'S',
'D',
':')) {
357 }
else if(mime && !strcmp(mime,
"logical-fileinfo")){
358 int stream_count, rule_count, property_count, i;
369 for(i=0; i<property_count; i++){
410 0x10000, fps, (1 << 30) - 1);
411 #if FF_API_R_FRAME_RATE
423 if (codec_data_size >= size) {
437 unsigned int size, n_pkts, str_id, next_off,
n, pos,
pts;
457 "Invalid stream index %d for index at pos %"PRId64
"\n",
462 "Nr. of packets in packet index for stream index %d "
463 "exceeds filesize (%"PRId64
" at %"PRId64
" = %"PRId64
")\n",
469 for (n = 0; n < n_pkts; n++) {
479 if (next_off &&
avio_tell(pb) < next_off &&
482 "Non-linear index detected, not supported\n");
513 unsigned int data_off = 0, indx_off = 0;
514 char buf[128], mime[128];
519 if (tag ==
MKTAG(
'.',
'r',
'a', 0xfd)) {
522 }
else if (tag !=
MKTAG(
'.',
'R',
'M',
'F')) {
535 av_dlog(s,
"tag=%c%c%c%c (%08x) size=%d\n",
542 if (tag_size < 10 && tag !=
MKTAG(
'D',
'A',
'T',
'A'))
545 case MKTAG(
'P',
'R',
'O',
'P'):
560 case MKTAG(
'C',
'O',
'N',
'T'):
563 case MKTAG(
'M',
'D',
'P',
'R'):
591 case MKTAG(
'D',
'A',
'T',
'A'):
608 avio_seek(pb, indx_off, SEEK_SET) >= 0) {
632 return (n << 16) | n1;
637 #define RAW_PACKET_SIZE 1000
643 uint32_t
state=0xFFFFFFFF;
654 state= (state<<8) +
avio_r8(pb);
656 if(state ==
MKBETAG(
'I',
'N',
'D',
'X')){
657 int n_pkts, expected_len;
661 expected_len = 20 + n_pkts * 14;
665 else if (len != expected_len)
667 "Index size %d (%d pkts) is wrong, should be %d.\n",
668 len, n_pkts, expected_len);
673 }
else if (state ==
MKBETAG(
'D',
'A',
'T',
'A')) {
675 "DATA tag in middle of chunk, file may be broken.\n");
678 if(state > (
unsigned)0xFFFF || state <= 12)
713 int seq = 0, pic_num = 0, len2 = 0, pos = 0;
751 return ret < 0 ? ret :
AVERROR(EIO);
758 if((seq & 0x7F) == 1 || vst->
curpic_num != pic_num){
763 vst->
slices = ((hdr & 0x3F) << 1) + 1;
775 len =
FFMIN(len, pos);
800 #if FF_API_DESTRUCT_PACKET
826 for (j=0;j<pkt->
size;j+=2) {
827 FFSWAP(
int, ptr[0], ptr[1]);
836 if (ret >= 0) memset(dst + ret, 0, n - ret);
837 else memset(dst , 0, n);
846 int *seq,
int flags, int64_t timestamp)
855 return ret < 0 ? ret : -1;
874 for (x = 0; x < h/2; x++)
878 for (x = 0; x < w/sps; x++)
921 int seq= 128*(pkt->
data[2]&0x7F) + (pkt->
data[3]>>1);
924 seq |= (timestamp&~0x3FFF);
925 if(seq - timestamp > 0x2000) seq -= 0x4000;
926 if(seq - timestamp < -0x2000) seq += 0x4000;
931 pkt->
pts = timestamp;
974 int i,
len, res, seq = 1;
975 int64_t timestamp, pos;
995 flags = (seq++ == 1) ? 2 : 0;
998 len =
rm_sync(s, ×tamp, &flags, &i, &pos);
1007 &seq, flags, timestamp);
1010 if((flags&2) && (seq&0x7F) == 1)
1039 if ((p->
buf[0] ==
'.' && p->
buf[1] ==
'R' &&
1040 p->
buf[2] ==
'M' && p->
buf[3] ==
'F' &&
1041 p->
buf[4] == 0 && p->
buf[5] == 0) ||
1042 (p->
buf[0] ==
'.' && p->
buf[1] ==
'r' &&
1043 p->
buf[2] ==
'a' && p->
buf[3] == 0xfd))
1050 int64_t *ppos, int64_t pos_limit)
1069 len =
rm_sync(s, &dts, &flags, &stream_index2, &pos);
1073 st = s->
streams[stream_index2];
1081 if((flags&2) && (seq&0x7F) == 1){
1082 av_dlog(s,
"%d %d-%d %"PRId64
" %d\n",
1083 flags, stream_index2, stream_index, dts, seq);
1085 if(stream_index2 == stream_index)