Lines Matching defs:flv
31 #include "flv.h"
276 FLVContext *flv = s->priv_data;
277 int write_duration_filesize = !(flv->flags & FLV_NO_DURATION_FILESIZE);
284 flv->metadata_size_pos = avio_tell(pb);
298 metadata_count = 4 * !!flv->video_par +
299 5 * !!flv->audio_par +
300 1 * !!flv->data_par;
308 flv->duration_offset = avio_tell(pb);
313 if (flv->video_par) {
315 put_amf_double(pb, flv->video_par->width);
318 put_amf_double(pb, flv->video_par->height);
321 put_amf_double(pb, flv->video_par->bit_rate / 1024.0);
323 if (flv->framerate != 0.0) {
325 put_amf_double(pb, flv->framerate);
330 put_amf_double(pb, flv->video_par->codec_tag);
333 if (flv->audio_par) {
335 put_amf_double(pb, flv->audio_par->bit_rate / 1024.0);
338 put_amf_double(pb, flv->audio_par->sample_rate);
341 put_amf_double(pb, flv->audio_par->codec_id == AV_CODEC_ID_PCM_U8 ? 8 : 16);
344 put_amf_bool(pb, flv->audio_par->ch_layout.nb_channels == 2);
347 put_amf_double(pb, flv->audio_par->codec_tag);
350 if (flv->data_par) {
389 flv->filesize_offset = avio_tell(pb);
393 if (flv->flags & FLV_ADD_KEYFRAME_INDEX) {
394 flv->acurframeindex = 0;
395 flv->keyframe_index_size = 0;
398 put_amf_bool(pb, !!flv->video_par);
406 put_amf_bool(pb, !!flv->audio_par);
418 flv->datasize_offset = avio_tell(pb);
419 flv->datasize = 0;
420 put_amf_double(pb, flv->datasize);
424 flv->videosize_offset = avio_tell(pb);
425 flv->videosize = 0;
426 put_amf_double(pb, flv->videosize);
430 flv->audiosize_offset = avio_tell(pb);
431 flv->audiosize = 0;
432 put_amf_double(pb, flv->audiosize);
436 flv->lasttimestamp_offset = avio_tell(pb);
437 flv->lasttimestamp = 0;
442 flv->lastkeyframetimestamp_offset = avio_tell(pb);
443 flv->lastkeyframetimestamp = 0;
448 flv->lastkeyframelocation_offset = avio_tell(pb);
449 flv->lastkeyframelocation = 0;
457 flv->keyframes_info_offset = avio_tell(pb);
464 flv->metadata_totalsize = avio_tell(pb) - flv->metadata_size_pos - 10;
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);
481 "%s codec %s not compatible with flv\n",
490 FLVContext *flv = s->priv_data;
506 if (!par->extradata_size && (flv->flags & FLV_AAC_SEQ_HEADER_DETECT)) {
509 int channels = flv->audio_par->ch_layout.nb_channels
510 - (flv->audio_par->ch_layout.nb_channels == 8 ? 1 : 0);
515 if (flv->audio_par->sample_rate
520 put_bits(&pbc, 5, flv->audio_par->profile + 1); //profile
549 static int flv_append_keyframe_info(AVFormatContext *s, FLVContext *flv, double ts, int64_t pos)
561 if (!flv->filepositions_count) {
562 flv->filepositions = position;
563 flv->head_filepositions = flv->filepositions;
566 flv->filepositions->next = position;
568 flv->filepositions = flv->filepositions->next;
571 flv->filepositions_count++;
580 FLVContext *flv = s->priv_data;
582 metadata_size = flv->filepositions_count * 9 * 2 + 10; /* filepositions and times value */
587 flv->keyframe_index_size = metadata_size;
592 ret = ff_format_shift_data(s, flv->keyframes_info_offset, metadata_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);
608 FLVContext *flv = s->priv_data;
617 flv->framerate = av_q2d(s->streams[i]->avg_frame_rate);
619 if (flv->video_par) {
621 "at most one video stream is supported in flv\n");
624 flv->video_par = par;
641 "Muxing VP6 in flv will produce flipped video on playback.\n");
645 if (flv->audio_par) {
647 "at most one audio stream is supported in flv\n");
650 flv->audio_par = par;
655 "16-bit big-endian audio in flv is valid but most likely unplayable (hardware dependent); use s16le\n");
660 flv->data_par = par;
668 flv->data_par = par;
684 flv->delay = AV_NOPTS_VALUE;
693 FLVContext *flv = s->priv_data;
697 avio_w8(pb, FLV_HEADER_FLAG_HASAUDIO * !!flv->audio_par +
698 FLV_HEADER_FLAG_HASVIDEO * !!flv->video_par);
709 flv->reserved = 5;
712 if (flv->flags & FLV_NO_METADATA) {
722 flv->datastart_offset = avio_tell(pb);
730 FLVContext *flv = s->priv_data;
731 int build_keyframes_idx = flv->flags & FLV_ADD_KEYFRAME_INDEX;
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);
758 avio_seek(pb, flv->keyframes_info_offset, SEEK_SET);
760 put_amf_dword_array(pb, flv->filepositions_count);
761 for (newflv_posinfo = flv->head_filepositions; newflv_posinfo; newflv_posinfo = newflv_posinfo->next) {
762 put_amf_double(pb, newflv_posinfo->keyframe_position + flv->keyframe_index_size);
766 put_amf_dword_array(pb, flv->filepositions_count);
767 for (newflv_posinfo = flv->head_filepositions; newflv_posinfo; newflv_posinfo = newflv_posinfo->next) {
774 avio_seek(pb, cur_pos + flv->keyframe_index_size, SEEK_SET);
778 if (flv->flags & FLV_NO_SEQUENCE_END) {
794 flv->datasize = file_size - flv->datastart_offset;
795 avio_seek(pb, flv->datasize_offset, SEEK_SET);
796 put_amf_double(pb, flv->datasize);
798 if (!(flv->flags & FLV_NO_METADATA)) {
799 if (!(flv->flags & FLV_NO_DURATION_FILESIZE)) {
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) {
821 FLVContext *flv = s->priv_data;
855 if (flv->delay == AV_NOPTS_VALUE)
856 flv->delay = -pkt->dts;
858 if (pkt->dts < -flv->delay) {
878 pkt->flags & AV_PKT_FLAG_KEY && (flv->video_par ? par->codec_type == AVMEDIA_TYPE_VIDEO : 1) ? AVIO_DATA_MARKER_SYNC_POINT : AVIO_DATA_MARKER_BOUNDARY_POINT);
937 avio_wb24(pb, flv->reserved);
988 flv->duration = FFMAX(flv->duration,
989 pkt->pts + flv->delay + pkt->duration);
992 if (flv->flags & FLV_ADD_KEYFRAME_INDEX) {
995 flv->videosize += (avio_tell(pb) - cur_offset);
996 flv->lasttimestamp = flv->acurframeindex / flv->framerate;
997 flv->acurframeindex++;
999 double ts = flv->lasttimestamp;
1002 flv->lastkeyframetimestamp = ts;
1003 flv->lastkeyframelocation = pos;
1004 ret = flv_append_keyframe_info(s, flv, ts, pos);
1011 flv->audiosize += (avio_tell(pb) - cur_offset);
1039 FLVContext *flv = s->priv_data;
1040 FLVFileposition *filepos = flv->head_filepositions;
1047 flv->filepositions = flv->head_filepositions = NULL;
1048 flv->filepositions_count = 0;
1062 .class_name = "flv muxer",
1069 .name = "flv",
1071 .mime_type = "video/x-flv",
1072 .extensions = "flv",