~ubuntu-branches/ubuntu/trusty/ffmpeg-debian/trusty

« back to all changes in this revision

Viewing changes to libavformat/rtp_internal.h

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler
  • Date: 2009-02-05 21:22:01 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20090205212201-hjhtybuxtm90cbjy
Tags: 3:0.svn20090204-2ubuntu1
* merge from debian. Remaining changes:
  - don't build depend on libfaad-dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * RTP definitions
3
 
 * Copyright (c) 2006 Ryan Martell <rdm4@martellventures.com>
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
 
 
22
 
// this is a bit of a misnomer, because rtp & rtsp internal structures and prototypes are in here.
23
 
#ifndef AVFORMAT_RTP_INTERNAL_H
24
 
#define AVFORMAT_RTP_INTERNAL_H
25
 
 
26
 
#include <stdint.h>
27
 
#include "libavcodec/avcodec.h"
28
 
#include "rtp.h"
29
 
 
30
 
// these statistics are used for rtcp receiver reports...
31
 
typedef struct {
32
 
    uint16_t max_seq;           ///< highest sequence number seen
33
 
    uint32_t cycles;            ///< shifted count of sequence number cycles
34
 
    uint32_t base_seq;          ///< base sequence number
35
 
    uint32_t bad_seq;           ///< last bad sequence number + 1
36
 
    int probation;              ///< sequence packets till source is valid
37
 
    int received;               ///< packets received
38
 
    int expected_prior;         ///< packets expected in last interval
39
 
    int received_prior;         ///< packets received in last interval
40
 
    uint32_t transit;           ///< relative transit time for previous packet
41
 
    uint32_t jitter;            ///< estimated jitter.
42
 
} RTPStatistics;
43
 
 
44
 
/**
45
 
 * Packet parsing for "private" payloads in the RTP specs.
46
 
 *
47
 
 * @param s stream context
48
 
 * @param st stream that this packet belongs to
49
 
 * @param pkt packet in which to write the parsed data
50
 
 * @param timestamp pointer in which to write the timestamp of this RTP packet
51
 
 * @param buf pointer to raw RTP packet data
52
 
 * @param len length of buf
53
 
 * @param flags flags from the RTP packet header (PKT_FLAG_*)
54
 
 */
55
 
typedef int (*DynamicPayloadPacketHandlerProc) (PayloadContext *s,
56
 
                                                AVStream *st,
57
 
                                                AVPacket * pkt,
58
 
                                                uint32_t *timestamp,
59
 
                                                const uint8_t * buf,
60
 
                                                int len, int flags);
61
 
 
62
 
struct RTPDynamicProtocolHandler_s {
63
 
    // fields from AVRtpDynamicPayloadType_s
64
 
    const char enc_name[50];    /* XXX: still why 50 ? ;-) */
65
 
    enum CodecType codec_type;
66
 
    enum CodecID codec_id;
67
 
 
68
 
    // may be null
69
 
    int (*parse_sdp_a_line) (AVFormatContext *s,
70
 
                             int st_index,
71
 
                             PayloadContext *priv_data,
72
 
                             const char *line); ///< Parse the a= line from the sdp field
73
 
    PayloadContext *(*open) (); ///< allocate any data needed by the rtp parsing for this dynamic data.
74
 
    void (*close)(PayloadContext *protocol_data); ///< free any data needed by the rtp parsing for this dynamic data.
75
 
    DynamicPayloadPacketHandlerProc parse_packet; ///< parse handler for this dynamic packet.
76
 
 
77
 
    struct RTPDynamicProtocolHandler_s *next;
78
 
};
79
 
 
80
 
// moved out of rtp.c, because the h264 decoder needs to know about this structure..
81
 
struct RTPDemuxContext {
82
 
    AVFormatContext *ic;
83
 
    AVStream *st;
84
 
    int payload_type;
85
 
    uint32_t ssrc;
86
 
    uint16_t seq;
87
 
    uint32_t timestamp;
88
 
    uint32_t base_timestamp;
89
 
    uint32_t cur_timestamp;
90
 
    int max_payload_size;
91
 
    struct MpegTSContext *ts;   /* only used for MP2T payloads */
92
 
    int read_buf_index;
93
 
    int read_buf_size;
94
 
    /* used to send back RTCP RR */
95
 
    URLContext *rtp_ctx;
96
 
    char hostname[256];
97
 
 
98
 
    RTPStatistics statistics; ///< Statistics for this stream (used by RTCP receiver reports)
99
 
 
100
 
    /* rtcp sender statistics receive */
101
 
    int64_t last_rtcp_ntp_time;    // TODO: move into statistics
102
 
    int64_t first_rtcp_ntp_time;   // TODO: move into statistics
103
 
    uint32_t last_rtcp_timestamp;  // TODO: move into statistics
104
 
 
105
 
    /* rtcp sender statistics */
106
 
    unsigned int packet_count;     // TODO: move into statistics (outgoing)
107
 
    unsigned int octet_count;      // TODO: move into statistics (outgoing)
108
 
    unsigned int last_octet_count; // TODO: move into statistics (outgoing)
109
 
    int first_packet;
110
 
    /* buffer for output */
111
 
    uint8_t buf[RTP_MAX_PACKET_LENGTH];
112
 
    uint8_t *buf_ptr;
113
 
 
114
 
    /* special infos for au headers parsing */
115
 
    RTPPayloadData *rtp_payload_data; // TODO: Move into dynamic payload handlers
116
 
 
117
 
    /* dynamic payload stuff */
118
 
    DynamicPayloadPacketHandlerProc parse_packet;     ///< This is also copied from the dynamic protocol handler structure
119
 
    PayloadContext *dynamic_protocol_context;        ///< This is a copy from the values setup from the sdp parsing, in rtsp.c don't free me.
120
 
    int max_frames_per_packet;
121
 
};
122
 
 
123
 
extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler;
124
 
void ff_register_dynamic_payload_handler(RTPDynamicProtocolHandler *handler);
125
 
 
126
 
int rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size); ///< from rtsp.c, but used by rtp dynamic protocol handlers.
127
 
 
128
 
void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m);
129
 
const char *ff_rtp_enc_name(int payload_type);
130
 
enum CodecID ff_rtp_codec_id(const char *buf, enum CodecType codec_type);
131
 
 
132
 
void av_register_rtp_dynamic_payload_handlers(void);
133
 
 
134
 
#endif /* AVFORMAT_RTP_INTERNAL_H */
135