LOG_DEBUG("%s is prepended", GST_ELEMENT_NAME(x_element)); \
} while (0)
-typedef enum {
- CODEC_TYPE_OPUS,
- CODEC_TYPE_VORBIS,
- CODEC_TYPE_VP8,
- CODEC_TYPE_VP9,
- CODEC_TYPE_THEORA,
- CODEC_TYPE_H264,
- CODEC_TYPE_H265,
- CODEC_TYPE_JPEG,
- CODEC_TYPE_NOT_SUPPORTED,
-} codec_type_e;
-
-typedef struct {
- const char *encoding_name;
- const int clock_rate;
-} payload_type_s;
-
typedef struct {
media_packet_h packet;
GstBuffer *buffer;
[WEBRTC_TRANSCEIVER_DIRECTION_SENDRECV] = { "SENDRECV", GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDRECV }
};
-static payload_type_s payload_types[] = {
- /* AUDIO */
- [CODEC_TYPE_OPUS] = { "OPUS", 48000 },
- [CODEC_TYPE_VORBIS] = { "VORBIS", -1 }, /* NOTE: -1 for various clock rate */
- /* VIDEO */
- [CODEC_TYPE_VP8] = { "VP8", 90000 },
- [CODEC_TYPE_VP9] = { "VP9", 90000 },
- [CODEC_TYPE_THEORA] = { "THEORA", 90000 },
- [CODEC_TYPE_H264] = { "H264", 90000 },
- [CODEC_TYPE_H265] = { "H265", 90000 },
- [CODEC_TYPE_JPEG] = { "JPEG", 90000 },
-};
-
static const char * __get_audio_media_type(const char *codec_name)
{
RET_VAL_IF(codec_name == NULL, NULL, "codec_name is NULL");
return NULL;
}
-static codec_type_e __get_audio_codec_type(const gchar *media_type)
-{
- if (!g_strcmp0(media_type, MEDIA_TYPE_AUDIO_OPUS))
- return CODEC_TYPE_OPUS;
- else if (!g_strcmp0(media_type, MEDIA_TYPE_AUDIO_VORBIS))
- return CODEC_TYPE_VORBIS;
-
- return CODEC_TYPE_NOT_SUPPORTED;
-}
-
-static codec_type_e __get_video_codec_type(const gchar *media_type)
-{
- if (!g_strcmp0(media_type, MEDIA_TYPE_VIDEO_VP8))
- return CODEC_TYPE_VP8;
- else if (!g_strcmp0(media_type, MEDIA_TYPE_VIDEO_VP9))
- return CODEC_TYPE_VP9;
- else if (!g_strcmp0(media_type, MEDIA_TYPE_VIDEO_THEORA))
- return CODEC_TYPE_THEORA;
- else if (!g_strcmp0(media_type, MEDIA_TYPE_VIDEO_H264))
- return CODEC_TYPE_H264;
- else if (!g_strcmp0(media_type, MEDIA_TYPE_VIDEO_H265))
- return CODEC_TYPE_H265;
- else if (!g_strcmp0(media_type, MEDIA_TYPE_VIDEO_JPEG))
- return CODEC_TYPE_JPEG;
-
- return CODEC_TYPE_NOT_SUPPORTED;
-}
-
static const char *__get_format_name(media_format_mimetype_e mime_type, bool zerocopy_enabled)
{
switch (mime_type) {
{
GstCaps *caps;
bool is_video;
- codec_type_e codec_type;
RET_VAL_IF(media_type == NULL, NULL, "media_type is NULL");
is_video = (g_strrstr(media_type, "video") || g_strrstr(media_type, "image")) ? TRUE : FALSE;
- codec_type = is_video ? __get_video_codec_type(media_type) : __get_audio_codec_type(media_type);
-
- RET_VAL_IF(codec_type == CODEC_TYPE_NOT_SUPPORTED, NULL, "media_type[%s] is not supported", media_type);
caps = gst_caps_new_simple("application/x-rtp",
"media", G_TYPE_STRING, is_video ? "video" : "audio",
- "clock-rate", G_TYPE_INT, payload_types[codec_type].clock_rate, /* FIXME: support various clock-rate */
- "encoding-name", G_TYPE_STRING, payload_types[codec_type].encoding_name,
"payload", G_TYPE_INT, id + 95, NULL);
PRINT_CAPS(caps, "RTP");