From dc3589a6be66f00730860f2b70a86a98183f885a Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 28 May 2017 14:09:00 +0200 Subject: Add support for RTP with GSM-HR payload according to ETSI TS 101 318 --- include/gapk/formats.h | 3 +++ src/Makefile.am | 4 +++- src/fmt_rtp_hr_etsi.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/formats.c | 2 ++ 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/fmt_rtp_hr_etsi.c diff --git a/include/gapk/formats.h b/include/gapk/formats.h index ef64797..d0f4568 100644 --- a/include/gapk/formats.h +++ b/include/gapk/formats.h @@ -54,6 +54,9 @@ enum format_type { FMT_RTP_EFR, + /* HR in RTP according to ETSI TS 101 318 */ + FMT_RTP_HR_ETSI, + _FMT_MAX, }; diff --git a/src/Makefile.am b/src/Makefile.am index c62e4e7..f45dcde 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -6,7 +6,9 @@ AM_LDFLAGS=$(LIBOSMOCODEC_LIBS) $(LIBOSMOCORE_LIBS) \ COM_SOURCES = procqueue.c pq_file.c pq_format.c pq_codec.c pq_rtp.c pq_alsa.c \ formats.c fmt_amr.c fmt_gsm.c fmt_hr_ref.c fmt_racal.c \ - fmt_amr_opencore.c fmt_rtp_amr.c fmt_rtp_efr.c fmt_rawpcm.c fmt_ti.c benchmark.c \ + fmt_amr_opencore.c \ + fmt_rtp_amr.c fmt_rtp_efr.c fmt_rtp_hr_etsi.c \ + fmt_rawpcm.c fmt_ti.c benchmark.c \ codecs.c codec_pcm.c codec_hr.c codec_fr.c codec_efr.c codec_amr.c bin_PROGRAMS = gapk diff --git a/src/fmt_rtp_hr_etsi.c b/src/fmt_rtp_hr_etsi.c new file mode 100644 index 0000000..fe6728a --- /dev/null +++ b/src/fmt_rtp_hr_etsi.c @@ -0,0 +1,60 @@ +/* HR RTP Payload according to ETSI TS 101 318. Incompatible with RFC5993! */ +/* (C) 2017 by Harald Welte */ + +/* + * This file is part of gapk (GSM Audio Pocket Knife). + * + * gapk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * gapk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with gapk. If not, see . + */ + +#include +#include +#include + +#include +#include +#include + +/* conversion function: RTP payload -> canonical format */ +static int +rtp_hr_etsi_from_canon(uint8_t *dst, const uint8_t *src, unsigned int src_len) +{ + /* according to TS 101 318 */ + assert(src_len == HR_CANON_LEN); + memcpy(dst, src, src_len); + + return src_len; +} + +/* conversion function: canonical format -> RTP payload */ +static int +rtp_hr_etsi_to_canon(uint8_t *dst, const uint8_t *src, unsigned int src_len) +{ + /* according to TS 101 318 */ + assert(src_len == HR_CANON_LEN); + memcpy(dst, src, src_len); + + return HR_CANON_LEN; +} + +const struct format_desc fmt_rtp_hr_etsi = { + .type = FMT_RTP_HR_ETSI, + .codec_type = CODEC_HR, + .name = "rtp-hr-etsi", + .description = "RTP payload for HR according to ETSI TS 101 318", + + .frame_len = HR_CANON_LEN, + .conv_from_canon = rtp_hr_etsi_from_canon, + .conv_to_canon = rtp_hr_etsi_to_canon, +}; diff --git a/src/formats.c b/src/formats.c index 6b2ee91..655a7be 100644 --- a/src/formats.c +++ b/src/formats.c @@ -37,6 +37,7 @@ extern const struct format_desc fmt_ti_efr; extern const struct format_desc fmt_amr_opencore; extern const struct format_desc fmt_rtp_amr; extern const struct format_desc fmt_rtp_efr; +extern const struct format_desc fmt_rtp_hr_etsi; static const struct format_desc *supported_formats[_FMT_MAX] = { [FMT_INVALID] = NULL, @@ -54,6 +55,7 @@ static const struct format_desc *supported_formats[_FMT_MAX] = { [FMT_AMR_OPENCORE] = &fmt_amr_opencore, [FMT_RTP_AMR] = &fmt_rtp_amr, [FMT_RTP_EFR] = &fmt_rtp_efr, + [FMT_RTP_HR_ETSI] = &fmt_rtp_hr_etsi, }; -- cgit v1.2.3