Statistics
| Branch: | Revision:

ffmpeg / libavformat / rtpenc_chain.c @ 403ee835

History | View | Annotate | Download (2.25 KB)

1
/*
2
 * RTP muxer chaining code
3
 * Copyright (c) 2010 Martin Storsjo
4
 *
5
 * This file is part of Libav.
6
 *
7
 * Libav is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * Libav is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with Libav; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21

    
22
#include "avformat.h"
23
#include "rtpenc_chain.h"
24
#include "avio_internal.h"
25

    
26
AVFormatContext *ff_rtp_chain_mux_open(AVFormatContext *s, AVStream *st,
27
                                       URLContext *handle, int packet_size)
28
{
29
    AVFormatContext *rtpctx;
30
    int ret;
31
    AVOutputFormat *rtp_format = av_guess_format("rtp", NULL, NULL);
32

    
33
    if (!rtp_format)
34
        return NULL;
35

    
36
    /* Allocate an AVFormatContext for each output stream */
37
    rtpctx = avformat_alloc_context();
38
    if (!rtpctx)
39
        return NULL;
40

    
41
    rtpctx->oformat = rtp_format;
42
    if (!av_new_stream(rtpctx, 0)) {
43
        av_free(rtpctx);
44
        return NULL;
45
    }
46
    /* Copy the max delay setting; the rtp muxer reads this. */
47
    rtpctx->max_delay = s->max_delay;
48
    /* Copy other stream parameters. */
49
    rtpctx->streams[0]->sample_aspect_ratio = st->sample_aspect_ratio;
50

    
51
    /* Set the synchronized start time. */
52
    rtpctx->start_time_realtime = s->start_time_realtime;
53

    
54
    avcodec_copy_context(rtpctx->streams[0]->codec, st->codec);
55

    
56
    if (handle) {
57
        url_fdopen(&rtpctx->pb, handle);
58
    } else
59
        ffio_open_dyn_packet_buf(&rtpctx->pb, packet_size);
60
    ret = av_write_header(rtpctx);
61

    
62
    if (ret) {
63
        if (handle) {
64
            avio_close(rtpctx->pb);
65
        } else {
66
            uint8_t *ptr;
67
            avio_close_dyn_buf(rtpctx->pb, &ptr);
68
            av_free(ptr);
69
        }
70
        avformat_free_context(rtpctx);
71
        return NULL;
72
    }
73

    
74
    return rtpctx;
75
}
76