dashenc: eliminate ffurl_* usage

Now all IO should go through the IO callbacks and be interceptable by
the caller.
This commit is contained in:
Anton Khirnov 2016-02-15 13:46:38 +01:00
parent 7fbb3b5b98
commit d082078a88
1 changed files with 14 additions and 18 deletions

View File

@ -61,7 +61,7 @@ typedef struct OutputStream {
AVFormatContext *ctx; AVFormatContext *ctx;
int ctx_inited; int ctx_inited;
uint8_t iobuf[32768]; uint8_t iobuf[32768];
URLContext *out; AVIOContext *out;
int packets_written; int packets_written;
char initfile[1024]; char initfile[1024];
int64_t init_start_pos; int64_t init_start_pos;
@ -100,7 +100,7 @@ static int dash_write(void *opaque, uint8_t *buf, int buf_size)
{ {
OutputStream *os = opaque; OutputStream *os = opaque;
if (os->out) if (os->out)
ffurl_write(os->out, buf, buf_size); avio_write(os->out, buf, buf_size);
return buf_size; return buf_size;
} }
@ -182,8 +182,7 @@ static void dash_free(AVFormatContext *s)
av_write_trailer(os->ctx); av_write_trailer(os->ctx);
if (os->ctx && os->ctx->pb) if (os->ctx && os->ctx->pb)
av_free(os->ctx->pb); av_free(os->ctx->pb);
ffurl_close(os->out); ff_format_io_close(s, &os->out);
os->out = NULL;
if (os->ctx) if (os->ctx)
avformat_free_context(os->ctx); avformat_free_context(os->ctx);
for (j = 0; j < os->nb_segments; j++) for (j = 0; j < os->nb_segments; j++)
@ -632,7 +631,7 @@ static int dash_write_header(AVFormatContext *s)
dash_fill_tmpl_params(os->initfile, sizeof(os->initfile), c->init_seg_name, i, 0, os->bit_rate, 0); 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); 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) if (ret < 0)
goto fail; goto fail;
os->init_start_pos = 0; os->init_start_pos = 0;
@ -726,18 +725,18 @@ static void find_index_range(AVFormatContext *s, const char *full_path,
int64_t pos, int *index_length) int64_t pos, int *index_length)
{ {
uint8_t buf[8]; uint8_t buf[8];
URLContext *fd; AVIOContext *pb;
int ret; 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) if (ret < 0)
return; return;
if (ffurl_seek(fd, pos, SEEK_SET) != pos) { if (avio_seek(pb, pos, SEEK_SET) != pos) {
ffurl_close(fd); ff_format_io_close(s, &pb);
return; return;
} }
ret = ffurl_read(fd, buf, 8); ret = avio_read(pb, buf, 8);
ffurl_close(fd); ff_format_io_close(s, &pb);
if (ret < 8) if (ret < 8)
return; return;
if (AV_RL32(&buf[4]) != MKTAG('s', 'i', 'd', 'x')) if (AV_RL32(&buf[4]) != MKTAG('s', 'i', 'd', 'x'))
@ -800,10 +799,8 @@ static int dash_flush(AVFormatContext *s, int final, int stream)
if (!os->init_range_length) { if (!os->init_range_length) {
av_write_frame(os->ctx, NULL); av_write_frame(os->ctx, NULL);
os->init_range_length = avio_tell(os->ctx->pb); os->init_range_length = avio_tell(os->ctx->pb);
if (!c->single_file) { if (!c->single_file)
ffurl_close(os->out); ff_format_io_close(s, &os->out);
os->out = NULL;
}
} }
start_pos = avio_tell(os->ctx->pb); start_pos = avio_tell(os->ctx->pb);
@ -812,7 +809,7 @@ static int dash_flush(AVFormatContext *s, int final, int stream)
dash_fill_tmpl_params(filename, sizeof(filename), c->media_seg_name, i, os->segment_index, os->bit_rate, os->start_pts); 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(full_path, sizeof(full_path), "%s%s", c->dirname, filename);
snprintf(temp_path, sizeof(temp_path), "%s.tmp", full_path); 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) if (ret < 0)
break; break;
write_styp(os->ctx->pb); write_styp(os->ctx->pb);
@ -828,8 +825,7 @@ static int dash_flush(AVFormatContext *s, int final, int stream)
if (c->single_file) { if (c->single_file) {
find_index_range(s, full_path, start_pos, &index_length); find_index_range(s, full_path, start_pos, &index_length);
} else { } else {
ffurl_close(os->out); ff_format_io_close(s, &os->out);
os->out = NULL;
ret = ff_rename(temp_path, full_path); ret = ff_rename(temp_path, full_path);
if (ret < 0) if (ret < 0)
break; break;