Exemple #1
0
int h264_init(Track *track)
{
    char *sprop = NULL;

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

    sdp_descr_append_rtpmap(track);
    g_string_append_printf(track->sdp_description,
                           "a=fmtp:%u %s\r\n",

                           /* fmtp */
                           track->payload_type,
                           sprop);

    g_free(sprop);

    return 0;

 err_alloc:
    return -1;
}
Exemple #2
0
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;
}