diff options
| author | Tim Redfern <tim@eclectronics.org> | 2013-12-29 12:19:38 +0000 |
|---|---|---|
| committer | Tim Redfern <tim@eclectronics.org> | 2013-12-29 12:19:38 +0000 |
| commit | f7813a5324be39d13ab536c245d15dfc602a7849 (patch) | |
| tree | fad99148b88823d34a5df2f0a25881a002eb291b /ffmpeg/libavformat/smoothstreamingenc.c | |
| parent | b7a5a477b8ff4d4e3028b9dfb9a9df0a41463f92 (diff) | |
basic type mechanism working
Diffstat (limited to 'ffmpeg/libavformat/smoothstreamingenc.c')
| -rw-r--r-- | ffmpeg/libavformat/smoothstreamingenc.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/ffmpeg/libavformat/smoothstreamingenc.c b/ffmpeg/libavformat/smoothstreamingenc.c index 096bf79..fe18a95 100644 --- a/ffmpeg/libavformat/smoothstreamingenc.c +++ b/ffmpeg/libavformat/smoothstreamingenc.c @@ -210,14 +210,15 @@ static int write_manifest(AVFormatContext *s, int final) { SmoothStreamingContext *c = s->priv_data; AVIOContext *out; - char filename[1024]; + char filename[1024], temp_filename[1024]; int ret, i, video_chunks = 0, audio_chunks = 0, video_streams = 0, audio_streams = 0; int64_t duration = 0; snprintf(filename, sizeof(filename), "%s/Manifest", s->filename); - ret = avio_open2(&out, filename, AVIO_FLAG_WRITE, &s->interrupt_callback, NULL); + snprintf(temp_filename, sizeof(temp_filename), "%s/Manifest.tmp", s->filename); + ret = avio_open2(&out, temp_filename, AVIO_FLAG_WRITE, &s->interrupt_callback, NULL); if (ret < 0) { - av_log(s, AV_LOG_ERROR, "Unable to open %s for writing\n", filename); + av_log(s, AV_LOG_ERROR, "Unable to open %s for writing\n", temp_filename); return ret; } avio_printf(out, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); @@ -278,6 +279,7 @@ static int write_manifest(AVFormatContext *s, int final) avio_printf(out, "</SmoothStreamingMedia>\n"); avio_flush(out); avio_close(out); + rename(temp_filename, filename); return 0; } @@ -428,7 +430,7 @@ static int parse_fragment(AVFormatContext *s, const char *filename, int64_t *sta if (len < 8 || len >= *moof_size) goto fail; if (tag == MKTAG('u','u','i','d')) { - const uint8_t tfxd[] = { + static const uint8_t tfxd[] = { 0x6d, 0x1d, 0x9b, 0x05, 0x42, 0xd5, 0x44, 0xe6, 0x80, 0xe2, 0x14, 0x1d, 0xaf, 0xf7, 0x57, 0xb2 }; @@ -451,12 +453,16 @@ fail: static int add_fragment(OutputStream *os, const char *file, const char *infofile, int64_t start_time, int64_t duration, int64_t start_pos, int64_t size) { + int err; Fragment *frag; if (os->nb_fragments >= os->fragments_size) { os->fragments_size = (os->fragments_size + 1) * 2; - os->fragments = av_realloc(os->fragments, sizeof(*os->fragments)*os->fragments_size); - if (!os->fragments) - return AVERROR(ENOMEM); + if ((err = av_reallocp(&os->fragments, sizeof(*os->fragments) * + os->fragments_size)) < 0) { + os->fragments_size = 0; + os->nb_fragments = 0; + return err; + } } frag = av_mallocz(sizeof(*frag)); if (!frag) |
