Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * RTP muxer definitions
  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. #ifndef AVFORMAT_RTPENC_H
  22. #define AVFORMAT_RTPENC_H
  23.  
  24. #include "avformat.h"
  25. #include "rtp.h"
  26.  
  27. struct RTPMuxContext {
  28.     const AVClass *av_class;
  29.     AVFormatContext *ic;
  30.     AVStream *st;
  31.     int payload_type;
  32.     uint32_t ssrc;
  33.     const char *cname;
  34.     int seq;
  35.     uint32_t timestamp;
  36.     uint32_t base_timestamp;
  37.     uint32_t cur_timestamp;
  38.     int max_payload_size;
  39.     int num_frames;
  40.  
  41.     /* rtcp sender statistics */
  42.     int64_t last_rtcp_ntp_time;
  43.     int64_t first_rtcp_ntp_time;
  44.     unsigned int packet_count;
  45.     unsigned int octet_count;
  46.     unsigned int last_octet_count;
  47.     int first_packet;
  48.     /* buffer for output */
  49.     uint8_t *buf;
  50.     uint8_t *buf_ptr;
  51.  
  52.     int max_frames_per_packet;
  53.  
  54.     /**
  55.      * Number of bytes used for H.264 NAL length, if the MP4 syntax is used
  56.      * (1, 2 or 4)
  57.      */
  58.     int nal_length_size;
  59.  
  60.     int flags;
  61.  
  62.     unsigned int frame_count;
  63. };
  64.  
  65. typedef struct RTPMuxContext RTPMuxContext;
  66.  
  67. #define FF_RTP_FLAG_MP4A_LATM 1
  68. #define FF_RTP_FLAG_RFC2190   2
  69. #define FF_RTP_FLAG_SKIP_RTCP 4
  70. #define FF_RTP_FLAG_H264_MODE0 8
  71.  
  72. #define FF_RTP_FLAG_OPTS(ctx, fieldname) \
  73.     { "rtpflags", "RTP muxer flags", offsetof(ctx, fieldname), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "rtpflags" }, \
  74.     { "latm", "Use MP4A-LATM packetization instead of MPEG4-GENERIC for AAC", 0, AV_OPT_TYPE_CONST, {.i64 = FF_RTP_FLAG_MP4A_LATM}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "rtpflags" }, \
  75.     { "rfc2190", "Use RFC 2190 packetization instead of RFC 4629 for H.263", 0, AV_OPT_TYPE_CONST, {.i64 = FF_RTP_FLAG_RFC2190}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "rtpflags" }, \
  76.     { "skip_rtcp", "Don't send RTCP sender reports", 0, AV_OPT_TYPE_CONST, {.i64 = FF_RTP_FLAG_SKIP_RTCP}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "rtpflags" }, \
  77.     { "h264_mode0", "Use mode 0 for H264 in RTP", 0, AV_OPT_TYPE_CONST, {.i64 = FF_RTP_FLAG_H264_MODE0}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "rtpflags" } \
  78.  
  79. void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m);
  80.  
  81. void ff_rtp_send_h264(AVFormatContext *s1, const uint8_t *buf1, int size);
  82. void ff_rtp_send_h263(AVFormatContext *s1, const uint8_t *buf1, int size);
  83. void ff_rtp_send_h263_rfc2190(AVFormatContext *s1, const uint8_t *buf1, int size,
  84.                               const uint8_t *mb_info, int mb_info_size);
  85. void ff_rtp_send_aac(AVFormatContext *s1, const uint8_t *buff, int size);
  86. void ff_rtp_send_latm(AVFormatContext *s1, const uint8_t *buff, int size);
  87. void ff_rtp_send_amr(AVFormatContext *s1, const uint8_t *buff, int size);
  88. void ff_rtp_send_mpegvideo(AVFormatContext *s1, const uint8_t *buf1, int size);
  89. void ff_rtp_send_xiph(AVFormatContext *s1, const uint8_t *buff, int size);
  90. void ff_rtp_send_vp8(AVFormatContext *s1, const uint8_t *buff, int size);
  91. void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buff, int size);
  92.  
  93. const uint8_t *ff_h263_find_resync_marker_reverse(const uint8_t *av_restrict start,
  94.                                                   const uint8_t *av_restrict end);
  95.  
  96. #endif /* AVFORMAT_RTPENC_H */
  97.