Browse Source

lavf/segment: create segment_list_open and close functions

Allow factorization for the incoming patches, and avoid code/logic
duplication.
tags/n1.0
Stefano Sabatini 13 years ago
parent
commit
769500c2a3
1 changed files with 18 additions and 7 deletions
  1. +18
    -7
      libavformat/segment.c

+ 18
- 7
libavformat/segment.c View File

@@ -109,6 +109,19 @@ fail:
return err; return err;
} }


static int segment_list_open(AVFormatContext *s)
{
SegmentContext *seg = s->priv_data;
return avio_open2(&seg->list_pb, seg->list, AVIO_FLAG_WRITE,
&s->interrupt_callback, NULL);
}

static void segment_list_close(AVFormatContext *s)
{
SegmentContext *seg = s->priv_data;
avio_close(seg->list_pb);
}

static int segment_end(AVFormatContext *s) static int segment_end(AVFormatContext *s)
{ {
SegmentContext *seg = s->priv_data; SegmentContext *seg = s->priv_data;
@@ -124,9 +137,8 @@ static int segment_end(AVFormatContext *s)


if (seg->list) { if (seg->list) {
if (seg->list_size && !(seg->segment_count % seg->list_size)) { if (seg->list_size && !(seg->segment_count % seg->list_size)) {
avio_close(seg->list_pb);
if ((ret = avio_open2(&seg->list_pb, seg->list, AVIO_FLAG_WRITE,
&s->interrupt_callback, NULL)) < 0)
segment_list_close(s);
if ((ret = segment_list_open(s)) < 0)
goto end; goto end;
} }


@@ -244,8 +256,7 @@ static int seg_write_header(AVFormatContext *s)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);


if (seg->list) if (seg->list)
if ((ret = avio_open2(&seg->list_pb, seg->list, AVIO_FLAG_WRITE,
&s->interrupt_callback, NULL)) < 0)
if ((ret = segment_list_open(s)) < 0)
goto fail; goto fail;


for (i = 0; i< s->nb_streams; i++) for (i = 0; i< s->nb_streams; i++)
@@ -299,7 +310,7 @@ fail:
avformat_free_context(oc); avformat_free_context(oc);
} }
if (seg->list) if (seg->list)
avio_close(seg->list_pb);
segment_list_close(s);
} }
return ret; return ret;
} }
@@ -356,7 +367,7 @@ static int seg_write_trailer(struct AVFormatContext *s)
AVFormatContext *oc = seg->avf; AVFormatContext *oc = seg->avf;
int ret = segment_end(s); int ret = segment_end(s);
if (seg->list) if (seg->list)
avio_close(seg->list_pb);
segment_list_close(s);


av_opt_free(seg); av_opt_free(seg);
av_freep(&seg->times); av_freep(&seg->times);


Loading…
Cancel
Save