AVFormatContext *ctx;
int ctx_inited;
uint8_t iobuf[32768];
- URLContext *out;
+ AVIOContext *out;
int packets_written;
char initfile[1024];
int64_t init_start_pos;
{
OutputStream *os = opaque;
if (os->out)
- ffurl_write(os->out, buf, buf_size);
+ avio_write(os->out, buf, buf_size);
return buf_size;
}
// RFC 6381
-static void set_codec_str(AVFormatContext *s, AVCodecContext *codec,
+static void set_codec_str(AVFormatContext *s, AVCodecParameters *par,
char *str, int size)
{
const AVCodecTag *tags[2] = { NULL, NULL };
uint32_t tag;
- if (codec->codec_type == AVMEDIA_TYPE_VIDEO)
+ if (par->codec_type == AVMEDIA_TYPE_VIDEO)
tags[0] = ff_codec_movvideo_tags;
- else if (codec->codec_type == AVMEDIA_TYPE_AUDIO)
+ else if (par->codec_type == AVMEDIA_TYPE_AUDIO)
tags[0] = ff_codec_movaudio_tags;
else
return;
- tag = av_codec_get_tag(tags, codec->codec_id);
+ tag = av_codec_get_tag(tags, par->codec_id);
if (!tag)
return;
if (size < 5)
if (!strcmp(str, "mp4a") || !strcmp(str, "mp4v")) {
uint32_t oti;
tags[0] = ff_mp4_obj_type;
- oti = av_codec_get_tag(tags, codec->codec_id);
+ oti = av_codec_get_tag(tags, par->codec_id);
if (oti)
av_strlcatf(str, size, ".%02x", oti);
else
return;
if (tag == MKTAG('m', 'p', '4', 'a')) {
- if (codec->extradata_size >= 2) {
- int aot = codec->extradata[0] >> 3;
+ if (par->extradata_size >= 2) {
+ int aot = par->extradata[0] >> 3;
if (aot == 31)
- aot = ((AV_RB16(codec->extradata) >> 5) & 0x3f) + 32;
+ aot = ((AV_RB16(par->extradata) >> 5) & 0x3f) + 32;
av_strlcatf(str, size, ".%d", aot);
}
} else if (tag == MKTAG('m', 'p', '4', 'v')) {
}
} else if (!strcmp(str, "avc1")) {
uint8_t *tmpbuf = NULL;
- uint8_t *extradata = codec->extradata;
- int extradata_size = codec->extradata_size;
+ uint8_t *extradata = par->extradata;
+ int extradata_size = par->extradata_size;
if (!extradata_size)
return;
if (extradata[0] != 1) {
av_write_trailer(os->ctx);
if (os->ctx && os->ctx->pb)
av_free(os->ctx->pb);
- ffurl_close(os->out);
- os->out = NULL;
+ ff_format_io_close(s, &os->out);
if (os->ctx)
avformat_free_context(os->ctx);
for (j = 0; j < os->nb_segments; j++)
for (i = 0; i < s->nb_streams; i++) {
AVStream *st = s->streams[i];
OutputStream *os = &c->streams[i];
- if (st->codec->codec_type != AVMEDIA_TYPE_VIDEO)
+ if (st->codecpar->codec_type != AVMEDIA_TYPE_VIDEO)
continue;
- avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"video/mp4\" codecs=\"%s\"%s width=\"%d\" height=\"%d\">\n", i, os->codec_str, os->bandwidth_str, st->codec->width, st->codec->height);
+ avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"video/mp4\" codecs=\"%s\"%s width=\"%d\" height=\"%d\">\n", i, os->codec_str, os->bandwidth_str, st->codecpar->width, st->codecpar->height);
output_segment_list(&c->streams[i], out, c);
avio_printf(out, "\t\t\t</Representation>\n");
}
for (i = 0; i < s->nb_streams; i++) {
AVStream *st = s->streams[i];
OutputStream *os = &c->streams[i];
- if (st->codec->codec_type != AVMEDIA_TYPE_AUDIO)
+ if (st->codecpar->codec_type != AVMEDIA_TYPE_AUDIO)
continue;
- avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"audio/mp4\" codecs=\"%s\"%s audioSamplingRate=\"%d\">\n", i, os->codec_str, os->bandwidth_str, st->codec->sample_rate);
- avio_printf(out, "\t\t\t\t<AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"%d\" />\n", st->codec->channels);
+ avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"audio/mp4\" codecs=\"%s\"%s audioSamplingRate=\"%d\">\n", i, os->codec_str, os->bandwidth_str, st->codecpar->sample_rate);
+ avio_printf(out, "\t\t\t\t<AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"%d\" />\n", st->codecpar->channels);
output_segment_list(&c->streams[i], out, c);
avio_printf(out, "\t\t\t</Representation>\n");
}
AVDictionary *opts = NULL;
char filename[1024];
- os->bit_rate = s->streams[i]->codec->bit_rate;
+ os->bit_rate = s->streams[i]->codecpar->bit_rate;
if (os->bit_rate) {
snprintf(os->bandwidth_str, sizeof(os->bandwidth_str),
" bandwidth=\"%d\"", os->bit_rate);
ret = AVERROR(ENOMEM);
goto fail;
}
- avcodec_copy_context(st->codec, s->streams[i]->codec);
+ avcodec_parameters_copy(st->codecpar, s->streams[i]->codecpar);
st->sample_aspect_ratio = s->streams[i]->sample_aspect_ratio;
st->time_base = s->streams[i]->time_base;
ctx->avoid_negative_ts = s->avoid_negative_ts;
dash_fill_tmpl_params(os->initfile, sizeof(os->initfile), c->init_seg_name, i, 0, os->bit_rate, 0);
}
snprintf(filename, sizeof(filename), "%s%s", c->dirname, os->initfile);
- ret = ffurl_open(&os->out, filename, AVIO_FLAG_WRITE, &s->interrupt_callback, NULL);
+ ret = s->io_open(s, &os->out, filename, AVIO_FLAG_WRITE, NULL);
if (ret < 0)
goto fail;
os->init_start_pos = 0;
// already before being handed to this muxer, so we don't have mismatches
// between the MPD and the actual segments.
s->avoid_negative_ts = ctx->avoid_negative_ts;
- if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
+ if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
c->has_video = 1;
- else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
+ else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO)
c->has_audio = 1;
- set_codec_str(s, st->codec, os->codec_str, sizeof(os->codec_str));
+ set_codec_str(s, st->codecpar, os->codec_str, sizeof(os->codec_str));
os->first_pts = AV_NOPTS_VALUE;
os->max_pts = AV_NOPTS_VALUE;
os->last_dts = AV_NOPTS_VALUE;
int64_t pos, int *index_length)
{
uint8_t buf[8];
- URLContext *fd;
+ AVIOContext *pb;
int ret;
- ret = ffurl_open(&fd, full_path, AVIO_FLAG_READ, &s->interrupt_callback, NULL);
+ ret = s->io_open(s, &pb, full_path, AVIO_FLAG_READ, NULL);
if (ret < 0)
return;
- if (ffurl_seek(fd, pos, SEEK_SET) != pos) {
- ffurl_close(fd);
+ if (avio_seek(pb, pos, SEEK_SET) != pos) {
+ ff_format_io_close(s, &pb);
return;
}
- ret = ffurl_read(fd, buf, 8);
- ffurl_close(fd);
+ ret = avio_read(pb, buf, 8);
+ ff_format_io_close(s, &pb);
if (ret < 8)
return;
if (AV_RL32(&buf[4]) != MKTAG('s', 'i', 'd', 'x'))
}
static int update_stream_extradata(AVFormatContext *s, OutputStream *os,
- AVCodecContext *codec)
+ AVCodecParameters *par)
{
uint8_t *extradata;
- if (os->ctx->streams[0]->codec->extradata_size || !codec->extradata_size)
+ if (os->ctx->streams[0]->codecpar->extradata_size || !par->extradata_size)
return 0;
- extradata = av_malloc(codec->extradata_size);
+ extradata = av_malloc(par->extradata_size);
if (!extradata)
return AVERROR(ENOMEM);
- memcpy(extradata, codec->extradata, codec->extradata_size);
+ memcpy(extradata, par->extradata, par->extradata_size);
- os->ctx->streams[0]->codec->extradata = extradata;
- os->ctx->streams[0]->codec->extradata_size = codec->extradata_size;
+ os->ctx->streams[0]->codecpar->extradata = extradata;
+ os->ctx->streams[0]->codecpar->extradata_size = par->extradata_size;
- set_codec_str(s, codec, os->codec_str, sizeof(os->codec_str));
+ set_codec_str(s, par, os->codec_str, sizeof(os->codec_str));
return 0;
}
// Flush all audio streams as well, in sync with video keyframes,
// but not the other video streams.
if (stream >= 0 && i != stream) {
- if (s->streams[i]->codec->codec_type != AVMEDIA_TYPE_AUDIO)
+ if (s->streams[i]->codecpar->codec_type != AVMEDIA_TYPE_AUDIO)
continue;
// Make sure we don't flush audio streams multiple times, when
// all video streams are flushed one at a time.
if (!os->init_range_length) {
av_write_frame(os->ctx, NULL);
os->init_range_length = avio_tell(os->ctx->pb);
- if (!c->single_file) {
- ffurl_close(os->out);
- os->out = NULL;
- }
+ if (!c->single_file)
+ ff_format_io_close(s, &os->out);
}
start_pos = avio_tell(os->ctx->pb);
dash_fill_tmpl_params(filename, sizeof(filename), c->media_seg_name, i, os->segment_index, os->bit_rate, os->start_pts);
snprintf(full_path, sizeof(full_path), "%s%s", c->dirname, filename);
snprintf(temp_path, sizeof(temp_path), "%s.tmp", full_path);
- ret = ffurl_open(&os->out, temp_path, AVIO_FLAG_WRITE, &s->interrupt_callback, NULL);
+ ret = s->io_open(s, &os->out, temp_path, AVIO_FLAG_WRITE, NULL);
if (ret < 0)
break;
write_styp(os->ctx->pb);
if (c->single_file) {
find_index_range(s, full_path, start_pos, &index_length);
} else {
- ffurl_close(os->out);
- os->out = NULL;
+ ff_format_io_close(s, &os->out);
ret = ff_rename(temp_path, full_path);
if (ret < 0)
break;
int64_t seg_end_duration = (os->segment_index) * (int64_t) c->min_seg_duration;
int ret;
- ret = update_stream_extradata(s, os, st->codec);
+ ret = update_stream_extradata(s, os, st->codecpar);
if (ret < 0)
return ret;
if (os->first_pts == AV_NOPTS_VALUE)
os->first_pts = pkt->pts;
- if ((!c->has_video || st->codec->codec_type == AVMEDIA_TYPE_VIDEO) &&
+ if ((!c->has_video || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) &&
pkt->flags & AV_PKT_FLAG_KEY && os->packets_written &&
av_compare_ts(pkt->pts - os->first_pts, st->time_base,
seg_end_duration, AV_TIME_BASE_Q) >= 0) {