Lines Matching refs:pb
69 static inline void get_strl(AVIOContext *pb, char *buf, int buf_size, int len)
71 int read = avio_get_str(pb, len, buf, buf_size);
74 avio_skip(pb, len - read);
77 static void get_str8(AVIOContext *pb, char *buf, int buf_size)
79 get_strl(pb, buf, buf_size, avio_r8(pb));
82 static int rm_read_extradata(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par, unsigned size)
88 return ff_get_extradata(s, par, pb, size);
91 static void rm_read_metadata(AVFormatContext *s, AVIOContext *pb, int wide)
97 int len = wide ? avio_rb16(pb) : avio_r8(pb);
99 get_strl(pb, buf, sizeof(buf), len);
122 static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb,
131 version = avio_rb16(pb); /* version */
134 int header_size = avio_rb16(pb);
135 int64_t startpos = avio_tell(pb);
136 avio_skip(pb, 8);
137 bytes_per_minute = avio_rb16(pb);
138 avio_skip(pb, 4);
139 rm_read_metadata(s, pb, 0);
140 if ((startpos + header_size) >= avio_tell(pb) + 2) {
142 avio_r8(pb);
143 get_str8(pb, buf, sizeof(buf));
146 if ((startpos + header_size) > avio_tell(pb))
147 avio_skip(pb, header_size + startpos - avio_tell(pb));
160 avio_skip(pb, 2); /* unused */
161 avio_rb32(pb); /* .ra4 */
162 avio_rb32(pb); /* data size */
163 avio_rb16(pb); /* version2 */
164 avio_rb32(pb); /* header size */
165 flavor= avio_rb16(pb); /* add codec info / flavor */
166 coded_framesize = avio_rb32(pb); /* coded frame size */
171 avio_rb32(pb); /* ??? */
172 bytes_per_minute = avio_rb32(pb);
177 avio_rb32(pb); /* ??? */
178 ast->sub_packet_h = sub_packet_h = avio_rb16(pb); /* 1 */
179 st->codecpar->block_align= avio_rb16(pb); /* frame size */
180 ast->sub_packet_size = sub_packet_size = avio_rb16(pb); /* sub packet size */
181 avio_rb16(pb); /* ??? */
183 avio_rb16(pb); avio_rb16(pb); avio_rb16(pb);
185 st->codecpar->sample_rate = avio_rb16(pb);
186 avio_rb32(pb);
187 st->codecpar->ch_layout.nb_channels = avio_rb16(pb);
189 ast->deint_id = avio_rl32(pb);
190 avio_read(pb, buf, 4);
194 get_str8(pb, buf, sizeof(buf)); /* desc */
196 get_str8(pb, buf, sizeof(buf)); /* desc */
220 avio_rb16(pb); avio_r8(pb);
222 avio_r8(pb);
223 codecdata_length = avio_rb32(pb);
246 if ((ret = rm_read_extradata(s, pb, st->codecpar, codecdata_length)) < 0)
251 avio_rb16(pb); avio_r8(pb);
253 avio_r8(pb);
254 codecdata_length = avio_rb32(pb);
260 avio_r8(pb);
261 if ((ret = rm_read_extradata(s, pb, st->codecpar, codecdata_length - 1)) < 0)
305 avio_r8(pb);
306 avio_r8(pb);
307 avio_r8(pb);
308 rm_read_metadata(s, pb, 0);
314 int ff_rm_read_mdpr_codecdata(AVFormatContext *s, AVIOContext *pb,
334 codec_pos = avio_tell(pb);
335 v = avio_rb32(pb);
339 if (rm_read_audio_stream_info(s, pb, st, rst, 0))
342 avio_seek(pb, -4, SEEK_CUR);
343 if ((ret = rm_read_extradata(s, pb, st->codecpar, codec_data_size)) < 0)
353 if (avio_rb16(pb) != 0) {
357 stream_count = avio_rb16(pb);
358 avio_skip(pb, 6*stream_count);
359 rule_count = avio_rb16(pb);
360 avio_skip(pb, 2*rule_count);
361 property_count = avio_rb16(pb);
364 avio_rb32(pb);
365 if (avio_rb16(pb) != 0) {
369 get_str8(pb, name, sizeof(name));
370 switch(avio_rb32(pb)) {
371 case 2: get_strl(pb, val, sizeof(val), avio_rb16(pb));
374 default: avio_skip(pb, avio_rb16(pb));
379 if (avio_rl32(pb) != MKTAG('V', 'I', 'D', 'O')) {
384 st->codecpar->codec_tag = avio_rl32(pb);
391 st->codecpar->width = avio_rb16(pb);
392 st->codecpar->height = avio_rb16(pb);
393 avio_skip(pb, 2); // looks like bits per sample
394 avio_skip(pb, 4); // always zero?
397 fps = avio_rb32(pb);
399 if ((ret = rm_read_extradata(s, pb, st->codecpar, codec_data_size - (avio_tell(pb) - codec_pos))) < 0)
416 size = avio_tell(pb) - codec_pos;
418 avio_skip(pb, codec_data_size - size);
430 AVIOContext *pb = s->pb;
435 if (avio_rl32(pb) != MKTAG('I','N','D','X'))
437 size = avio_rb32(pb);
440 avio_skip(pb, 2);
441 n_pkts = avio_rb32(pb);
442 str_id = avio_rb16(pb);
443 next_off = avio_rb32(pb);
452 str_id, avio_tell(pb));
454 } else if ((avio_size(pb) - avio_tell(pb)) / 14 < n_pkts) {
458 str_id, avio_size(pb), avio_tell(pb),
459 (avio_size(pb) - avio_tell(pb)) / 14);
464 if (avio_feof(pb))
466 avio_skip(pb, 2);
467 pts = avio_rb32(pb);
468 pos = avio_rb32(pb);
469 avio_skip(pb, 4); /* packet no. */
475 if (next_off && avio_tell(pb) < next_off &&
476 avio_seek(pb, next_off, SEEK_SET) < 0) {
498 return rm_read_audio_stream_info(s, s->pb, st, st->priv_data, 1);
501 static int rm_read_multi(AVFormatContext *s, AVIOContext *pb,
504 int number_of_streams = avio_rb16(pb);
509 avio_rb16(pb);
510 number_of_mdpr = avio_rb16(pb);
533 size2 = avio_rb32(pb);
534 ret = ff_rm_read_mdpr_codecdata(s, s->pb, st2, st2->priv_data,
546 AVIOContext *pb = s->pb;
557 tag = avio_rl32(pb);
565 tag_size = avio_rb32(pb);
568 avio_skip(pb, tag_size - 8);
571 if (avio_feof(pb))
573 tag = avio_rl32(pb);
574 tag_size = avio_rb32(pb);
575 avio_rb16(pb);
583 avio_rb32(pb); /* max bit rate */
584 avio_rb32(pb); /* avg bit rate */
585 avio_rb32(pb); /* max packet size */
586 avio_rb32(pb); /* avg packet size */
587 avio_rb32(pb); /* nb packets */
588 duration = avio_rb32(pb); /* duration */
590 avio_rb32(pb); /* preroll */
591 indx_off = avio_rb32(pb); /* index offset */
592 data_off = avio_rb32(pb); /* data offset */
593 avio_rb16(pb); /* nb streams */
594 flags = avio_rb16(pb); /* flags */
597 rm_read_metadata(s, pb, 1);
603 st->id = avio_rb16(pb);
604 avio_rb32(pb); /* max bit rate */
605 st->codecpar->bit_rate = avio_rb32(pb); /* bit rate */
606 avio_rb32(pb); /* max packet size */
607 avio_rb32(pb); /* avg packet size */
608 start_time = avio_rb32(pb); /* start time */
609 avio_rb32(pb); /* preroll */
610 duration = avio_rb32(pb); /* duration */
615 get_str8(pb, buf, sizeof(buf)); /* desc */
616 get_str8(pb, mime, sizeof(mime)); /* mimetype */
622 size = avio_rb32(pb);
623 codec_pos = avio_tell(pb);
625 ffio_ensure_seekback(pb, 4);
626 v = avio_rb32(pb);
628 ret = rm_read_multi(s, s->pb, st, mime);
631 avio_seek(pb, codec_pos + size, SEEK_SET);
633 avio_skip(pb, -4);
634 ret = ff_rm_read_mdpr_codecdata(s, s->pb, st, st->priv_data,
645 avio_skip(pb, tag_size - 10);
650 rm->nb_packets = avio_rb32(pb); /* number of packets */
653 avio_rb32(pb); /* next data header */
656 data_off = avio_tell(pb) - 18;
657 if (indx_off && (pb->seekable & AVIO_SEEKABLE_NORMAL) &&
659 avio_seek(pb, indx_off, SEEK_SET) >= 0) {
661 avio_seek(pb, data_off + 18, SEEK_SET);
667 static int get_num(AVIOContext *pb, int *len)
671 n = avio_rb16(pb);
677 n1 = avio_rb16(pb);
688 AVIOContext *pb = s->pb;
692 while(!avio_feof(pb)){
695 *pos= avio_tell(pb) - 3;
703 state= (state<<8) + avio_r8(pb);
708 len = avio_rb32(pb);
709 avio_skip(pb, 2);
710 n_pkts = avio_rb32(pb);
734 num = avio_rb16(pb);
735 *timestamp = avio_rb32(pb);
736 mlti_id = (avio_r8(pb) >> 1) - 1;
738 *flags = avio_r8(pb); /* flags */
748 avio_skip(pb, len);
759 static int rm_assemble_video_frame(AVFormatContext *s, AVIOContext *pb,
769 hdr = avio_r8(pb); len--;
773 seq = avio_r8(pb); len--;
776 len2 = get_num(pb, &len);
777 pos = get_num(pb, &len);
778 pic_num = avio_r8(pb); len--;
800 if ((ret = avio_read(pb, pkt->data + 9, len)) != len) {
811 if (len2 > ffio_limit(pb, len2)) {
823 vst->pktpos = avio_tell(pb);
840 if (avio_read(pb, vst->pkt.data + vst->videobufpos, len) != len)
876 static int readfull(AVFormatContext *s, AVIOContext *pb, uint8_t *dst, int n) {
877 int ret = avio_read(pb, dst, n);
887 ff_rm_parse_packet (AVFormatContext *s, AVIOContext *pb,
896 ret = rm_assemble_video_frame(s, pb, rm, ast, pkt, len, seq, ×tamp);
918 readfull(s, pb, ast->pkt.data+x*2*w+y*cfs, cfs);
922 readfull(s, pb, ast->pkt.data+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)), sps);
925 readfull(s, pb, ast->pkt.data + y * w, w);
945 ast->sub_packet_cnt = (avio_rb16(pb) & 0xf0) >> 4;
948 ast->sub_packet_lengths[x] = avio_rb16(pb);
954 ret = av_get_packet(pb, pkt, len);
960 ret = av_get_packet(pb, pkt, len);
975 ff_rm_retrieve_cache (AVFormatContext *s, AVIOContext *pb,
985 ret = av_get_packet(pb, pkt, ast->sub_packet_lengths[ast->sub_packet_cnt - rm->audio_pkt_cnt]);
1019 res = ff_rm_retrieve_cache(s, s->pb, st, st->priv_data, pkt);
1035 pos = avio_tell(s->pb);
1042 if (avio_feof(s->pb))
1047 res = ff_rm_parse_packet (s, s->pb, st, st->priv_data, len, pkt,
1102 if (avio_seek(s->pb, pos, SEEK_SET) < 0)
1116 h= avio_r8(s->pb); len--;
1118 seq = avio_r8(s->pb); len--;
1130 avio_skip(s->pb, len);
1183 AVIOContext *pb = s->pb;
1187 pos = avio_tell(pb);
1188 tag = avio_rl32(pb);
1190 if (avio_rb16(pb) != 1)
1192 if (avio_r8(pb) != 1)
1194 len = avio_rb32(pb);
1195 avio_skip(pb, len);
1196 avio_skip(pb, 5);
1197 temp = avio_rb64(pb);
1198 while (!avio_feof(pb) && temp) {
1200 temp = avio_rb64(pb);
1204 avio_skip(pb, offset - avio_tell(pb));
1205 if (avio_r8(pb) != 1)
1207 len = avio_rb32(pb);
1208 avio_skip(pb, len);
1209 if (avio_r8(pb) != 2)
1211 avio_skip(pb, 16);
1212 pos = avio_tell(pb);
1213 tag = avio_rl32(pb);
1219 if (avio_r8(pb) != 0)
1221 count = avio_rb32(pb);
1223 if (avio_feof(pb))
1226 type = avio_r8(pb);
1227 tlen = avio_rb32(pb);
1228 avio_get_str(pb, tlen, key, sizeof(key));
1229 len = avio_rb32(pb);
1231 avio_get_str(pb, len, val, sizeof(val));
1236 if (avio_feof(pb))
1238 av_log(s, AV_LOG_DEBUG, "%X", avio_r8(pb));
1242 nb_streams = value = avio_rb32(pb);
1244 value = avio_rb32(pb);
1248 avio_skip(pb, len);
1257 if (avio_r8(pb) != 1)
1260 count = avio_rb32(pb);
1262 if (avio_feof(pb))
1265 type = avio_r8(pb);
1266 tlen = avio_rb32(pb);
1267 avio_get_str(pb, tlen, key, sizeof(key));
1268 len = avio_rb32(pb);
1270 avio_get_str(pb, len, val, sizeof(val));
1273 ret = ffio_ensure_seekback(pb, 4);
1276 if (avio_rb32(pb) == MKBETAG('M', 'L', 'T', 'I')) {
1277 ret = rm_read_multi(s, pb, st, NULL);
1279 if (avio_feof(pb))
1281 avio_seek(pb, -4, SEEK_CUR);
1282 ret = ff_rm_read_mdpr_codecdata(s, pb, st, st->priv_data, len, NULL);
1292 if (avio_feof(pb))
1294 av_log(s, AV_LOG_DEBUG, "%X", avio_r8(pb));
1298 st->duration = avio_rb32(pb);
1300 value = avio_rb32(pb);
1304 avio_skip(pb, len);
1309 if (avio_r8(pb) != 6)
1311 avio_skip(pb, 12);
1312 avio_seek(pb, avio_rb64(pb) + pos, SEEK_SET);
1313 if (avio_r8(pb) != 8)
1315 avio_skip(pb, 8);
1324 AVIOContext *pb = s->pb;
1328 if (avio_feof(pb) || rm->data_end)
1331 pos = avio_tell(pb);
1339 ret = ff_rm_retrieve_cache(s, pb, st, st->priv_data, pkt);
1345 avio_skip(pb, rm->remaining_len);
1349 if (avio_feof(pb))
1352 opcode = avio_r8(pb);
1357 pts = avio_rb32(pb);
1358 index = avio_rb16(pb);
1362 avio_skip(pb, 4);
1363 size = avio_rb32(pb);
1364 avio_skip(pb, 4);
1372 ret = ff_rm_parse_packet(s, pb, st, st->priv_data, size, pkt,
1384 pos = avio_rb64(pb);
1390 av_log(s, AV_LOG_ERROR, "Unsupported opcode=%d at %"PRIX64"\n", opcode, avio_tell(pb) - 1);