Ticket #611: 0001-libavformat-add-support-for-G726-audio-decoder-in-RT.patch

File 0001-libavformat-add-support-for-G726-audio-decoder-in-RT.patch, 5.1 KB (added by Miroslav Slugeň, 15 years ago)

Signed patch

  • libavformat/Makefile

    From 5d61bfba320bca3037a692c9c45f4d8ab6cd12a9 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Miroslav=20Sluge=C5=88?= <thunder.m@seznam.cz>
    Date: Mon, 7 Nov 2011 11:38:08 +0100
    Subject: [PATCH] libavformat: add support for G726 audio decoder in RTP and RTSP streams, fixes Ticket611
    
    ---
     libavformat/Makefile         |    1 +
     libavformat/rtpdec.c         |    5 +++
     libavformat/rtpdec_formats.h |    4 ++
     libavformat/rtpdec_g726.c    |   75 ++++++++++++++++++++++++++++++++++++++++++
     4 files changed, 85 insertions(+), 0 deletions(-)
     create mode 100644 libavformat/rtpdec_g726.c
    
    diff --git a/libavformat/Makefile b/libavformat/Makefile
    index 264ab92..420143d 100644
    a b OBJS-$(CONFIG_RTPDEC) += rdt.o \  
    261261                                            rtpdec.o      \
    262262                                            rtpdec_amr.o  \
    263263                                            rtpdec_asf.o  \
     264                                            rtpdec_g726.o \
    264265                                            rtpdec_h263.o \
    265266                                            rtpdec_h264.o \
    266267                                            rtpdec_latm.o \
  • libavformat/rtpdec.c

    diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c
    index 01902a7..20e5bd7 100644
    a b void av_register_rtp_dynamic_payload_handlers(void)  
    8383    ff_register_dynamic_payload_handler(&ff_qt_rtp_vid_handler);
    8484    ff_register_dynamic_payload_handler(&ff_quicktime_rtp_aud_handler);
    8585    ff_register_dynamic_payload_handler(&ff_quicktime_rtp_vid_handler);
     86
     87    ff_register_dynamic_payload_handler(&ff_g726_16_dynamic_handler);
     88    ff_register_dynamic_payload_handler(&ff_g726_24_dynamic_handler);
     89    ff_register_dynamic_payload_handler(&ff_g726_32_dynamic_handler);
     90    ff_register_dynamic_payload_handler(&ff_g726_40_dynamic_handler);
    8691}
    8792
    8893RTPDynamicProtocolHandler *ff_rtp_handler_find_by_name(const char *name,
  • libavformat/rtpdec_formats.h

    diff --git a/libavformat/rtpdec_formats.h b/libavformat/rtpdec_formats.h
    index 16f5a9d..afd047b 100644
    a b int ff_wms_parse_sdp_a_line(AVFormatContext *s, const char *p);  
    3333
    3434extern RTPDynamicProtocolHandler ff_amr_nb_dynamic_handler;
    3535extern RTPDynamicProtocolHandler ff_amr_wb_dynamic_handler;
     36extern RTPDynamicProtocolHandler ff_g726_16_dynamic_handler;
     37extern RTPDynamicProtocolHandler ff_g726_24_dynamic_handler;
     38extern RTPDynamicProtocolHandler ff_g726_32_dynamic_handler;
     39extern RTPDynamicProtocolHandler ff_g726_40_dynamic_handler;
    3640extern RTPDynamicProtocolHandler ff_h263_1998_dynamic_handler;
    3741extern RTPDynamicProtocolHandler ff_h263_2000_dynamic_handler;
    3842extern RTPDynamicProtocolHandler ff_h264_dynamic_handler;
  • new file libavformat/rtpdec_g726.c

    diff --git a/libavformat/rtpdec_g726.c b/libavformat/rtpdec_g726.c
    new file mode 100644
    index 0000000..c966d30
    - +  
     1
     2#include "avformat.h"
     3#include "rtpdec_formats.h"
     4
     5static int g726_16_parse_sdp_line(AVFormatContext *s, int st_index,
     6                              PayloadContext *data, const char *line)
     7{
     8    AVStream *stream = s->streams[st_index];
     9    AVCodecContext *codec = stream->codec;
     10
     11    codec->bit_rate = 16000;
     12
     13    return 0;
     14}
     15
     16static int g726_24_parse_sdp_line(AVFormatContext *s, int st_index,
     17                              PayloadContext *data, const char *line)
     18{
     19    AVStream *stream = s->streams[st_index];
     20    AVCodecContext *codec = stream->codec;
     21
     22    codec->bit_rate = 24000;
     23
     24    return 0;
     25}
     26
     27static int g726_32_parse_sdp_line(AVFormatContext *s, int st_index,
     28                              PayloadContext *data, const char *line)
     29{
     30    AVStream *stream = s->streams[st_index];
     31    AVCodecContext *codec = stream->codec;
     32
     33    codec->bit_rate = 32000;
     34
     35    return 0;
     36}
     37
     38static int g726_40_parse_sdp_line(AVFormatContext *s, int st_index,
     39                              PayloadContext *data, const char *line)
     40{
     41    AVStream *stream = s->streams[st_index];
     42    AVCodecContext *codec = stream->codec;
     43
     44    codec->bit_rate = 40000;
     45
     46    return 0;
     47}
     48
     49RTPDynamicProtocolHandler ff_g726_16_dynamic_handler = {
     50    .enc_name         = "G726-16",
     51    .codec_type       = AVMEDIA_TYPE_AUDIO,
     52    .codec_id         = CODEC_ID_ADPCM_G726,
     53    .parse_sdp_a_line = g726_16_parse_sdp_line,
     54};
     55
     56RTPDynamicProtocolHandler ff_g726_24_dynamic_handler = {
     57    .enc_name         = "G726-24",
     58    .codec_type       = AVMEDIA_TYPE_AUDIO,
     59    .codec_id         = CODEC_ID_ADPCM_G726,
     60    .parse_sdp_a_line = g726_24_parse_sdp_line,
     61};
     62
     63RTPDynamicProtocolHandler ff_g726_32_dynamic_handler = {
     64    .enc_name         = "G726-32",
     65    .codec_type       = AVMEDIA_TYPE_AUDIO,
     66    .codec_id         = CODEC_ID_ADPCM_G726,
     67    .parse_sdp_a_line = g726_32_parse_sdp_line,
     68};
     69
     70RTPDynamicProtocolHandler ff_g726_40_dynamic_handler = {
     71    .enc_name         = "G726-40",
     72    .codec_type       = AVMEDIA_TYPE_AUDIO,
     73    .codec_id         = CODEC_ID_ADPCM_G726,
     74    .parse_sdp_a_line = g726_40_parse_sdp_line,
     75};