Lines Matching full:os
78 static int parse_header(OutputStream *os, const uint8_t *buf, int buf_size) in parse_header() argument
92 if (os->nb_extra_packets >= FF_ARRAY_ELEMS(os->extra_packets)) in parse_header()
94 os->extra_packet_sizes[os->nb_extra_packets] = size; in parse_header()
95 os->extra_packets[os->nb_extra_packets] = av_memdup(buf, size); in parse_header()
96 if (!os->extra_packets[os->nb_extra_packets]) in parse_header()
98 os->nb_extra_packets++; in parse_header()
100 if (os->metadata) in parse_header()
102 os->metadata_size = size - 11 - 4; in parse_header()
103 os->metadata = av_memdup(buf + 11, os->metadata_size); in parse_header()
104 if (!os->metadata) in parse_header()
110 if (!os->metadata) in parse_header()
117 OutputStream *os = opaque; in hds_write() local
118 if (os->out) { in hds_write()
119 avio_write(os->out, buf, buf_size); in hds_write()
121 if (!os->metadata_size) { in hds_write()
125 if ((ret = parse_header(os, buf, buf_size)) < 0) in hds_write()
139 OutputStream *os = &c->streams[i]; in hds_free() local
140 if (os->out) in hds_free()
141 ff_format_io_close(s, &os->out); in hds_free()
142 if (os->ctx && os->ctx_inited) in hds_free()
143 av_write_trailer(os->ctx); in hds_free()
144 if (os->ctx) in hds_free()
145 avio_context_free(&os->ctx->pb); in hds_free()
146 avformat_free_context(os->ctx); in hds_free()
147 av_freep(&os->metadata); in hds_free()
148 for (j = 0; j < os->nb_extra_packets; j++) in hds_free()
149 av_freep(&os->extra_packets[j]); in hds_free()
150 for (j = 0; j < os->nb_fragments; j++) in hds_free()
151 av_freep(&os->fragments[j]); in hds_free()
152 av_freep(&os->fragments); in hds_free()
184 OutputStream *os = &c->streams[i]; in write_manifest() local
185 int b64_size = AV_BASE64_SIZE(os->metadata_size); in write_manifest()
191 av_base64_encode(base64, b64_size, os->metadata, os->metadata_size); in write_manifest()
194 …media bitrate=\"%d\" url=\"stream%d\" bootstrapInfoId=\"bootstrap%d\">\n", os->bitrate/1000, i, i); in write_manifest()
216 static int write_abst(AVFormatContext *s, OutputStream *os, int final) in write_abst() argument
224 int index = s->streams[os->first_stream]->id; in write_abst()
227 start = FFMAX(os->nb_fragments - c->window_size, 0); in write_abst()
228 fragments = os->nb_fragments - start; in write_abst()
230 cur_media_time = os->last_ts; in write_abst()
231 else if (os->nb_fragments) in write_abst()
232 cur_media_time = os->fragments[os->nb_fragments - 1]->start_time; in write_abst()
246 avio_wb32(out, os->fragment_index - 1); // BootstrapinfoVersion in write_abst()
264 avio_wb32(out, final ? (os->fragment_index - 1) : 0xffffffff); // FragmentsPerSegment in write_abst()
274 for (i = start; i < os->nb_fragments; i++) { in write_abst()
275 avio_wb32(out, os->fragments[i]->n); in write_abst()
276 avio_wb64(out, os->fragments[i]->start_time); in write_abst()
277 avio_wb32(out, os->fragments[i]->duration); in write_abst()
285 static int init_file(AVFormatContext *s, OutputStream *os, int64_t start_ts) in init_file() argument
288 ret = s->io_open(s, &os->out, os->temp_filename, AVIO_FLAG_WRITE, NULL); in init_file()
291 avio_wb32(os->out, 0); in init_file()
292 avio_wl32(os->out, MKTAG('m','d','a','t')); in init_file()
293 for (i = 0; i < os->nb_extra_packets; i++) { in init_file()
294 AV_WB24(os->extra_packets[i] + 4, start_ts); in init_file()
295 os->extra_packets[i][7] = (start_ts >> 24) & 0x7f; in init_file()
296 avio_write(os->out, os->extra_packets[i], os->extra_packet_sizes[i]); in init_file()
301 static void close_file(AVFormatContext *s, OutputStream *os) in close_file() argument
303 int64_t pos = avio_tell(os->out); in close_file()
304 avio_seek(os->out, 0, SEEK_SET); in close_file()
305 avio_wb32(os->out, pos); in close_file()
306 avio_flush(os->out); in close_file()
307 ff_format_io_close(s, &os->out); in close_file()
332 OutputStream *os = &c->streams[c->nb_streams]; in hds_write_header() local
341 if (os->has_video) { in hds_write_header()
343 os++; in hds_write_header()
345 os->has_video = 1; in hds_write_header()
347 if (os->has_audio) { in hds_write_header()
349 os++; in hds_write_header()
351 os->has_audio = 1; in hds_write_header()
356 os->bitrate += s->streams[i]->codecpar->bit_rate; in hds_write_header()
358 if (!os->ctx) { in hds_write_header()
359 os->first_stream = i; in hds_write_header()
364 os->ctx = ctx; in hds_write_header()
369 ctx->pb = avio_alloc_context(os->iobuf, sizeof(os->iobuf), in hds_write_header()
370 1, os, in hds_write_header()
376 ctx = os->ctx; in hds_write_header()
392 OutputStream *os = &c->streams[i]; in hds_write_header() local
394 if ((ret = avformat_write_header(os->ctx, NULL)) < 0) { in hds_write_header()
397 os->ctx_inited = 1; in hds_write_header()
398 avio_flush(os->ctx->pb); in hds_write_header()
399 for (j = 0; j < os->ctx->nb_streams; j++) in hds_write_header()
400 s->streams[os->first_stream + j]->time_base = os->ctx->streams[j]->time_base; in hds_write_header()
402 snprintf(os->temp_filename, sizeof(os->temp_filename), in hds_write_header()
404 ret = init_file(s, os, 0); in hds_write_header()
408 if (!os->has_video && c->min_frag_duration <= 0) { in hds_write_header()
412 os->fragment_index = 1; in hds_write_header()
413 write_abst(s, os, 0); in hds_write_header()
420 static int add_fragment(OutputStream *os, const char *file, in add_fragment() argument
426 if (os->nb_fragments >= os->fragments_size) { in add_fragment()
428 os->fragments_size = (os->fragments_size + 1) * 2; in add_fragment()
429 if ((ret = av_reallocp_array(&os->fragments, os->fragments_size, in add_fragment()
430 sizeof(*os->fragments))) < 0) { in add_fragment()
431 os->fragments_size = 0; in add_fragment()
432 os->nb_fragments = 0; in add_fragment()
442 frag->n = os->fragment_index; in add_fragment()
443 os->fragments[os->nb_fragments++] = frag; in add_fragment()
444 os->fragment_index++; in add_fragment()
448 static int hds_flush(AVFormatContext *s, OutputStream *os, int final, in hds_flush() argument
454 int index = s->streams[os->first_stream]->id; in hds_flush()
456 if (!os->packets_written) in hds_flush()
459 avio_flush(os->ctx->pb); in hds_flush()
460 os->packets_written = 0; in hds_flush()
461 close_file(s, os); in hds_flush()
464 "%s/stream%dSeg1-Frag%d", s->url, index, os->fragment_index); in hds_flush()
465 ret = ff_rename(os->temp_filename, target_filename, s); in hds_flush()
468 add_fragment(os, target_filename, os->frag_start_ts, end_ts - os->frag_start_ts); in hds_flush()
471 ret = init_file(s, os, end_ts); in hds_flush()
477 int remove = os->nb_fragments - c->window_size - c->extra_window_size; in hds_flush()
479 remove = os->nb_fragments; in hds_flush()
482 unlink(os->fragments[i]->file); in hds_flush()
483 av_freep(&os->fragments[i]); in hds_flush()
485 os->nb_fragments -= remove; in hds_flush()
486 memmove(os->fragments, os->fragments + remove, in hds_flush()
487 os->nb_fragments * sizeof(*os->fragments)); in hds_flush()
492 ret = write_abst(s, os, final); in hds_flush()
501 OutputStream *os = &c->streams[s->streams[pkt->stream_index]->id]; in hds_write_packet() local
502 int64_t end_dts = os->fragment_index * (int64_t)c->min_frag_duration; in hds_write_packet()
508 if ((!os->has_video || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) && in hds_write_packet()
511 pkt->flags & AV_PKT_FLAG_KEY && os->packets_written) { in hds_write_packet()
513 if ((ret = hds_flush(s, os, 0, pkt->dts)) < 0) in hds_write_packet()
519 if (!os->packets_written) in hds_write_packet()
520 os->frag_start_ts = pkt->dts; in hds_write_packet()
521 os->last_ts = pkt->dts; in hds_write_packet()
523 os->packets_written++; in hds_write_packet()
524 return ff_write_chained(os->ctx, pkt->stream_index - os->first_stream, pkt, s, 0); in hds_write_packet()