summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorStefano Sabatini <stefasab@gmail.com>2012-08-15 23:21:41 +0200
committerStefano Sabatini <stefasab@gmail.com>2012-08-18 11:21:47 +0200
commit769500c2a35817ef32a60e8d37721d387d94d384 (patch)
treeb9eb37c5bb06300624573e786aa8e66cd58f15ff /libavformat
parentd3a2a614bf51129731aab7e12ea2a13ed1729b0c (diff)
lavf/segment: create segment_list_open and close functions
Allow factorization for the incoming patches, and avoid code/logic duplication.
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/segment.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/libavformat/segment.c b/libavformat/segment.c
index 001620225b..ba5718d29f 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -109,6 +109,19 @@ fail:
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)
{
SegmentContext *seg = s->priv_data;
@@ -124,9 +137,8 @@ static int segment_end(AVFormatContext *s)
if (seg->list) {
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;
}
@@ -244,8 +256,7 @@ static int seg_write_header(AVFormatContext *s)
return AVERROR(ENOMEM);
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;
for (i = 0; i< s->nb_streams; i++)
@@ -299,7 +310,7 @@ fail:
avformat_free_context(oc);
}
if (seg->list)
- avio_close(seg->list_pb);
+ segment_list_close(s);
}
return ret;
}
@@ -356,7 +367,7 @@ static int seg_write_trailer(struct AVFormatContext *s)
AVFormatContext *oc = seg->avf;
int ret = segment_end(s);
if (seg->list)
- avio_close(seg->list_pb);
+ segment_list_close(s);
av_opt_free(seg);
av_freep(&seg->times);