예제 #1
0
static int amr_init(Track *track)
{
    char *config = NULL;
    char *sdp_value;

    /*get config content if has*/
    if(track->properties.extradata_len)
    {
        config = extradata2config(&track->properties);
        if (!config)
            return ERR_PARSE;

        sdp_value = g_strdup_printf("octet-align=1; config=%s", config);
        g_free(config);
    } else {
        sdp_value =  g_strdup_printf("octet-align=1");
    }

    track_add_sdp_field(track, fmtp, sdp_value);

    track->properties.clock_rate = 8000;
    track_add_sdp_field(track, rtpmap,
                        g_strdup_printf ("AMR/%d",
                                         track->properties.clock_rate));

    return ERR_NOERROR;
}
예제 #2
0
파일: h263.c 프로젝트: iskey/feng_build
static int h263_init(Track *track)
{
    track_add_sdp_field(track, rtpmap,
                        g_strdup_printf ("H263-1998/%d",
                                         track->properties.clock_rate));

    return ERR_NOERROR;
}
예제 #3
0
파일: h264.c 프로젝트: iskey/feng_build
static int h264_init(Track *track)
{
    h264_priv *priv;
    char *sprop = NULL;
    int err = ERR_ALLOC;

    if (track->properties.extradata_len == 0) {
        fnc_log(FNC_LOG_WARN, "[h264] No Extradata, unsupported\n");
        return ERR_UNSUPPORTED_PT;
    }

    priv = g_slice_new(h264_priv);

    if(track->properties.extradata[0] == 1) {
        if (track->properties.extradata_len < 7) goto err_alloc;
        priv->nal_length_size = (track->properties.extradata[4]&0x03)+1;
        priv->is_avc = 1;
        sprop = encode_avc1_header(track->properties.extradata,
                                   track->properties.extradata_len, FU_A);
        if (sprop == NULL) goto err_alloc;
    } else {
        sprop = encode_header(track->properties.extradata,
                              track->properties.extradata_len, FU_A);
        if (sprop == NULL) goto err_alloc;
    }

    track_add_sdp_field(track, fmtp, sprop);

    track_add_sdp_field(track, rtpmap,
                        g_strdup_printf ("H264/%d",track->properties.clock_rate));

    track->private_data = priv;

    return ERR_NOERROR;

 err_alloc:
    g_slice_free(h264_priv, priv);
    return err;
}
예제 #4
0
파일: nmpma.c 프로젝트: dulton/nampu
static int jma_init(Track *track)
{
	gchar *rtpmap_str, *sdp_rtpmap;
	struct codec_t *code;
	gint pt;
	code = (struct codec_t*)track->properties.extradata;
printf("jma_init()..\n");
	if (code->len3)
	{
		rtpmap_str = (gchar*)&code->data[0] + code->len1 + code->len2;
		sscanf(rtpmap_str, "%d", &pt);
		if (pt == PCMA_PT || pt == PCMU_PT)
			track->properties.payload_type = pt;
		rtpmap_str = strstr(rtpmap_str, " ");	/* skip pt */
		if (rtpmap_str)
		{
			++rtpmap_str;
			sdp_rtpmap = g_strdup(rtpmap_str);
		}
		else
			sdp_rtpmap = g_strdup("PCMX/8000/1");
		strcpy(track->properties.encoding_name, "PCMX");
		track_add_sdp_field(track, rtpmap, sdp_rtpmap);
	}
	else
	{
		strcpy(track->properties.encoding_name, "PCMA");
		sdp_rtpmap = g_strdup_printf("%s/%d/%d",
			track->properties.encoding_name,
			8000 /* sample_rate */, 
			1 /* audio channels */);
		track->properties.payload_type = PCMA_PT;
        track_add_sdp_field(track, rtpmap, sdp_rtpmap);
	}

	return 0;
}
예제 #5
0
static int simple_init(Track *track)
{
    char encodingParamsPart[21];
    memset(encodingParamsPart, 0, sizeof(encodingParamsPart));
    if(track->properties.media_type == MP_audio){
        if(track->properties.audio_channels > 1){
            sprintf(encodingParamsPart, "/%d", 
                    track->properties.audio_channels);
        }
    }
    
	track_add_sdp_field(track, rtpmap,
                        g_strdup_printf ("%s/%d%s",
                                         track->properties.encoding_name,
                                         track->properties.clock_rate, 
                                         encodingParamsPart));
    return ERR_NOERROR;
}