Statistics
| Branch: | Revision:

ffmpeg / libavformat / rtp_mpv.c @ 98561024

History | View | Annotate | Download (2.13 KB)

1 98561024 Luca Abeni
/*
2
 * RTP packetization for MPEG video
3
 * Copyright (c) 2002 Fabrice Bellard.
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg 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
 * FFmpeg 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 FFmpeg; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21
#include "avformat.h"
22
#include "rtp_internal.h"
23
24
/* NOTE: a single frame must be passed with sequence header if
25
   needed. XXX: use slices. */
26
void ff_rtp_send_mpegvideo(AVFormatContext *s1, const uint8_t *buf1, int size)
27
{
28
    RTPDemuxContext *s = s1->priv_data;
29
    AVStream *st = s1->streams[0];
30
    int len, h, max_packet_size;
31
    uint8_t *q;
32
33
    max_packet_size = s->max_payload_size;
34
35
    while (size > 0) {
36
        /* XXX: more correct headers */
37
        h = 0;
38
        if (st->codec->sub_id == 2)
39
            h |= 1 << 26; /* mpeg 2 indicator */
40
        q = s->buf;
41
        *q++ = h >> 24;
42
        *q++ = h >> 16;
43
        *q++ = h >> 8;
44
        *q++ = h;
45
46
        if (st->codec->sub_id == 2) {
47
            h = 0;
48
            *q++ = h >> 24;
49
            *q++ = h >> 16;
50
            *q++ = h >> 8;
51
            *q++ = h;
52
        }
53
54
        len = max_packet_size - (q - s->buf);
55
        if (len > size)
56
            len = size;
57
58
        memcpy(q, buf1, len);
59
        q += len;
60
61
        /* 90 KHz time stamp */
62
        s->timestamp = s->base_timestamp +
63
            av_rescale((int64_t)s->cur_timestamp * st->codec->time_base.num, 90000, st->codec->time_base.den); //FIXME pass timestamps
64
        ff_rtp_send_data(s1, s->buf, q - s->buf, (len == size));
65
66
        buf1 += len;
67
        size -= len;
68
    }
69
    s->cur_timestamp++;
70
}
71