Lines Matching refs:pb

225 static void put_amf_string(AVIOContext *pb, const char *str)
228 avio_wb16(pb, len);
229 avio_write(pb, str, len);
233 static void put_timestamp(AVIOContext *pb, int64_t ts) {
234 avio_wb24(pb, ts & 0xFFFFFF);
235 avio_w8(pb, (ts >> 24) & 0x7F);
238 static void put_avc_eos_tag(AVIOContext *pb, unsigned ts)
240 avio_w8(pb, FLV_TAG_TYPE_VIDEO);
241 avio_wb24(pb, 5); /* Tag Data Size */
242 put_timestamp(pb, ts);
243 avio_wb24(pb, 0); /* StreamId = 0 */
244 avio_w8(pb, 23); /* ub[4] FrameType = 1, ub[4] CodecId = 7 */
245 avio_w8(pb, 2); /* AVC end of sequence */
246 avio_wb24(pb, 0); /* Always 0 for AVC EOS. */
247 avio_wb32(pb, 16); /* Size of FLV tag */
250 static void put_amf_double(AVIOContext *pb, double d)
252 avio_w8(pb, AMF_DATA_TYPE_NUMBER);
253 avio_wb64(pb, av_double2int(d));
256 static void put_amf_byte(AVIOContext *pb, unsigned char abyte)
258 avio_w8(pb, abyte);
261 static void put_amf_dword_array(AVIOContext *pb, uint32_t dw)
263 avio_w8(pb, AMF_DATA_TYPE_ARRAY);
264 avio_wb32(pb, dw);
267 static void put_amf_bool(AVIOContext *pb, int b)
269 avio_w8(pb, AMF_DATA_TYPE_BOOL);
270 avio_w8(pb, !!b);
275 AVIOContext *pb = s->pb;
283 avio_w8(pb, FLV_TAG_TYPE_META); // tag type META
284 flv->metadata_size_pos = avio_tell(pb);
285 avio_wb24(pb, 0); // size of data part (sum of all parts below)
286 put_timestamp(pb, ts); // timestamp
287 avio_wb24(pb, 0); // reserved
292 avio_w8(pb, AMF_DATA_TYPE_STRING);
293 put_amf_string(pb, "onMetaData"); // 12 bytes
296 avio_w8(pb, AMF_DATA_TYPE_MIXEDARRAY);
297 metadata_count_pos = avio_tell(pb);
304 avio_wb32(pb, metadata_count);
307 put_amf_string(pb, "duration");
308 flv->duration_offset = avio_tell(pb);
310 put_amf_double(pb, s->duration / AV_TIME_BASE);
314 put_amf_string(pb, "width");
315 put_amf_double(pb, flv->video_par->width);
317 put_amf_string(pb, "height");
318 put_amf_double(pb, flv->video_par->height);
320 put_amf_string(pb, "videodatarate");
321 put_amf_double(pb, flv->video_par->bit_rate / 1024.0);
324 put_amf_string(pb, "framerate");
325 put_amf_double(pb, flv->framerate);
329 put_amf_string(pb, "videocodecid");
330 put_amf_double(pb, flv->video_par->codec_tag);
334 put_amf_string(pb, "audiodatarate");
335 put_amf_double(pb, flv->audio_par->bit_rate / 1024.0);
337 put_amf_string(pb, "audiosamplerate");
338 put_amf_double(pb, flv->audio_par->sample_rate);
340 put_amf_string(pb, "audiosamplesize");
341 put_amf_double(pb, flv->audio_par->codec_id == AV_CODEC_ID_PCM_U8 ? 8 : 16);
343 put_amf_string(pb, "stereo");
344 put_amf_bool(pb, flv->audio_par->ch_layout.nb_channels == 2);
346 put_amf_string(pb, "audiocodecid");
347 put_amf_double(pb, flv->audio_par->codec_tag);
351 put_amf_string(pb, "datastream");
352 put_amf_double(pb, 0.0);
381 put_amf_string(pb, tag->key);
382 avio_w8(pb, AMF_DATA_TYPE_STRING);
383 put_amf_string(pb, tag->value);
388 put_amf_string(pb, "filesize");
389 flv->filesize_offset = avio_tell(pb);
390 put_amf_double(pb, 0); // delayed write
397 put_amf_string(pb, "hasVideo");
398 put_amf_bool(pb, !!flv->video_par);
401 put_amf_string(pb, "hasKeyframes");
402 put_amf_bool(pb, 1);
405 put_amf_string(pb, "hasAudio");
406 put_amf_bool(pb, !!flv->audio_par);
409 put_amf_string(pb, "hasMetadata");
410 put_amf_bool(pb, 1);
413 put_amf_string(pb, "canSeekToEnd");
414 put_amf_bool(pb, 1);
417 put_amf_string(pb, "datasize");
418 flv->datasize_offset = avio_tell(pb);
420 put_amf_double(pb, flv->datasize);
423 put_amf_string(pb, "videosize");
424 flv->videosize_offset = avio_tell(pb);
426 put_amf_double(pb, flv->videosize);
429 put_amf_string(pb, "audiosize");
430 flv->audiosize_offset = avio_tell(pb);
432 put_amf_double(pb, flv->audiosize);
435 put_amf_string(pb, "lasttimestamp");
436 flv->lasttimestamp_offset = avio_tell(pb);
438 put_amf_double(pb, 0);
441 put_amf_string(pb, "lastkeyframetimestamp");
442 flv->lastkeyframetimestamp_offset = avio_tell(pb);
444 put_amf_double(pb, 0);
447 put_amf_string(pb, "lastkeyframelocation");
448 flv->lastkeyframelocation_offset = avio_tell(pb);
450 put_amf_double(pb, 0);
453 put_amf_string(pb, "keyframes");
454 put_amf_byte(pb, AMF_DATA_TYPE_OBJECT);
457 flv->keyframes_info_offset = avio_tell(pb);
460 put_amf_string(pb, "");
461 avio_w8(pb, AMF_END_OF_OBJECT);
464 flv->metadata_totalsize = avio_tell(pb) - flv->metadata_size_pos - 10;
466 avio_seek(pb, metadata_count_pos, SEEK_SET);
467 avio_wb32(pb, metadata_count);
469 avio_seek(pb, flv->metadata_size_pos, SEEK_SET);
470 avio_wb24(pb, flv->metadata_totalsize);
471 avio_skip(pb, flv->metadata_totalsize + 10 - 3);
472 flv->metadata_totalsize_pos = avio_tell(pb);
473 avio_wb32(pb, flv->metadata_totalsize + 11);
489 AVIOContext *pb = s->pb;
495 avio_w8(pb,
498 avio_wb24(pb, 0); // size patched later
499 put_timestamp(pb, ts);
500 avio_wb24(pb, 0); // streamid
501 pos = avio_tell(pb);
503 avio_w8(pb, get_audio_flags(s, par));
504 avio_w8(pb, 0); // AAC sequence header
528 avio_w8(pb, data[0]);
529 avio_w8(pb, data[1]);
534 avio_write(pb, par->extradata, par->extradata_size);
536 avio_w8(pb, par->codec_tag | FLV_FRAME_KEY); // flags
537 avio_w8(pb, 0); // AVC sequence header
538 avio_wb24(pb, 0); // composition time
539 ff_isom_write_avcc(pb, par->extradata, par->extradata_size);
541 data_size = avio_tell(pb) - pos;
542 avio_seek(pb, -data_size - 10, SEEK_CUR);
543 avio_wb24(pb, data_size);
544 avio_skip(pb, data_size + 10 - 3);
545 avio_wb32(pb, data_size + 11); // previous tag size
596 avio_seek(s->pb, flv->metadata_size_pos, SEEK_SET);
597 avio_wb24(s->pb, flv->metadata_totalsize + metadata_size);
599 avio_seek(s->pb, flv->metadata_totalsize_pos + metadata_size, SEEK_SET);
600 avio_wb32(s->pb, flv->metadata_totalsize + 11 + metadata_size);
692 AVIOContext *pb = s->pb;
695 avio_write(pb, "FLV", 3);
696 avio_w8(pb, 1);
697 avio_w8(pb, FLV_HEADER_FLAG_HASAUDIO * !!flv->audio_par +
699 avio_wb32(pb, 9);
700 avio_wb32(pb, 0);
704 avio_w8(pb, 8); // message type
705 avio_wb24(pb, 0); // include flags
706 avio_wb24(pb, 0); // time stamp
707 avio_wb32(pb, 0); // reserved
708 avio_wb32(pb, 11); // size
713 pb->seekable = 0;
722 flv->datastart_offset = avio_tell(pb);
729 AVIOContext *pb = s->pb;
733 int64_t cur_pos = avio_tell(s->pb);
738 avio_seek(pb, flv->videosize_offset, SEEK_SET);
739 put_amf_double(pb, flv->videosize);
741 avio_seek(pb, flv->audiosize_offset, SEEK_SET);
742 put_amf_double(pb, flv->audiosize);
744 avio_seek(pb, flv->lasttimestamp_offset, SEEK_SET);
745 put_amf_double(pb, flv->lasttimestamp);
747 avio_seek(pb, flv->lastkeyframetimestamp_offset, SEEK_SET);
748 put_amf_double(pb, flv->lastkeyframetimestamp);
750 avio_seek(pb, flv->lastkeyframelocation_offset, SEEK_SET);
751 put_amf_double(pb, flv->lastkeyframelocation + flv->keyframe_index_size);
752 avio_seek(pb, cur_pos, SEEK_SET);
758 avio_seek(pb, flv->keyframes_info_offset, SEEK_SET);
759 put_amf_string(pb, "filepositions");
760 put_amf_dword_array(pb, flv->filepositions_count);
762 put_amf_double(pb, newflv_posinfo->keyframe_position + flv->keyframe_index_size);
765 put_amf_string(pb, "times");
766 put_amf_dword_array(pb, flv->filepositions_count);
768 put_amf_double(pb, newflv_posinfo->keyframe_timestamp);
771 put_amf_string(pb, "");
772 avio_w8(pb, AMF_END_OF_OBJECT);
774 avio_seek(pb, cur_pos + flv->keyframe_index_size, SEEK_SET);
787 put_avc_eos_tag(pb, sc->last_ts);
791 file_size = avio_tell(pb);
795 avio_seek(pb, flv->datasize_offset, SEEK_SET);
796 put_amf_double(pb, flv->datasize);
801 if (avio_seek(pb, flv->duration_offset, SEEK_SET) < 0) {
804 put_amf_double(pb, flv->duration / (double)1000);
806 if (avio_seek(pb, flv->filesize_offset, SEEK_SET) < 0) {
809 put_amf_double(pb, file_size);
819 AVIOContext *pb = s->pb;
827 int64_t cur_offset = avio_tell(pb);
877 avio_write_marker(pb, av_rescale(ts, AV_TIME_BASE, 1000),
882 avio_w8(pb, FLV_TAG_TYPE_VIDEO);
893 avio_w8(pb, FLV_TAG_TYPE_AUDIO);
897 avio_w8(pb, FLV_TAG_TYPE_META);
935 avio_wb24(pb, size + flags_size);
936 put_timestamp(pb, ts);
937 avio_wb24(pb, flv->reserved);
942 int64_t metadata_size_pos = avio_tell(pb);
945 avio_w8(pb, AMF_DATA_TYPE_STRING);
946 put_amf_string(pb, "onTextData");
947 avio_w8(pb, AMF_DATA_TYPE_MIXEDARRAY);
948 avio_wb32(pb, 2);
949 put_amf_string(pb, "type");
950 avio_w8(pb, AMF_DATA_TYPE_STRING);
951 put_amf_string(pb, "Text");
952 put_amf_string(pb, "text");
953 avio_w8(pb, AMF_DATA_TYPE_STRING);
954 put_amf_string(pb, pkt->data);
955 put_amf_string(pb, "");
956 avio_w8(pb, AMF_END_OF_OBJECT);
959 avio_write(pb, data ? data : pkt->data, size);
962 data_size = avio_tell(pb) - metadata_size_pos;
963 avio_seek(pb, metadata_size_pos - 10, SEEK_SET);
964 avio_wb24(pb, data_size);
965 avio_seek(pb, data_size + 10 - 3, SEEK_CUR);
966 avio_wb32(pb, data_size + 11);
969 avio_w8(pb,flags);
971 avio_w8(pb,0);
974 avio_w8(pb, par->extradata[0]);
976 avio_w8(pb, ((FFALIGN(par->width, 16) - par->width) << 4) |
979 avio_w8(pb, 1); // AAC raw
981 avio_w8(pb, 1); // AVC NALU
982 avio_wb24(pb, pkt->pts - pkt->dts);
985 avio_write(pb, data ? data : pkt->data, size);
987 avio_wb32(pb, size + flags_size + 11); // previous tag size
995 flv->videosize += (avio_tell(pb) - cur_offset);
1011 flv->audiosize += (avio_tell(pb) - cur_offset);