Lines Matching refs:os
79 static int parse_header(OutputStream *os, const uint8_t *buf, int buf_size) in parse_header() argument
93 if (os->nb_extra_packets >= FF_ARRAY_ELEMS(os->extra_packets)) in parse_header()
95 os->extra_packet_sizes[os->nb_extra_packets] = size; in parse_header()
96 os->extra_packets[os->nb_extra_packets] = av_malloc(size); in parse_header()
97 if (!os->extra_packets[os->nb_extra_packets]) in parse_header()
99 memcpy(os->extra_packets[os->nb_extra_packets], buf, size); in parse_header()
100 os->nb_extra_packets++; in parse_header()
102 if (os->metadata) in parse_header()
104 os->metadata_size = size - 11 - 4; in parse_header()
105 os->metadata = av_malloc(os->metadata_size); in parse_header()
106 if (!os->metadata) in parse_header()
108 memcpy(os->metadata, buf + 11, os->metadata_size); in parse_header()
113 if (!os->metadata) in parse_header()
120 OutputStream *os = opaque; in hds_write() local
121 if (os->out) { in hds_write()
122 avio_write(os->out, buf, buf_size); in hds_write()
124 if (!os->metadata_size) { in hds_write()
128 if ((ret = parse_header(os, buf, buf_size)) < 0) in hds_write()
142 OutputStream *os = &c->streams[i]; in hds_free() local
143 if (os->out) in hds_free()
144 ff_format_io_close(s, &os->out); in hds_free()
145 if (os->ctx && os->ctx_inited) in hds_free()
146 av_write_trailer(os->ctx); in hds_free()
147 if (os->ctx) in hds_free()
148 avio_context_free(&os->ctx->pb); in hds_free()
149 avformat_free_context(os->ctx); in hds_free()
150 av_freep(&os->metadata); in hds_free()
151 for (j = 0; j < os->nb_extra_packets; j++) in hds_free()
152 av_freep(&os->extra_packets[j]); in hds_free()
153 for (j = 0; j < os->nb_fragments; j++) in hds_free()
154 av_freep(&os->fragments[j]); in hds_free()
155 av_freep(&os->fragments); in hds_free()
187 OutputStream *os = &c->streams[i]; in write_manifest() local
188 int b64_size = AV_BASE64_SIZE(os->metadata_size); in write_manifest()
194 av_base64_encode(base64, b64_size, os->metadata, os->metadata_size); in write_manifest()
197 …media bitrate=\"%d\" url=\"stream%d\" bootstrapInfoId=\"bootstrap%d\">\n", os->bitrate/1000, i, i); in write_manifest()
219 static int write_abst(AVFormatContext *s, OutputStream *os, int final) in write_abst() argument
227 int index = s->streams[os->first_stream]->id; in write_abst()
230 start = FFMAX(os->nb_fragments - c->window_size, 0); in write_abst()
231 fragments = os->nb_fragments - start; in write_abst()
233 cur_media_time = os->last_ts; in write_abst()
234 else if (os->nb_fragments) in write_abst()
235 cur_media_time = os->fragments[os->nb_fragments - 1]->start_time; in write_abst()
249 avio_wb32(out, os->fragment_index - 1); // BootstrapinfoVersion in write_abst()
267 avio_wb32(out, final ? (os->fragment_index - 1) : 0xffffffff); // FragmentsPerSegment in write_abst()
277 for (i = start; i < os->nb_fragments; i++) { in write_abst()
278 avio_wb32(out, os->fragments[i]->n); in write_abst()
279 avio_wb64(out, os->fragments[i]->start_time); in write_abst()
280 avio_wb32(out, os->fragments[i]->duration); in write_abst()
288 static int init_file(AVFormatContext *s, OutputStream *os, int64_t start_ts) in init_file() argument
291 ret = s->io_open(s, &os->out, os->temp_filename, AVIO_FLAG_WRITE, NULL); in init_file()
294 avio_wb32(os->out, 0); in init_file()
295 avio_wl32(os->out, MKTAG('m','d','a','t')); in init_file()
296 for (i = 0; i < os->nb_extra_packets; i++) { in init_file()
297 AV_WB24(os->extra_packets[i] + 4, start_ts); in init_file()
298 os->extra_packets[i][7] = (start_ts >> 24) & 0x7f; in init_file()
299 avio_write(os->out, os->extra_packets[i], os->extra_packet_sizes[i]); in init_file()
304 static void close_file(AVFormatContext *s, OutputStream *os) in close_file() argument
306 int64_t pos = avio_tell(os->out); in close_file()
307 avio_seek(os->out, 0, SEEK_SET); in close_file()
308 avio_wb32(os->out, pos); in close_file()
309 avio_flush(os->out); in close_file()
310 ff_format_io_close(s, &os->out); in close_file()
335 OutputStream *os = &c->streams[c->nb_streams]; in hds_write_header() local
344 if (os->has_video) { in hds_write_header()
346 os++; in hds_write_header()
348 os->has_video = 1; in hds_write_header()
350 if (os->has_audio) { in hds_write_header()
352 os++; in hds_write_header()
354 os->has_audio = 1; in hds_write_header()
359 os->bitrate += s->streams[i]->codecpar->bit_rate; in hds_write_header()
361 if (!os->ctx) { in hds_write_header()
362 os->first_stream = i; in hds_write_header()
367 os->ctx = ctx; in hds_write_header()
372 ctx->pb = avio_alloc_context(os->iobuf, sizeof(os->iobuf), in hds_write_header()
373 AVIO_FLAG_WRITE, os, in hds_write_header()
379 ctx = os->ctx; in hds_write_header()
395 OutputStream *os = &c->streams[i]; in hds_write_header() local
397 if ((ret = avformat_write_header(os->ctx, NULL)) < 0) { in hds_write_header()
400 os->ctx_inited = 1; in hds_write_header()
401 avio_flush(os->ctx->pb); in hds_write_header()
402 for (j = 0; j < os->ctx->nb_streams; j++) in hds_write_header()
403 s->streams[os->first_stream + j]->time_base = os->ctx->streams[j]->time_base; in hds_write_header()
405 snprintf(os->temp_filename, sizeof(os->temp_filename), in hds_write_header()
407 ret = init_file(s, os, 0); in hds_write_header()
411 if (!os->has_video && c->min_frag_duration <= 0) { in hds_write_header()
415 os->fragment_index = 1; in hds_write_header()
416 write_abst(s, os, 0); in hds_write_header()
423 static int add_fragment(OutputStream *os, const char *file, in add_fragment() argument
429 if (os->nb_fragments >= os->fragments_size) { in add_fragment()
431 os->fragments_size = (os->fragments_size + 1) * 2; in add_fragment()
432 if ((ret = av_reallocp_array(&os->fragments, os->fragments_size, in add_fragment()
433 sizeof(*os->fragments))) < 0) { in add_fragment()
434 os->fragments_size = 0; in add_fragment()
435 os->nb_fragments = 0; in add_fragment()
445 frag->n = os->fragment_index; in add_fragment()
446 os->fragments[os->nb_fragments++] = frag; in add_fragment()
447 os->fragment_index++; in add_fragment()
451 static int hds_flush(AVFormatContext *s, OutputStream *os, int final, in hds_flush() argument
457 int index = s->streams[os->first_stream]->id; in hds_flush()
459 if (!os->packets_written) in hds_flush()
462 avio_flush(os->ctx->pb); in hds_flush()
463 os->packets_written = 0; in hds_flush()
464 close_file(s, os); in hds_flush()
467 "%s/stream%dSeg1-Frag%d", s->url, index, os->fragment_index); in hds_flush()
468 ret = ff_rename(os->temp_filename, target_filename, s); in hds_flush()
471 add_fragment(os, target_filename, os->frag_start_ts, end_ts - os->frag_start_ts); in hds_flush()
474 ret = init_file(s, os, end_ts); in hds_flush()
480 int remove = os->nb_fragments - c->window_size - c->extra_window_size; in hds_flush()
482 remove = os->nb_fragments; in hds_flush()
485 unlink(os->fragments[i]->file); in hds_flush()
486 av_freep(&os->fragments[i]); in hds_flush()
488 os->nb_fragments -= remove; in hds_flush()
489 memmove(os->fragments, os->fragments + remove, in hds_flush()
490 os->nb_fragments * sizeof(*os->fragments)); in hds_flush()
495 ret = write_abst(s, os, final); in hds_flush()
503 OutputStream *os = &c->streams[s->streams[pkt->stream_index]->id]; in hds_write_packet() local
504 int64_t end_dts = os->fragment_index * (int64_t)c->min_frag_duration; in hds_write_packet()
510 if ((!os->has_video || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) && in hds_write_packet()
513 pkt->flags & AV_PKT_FLAG_KEY && os->packets_written) { in hds_write_packet()
515 if ((ret = hds_flush(s, os, 0, pkt->dts)) < 0) in hds_write_packet()
521 if (!os->packets_written) in hds_write_packet()
522 os->frag_start_ts = pkt->dts; in hds_write_packet()
523 os->last_ts = pkt->dts; in hds_write_packet()
525 os->packets_written++; in hds_write_packet()
526 return ff_write_chained(os->ctx, pkt->stream_index - os->first_stream, pkt, s, 0); in hds_write_packet()