mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-23 04:24:35 +02:00
lavf/dashenc: add deinit function
This commit is contained in:
parent
e83d5d7e58
commit
c972a28fc3
@ -580,16 +580,12 @@ static int dash_write_header(AVFormatContext *s)
|
|||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
|
|
||||||
oformat = av_guess_format("mp4", NULL, NULL);
|
oformat = av_guess_format("mp4", NULL, NULL);
|
||||||
if (!oformat) {
|
if (!oformat)
|
||||||
ret = AVERROR_MUXER_NOT_FOUND;
|
return AVERROR_MUXER_NOT_FOUND;
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
c->streams = av_mallocz(sizeof(*c->streams) * s->nb_streams);
|
c->streams = av_mallocz(sizeof(*c->streams) * s->nb_streams);
|
||||||
if (!c->streams) {
|
if (!c->streams)
|
||||||
ret = AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < s->nb_streams; i++) {
|
for (i = 0; i < s->nb_streams; i++) {
|
||||||
OutputStream *os = &c->streams[i];
|
OutputStream *os = &c->streams[i];
|
||||||
@ -606,17 +602,13 @@ static int dash_write_header(AVFormatContext *s)
|
|||||||
int level = s->strict_std_compliance >= FF_COMPLIANCE_STRICT ?
|
int level = s->strict_std_compliance >= FF_COMPLIANCE_STRICT ?
|
||||||
AV_LOG_ERROR : AV_LOG_WARNING;
|
AV_LOG_ERROR : AV_LOG_WARNING;
|
||||||
av_log(s, level, "No bit rate set for stream %d\n", i);
|
av_log(s, level, "No bit rate set for stream %d\n", i);
|
||||||
if (s->strict_std_compliance >= FF_COMPLIANCE_STRICT) {
|
if (s->strict_std_compliance >= FF_COMPLIANCE_STRICT)
|
||||||
ret = AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx = avformat_alloc_context();
|
ctx = avformat_alloc_context();
|
||||||
if (!ctx) {
|
if (!ctx)
|
||||||
ret = AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
os->ctx = ctx;
|
os->ctx = ctx;
|
||||||
ctx->oformat = oformat;
|
ctx->oformat = oformat;
|
||||||
ctx->interrupt_callback = s->interrupt_callback;
|
ctx->interrupt_callback = s->interrupt_callback;
|
||||||
@ -624,10 +616,8 @@ static int dash_write_header(AVFormatContext *s)
|
|||||||
ctx->io_close = s->io_close;
|
ctx->io_close = s->io_close;
|
||||||
ctx->io_open = s->io_open;
|
ctx->io_open = s->io_open;
|
||||||
|
|
||||||
if (!(st = avformat_new_stream(ctx, NULL))) {
|
if (!(st = avformat_new_stream(ctx, NULL)))
|
||||||
ret = AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
avcodec_parameters_copy(st->codecpar, s->streams[i]->codecpar);
|
avcodec_parameters_copy(st->codecpar, s->streams[i]->codecpar);
|
||||||
st->sample_aspect_ratio = s->streams[i]->sample_aspect_ratio;
|
st->sample_aspect_ratio = s->streams[i]->sample_aspect_ratio;
|
||||||
st->time_base = s->streams[i]->time_base;
|
st->time_base = s->streams[i]->time_base;
|
||||||
@ -635,10 +625,8 @@ static int dash_write_header(AVFormatContext *s)
|
|||||||
ctx->flags = s->flags;
|
ctx->flags = s->flags;
|
||||||
|
|
||||||
ctx->pb = avio_alloc_context(os->iobuf, sizeof(os->iobuf), AVIO_FLAG_WRITE, os, NULL, dash_write, NULL);
|
ctx->pb = avio_alloc_context(os->iobuf, sizeof(os->iobuf), AVIO_FLAG_WRITE, os, NULL, dash_write, NULL);
|
||||||
if (!ctx->pb) {
|
if (!ctx->pb)
|
||||||
ret = AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (c->single_file) {
|
if (c->single_file) {
|
||||||
if (c->single_file_name)
|
if (c->single_file_name)
|
||||||
@ -651,13 +639,12 @@ static int dash_write_header(AVFormatContext *s)
|
|||||||
snprintf(filename, sizeof(filename), "%s%s", c->dirname, os->initfile);
|
snprintf(filename, sizeof(filename), "%s%s", c->dirname, os->initfile);
|
||||||
ret = s->io_open(s, &os->out, filename, AVIO_FLAG_WRITE, NULL);
|
ret = s->io_open(s, &os->out, filename, AVIO_FLAG_WRITE, NULL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto fail;
|
return ret;
|
||||||
os->init_start_pos = 0;
|
os->init_start_pos = 0;
|
||||||
|
|
||||||
av_dict_set(&opts, "movflags", "frag_custom+dash+delay_moov", 0);
|
av_dict_set(&opts, "movflags", "frag_custom+dash+delay_moov", 0);
|
||||||
if ((ret = avformat_write_header(ctx, &opts)) < 0) {
|
if ((ret = avformat_write_header(ctx, &opts)) < 0)
|
||||||
goto fail;
|
return ret;
|
||||||
}
|
|
||||||
os->ctx_inited = 1;
|
os->ctx_inited = 1;
|
||||||
avio_flush(ctx->pb);
|
avio_flush(ctx->pb);
|
||||||
av_dict_free(&opts);
|
av_dict_free(&opts);
|
||||||
@ -693,15 +680,11 @@ static int dash_write_header(AVFormatContext *s)
|
|||||||
|
|
||||||
if (!c->has_video && c->min_seg_duration <= 0) {
|
if (!c->has_video && c->min_seg_duration <= 0) {
|
||||||
av_log(s, AV_LOG_WARNING, "no video stream and no min seg duration set\n");
|
av_log(s, AV_LOG_WARNING, "no video stream and no min seg duration set\n");
|
||||||
ret = AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
ret = write_manifest(s, 0);
|
ret = write_manifest(s, 0);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
av_log(s, AV_LOG_VERBOSE, "Manifest written to: %s\n", s->filename);
|
av_log(s, AV_LOG_VERBOSE, "Manifest written to: %s\n", s->filename);
|
||||||
|
|
||||||
fail:
|
|
||||||
if (ret)
|
|
||||||
dash_free(s);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -992,7 +975,6 @@ static int dash_write_trailer(AVFormatContext *s)
|
|||||||
unlink(s->filename);
|
unlink(s->filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
dash_free(s);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1029,6 +1011,7 @@ AVOutputFormat ff_dash_muxer = {
|
|||||||
.write_header = dash_write_header,
|
.write_header = dash_write_header,
|
||||||
.write_packet = dash_write_packet,
|
.write_packet = dash_write_packet,
|
||||||
.write_trailer = dash_write_trailer,
|
.write_trailer = dash_write_trailer,
|
||||||
|
.deinit = dash_free,
|
||||||
.codec_tag = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 },
|
.codec_tag = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 },
|
||||||
.priv_class = &dash_class,
|
.priv_class = &dash_class,
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user