gstpbutilscodecutils

## gstpbutilscodecutils gstpbutilscodecutils — Miscellaneous codec-specific utility functions |

## Synopsis

    #include <gst/pbutils/codec-utils.h>

    guint               gst_codec_utils_aac_get_sample_rate_from_index
                                                            (guint sr_idx);
    const gchar *       gst_codec_utils_aac_get_profile     (const guint8 *audio_config,
                                                             guint len);
    const gchar *       gst_codec_utils_aac_get_level       (const guint8 *audio_config,
                                                             guint len);
    gboolean            gst_codec_utils_aac_caps_set_level_and_profile
                                                            (GstCaps *caps,
                                                             const guint8 *audio_config,
                                                             guint len);

    const gchar *       gst_codec_utils_h264_get_profile    (const guint8 *sps,
                                                             guint len);
    const gchar *       gst_codec_utils_h264_get_level      (const guint8 *sps,
                                                             guint len);
    gboolean            gst_codec_utils_h264_caps_set_level_and_profile
                                                            (GstCaps *caps,
                                                             const guint8 *sps,
                                                             guint len);
    guint8              gst_codec_utils_h264_get_level_idc  (const gchar *level);

    const gchar *       gst_codec_utils_mpeg4video_get_profile
                                                            (const guint8 *vis_obj_seq,
                                                             guint len);
    const gchar *       gst_codec_utils_mpeg4video_get_level
                                                            (const guint8 *vis_obj_seq,
                                                             guint len);
    gboolean            gst_codec_utils_mpeg4video_caps_set_level_and_profile
                                                            (GstCaps *caps,
                                                             const guint8 *vis_obj_seq,
                                                             guint len);

## Description

Provides codec-specific ulility functions such as functions to provide the codec profile and level in human-readable string form from header data.

## Details

### gst_codec_utils_aac_get_sample_rate_from_index ()

    guint               gst_codec_utils_aac_get_sample_rate_from_index
                                                            (guint sr_idx);

Translates the sample rate index found in AAC headers to the actual sample rate.

`sr_idx` : | Sample rate index as from the AudioSpecificConfig (MPEG-4 container) or ADTS frame header
Returns : | The sample rate if `sr_idx` is valid, 0 otherwise.

### gst_codec_utils_aac_get_profile ()

    const gchar *       gst_codec_utils_aac_get_profile     (const guint8 *audio_config,
                                                             guint len);

Returns the profile of the given AAC stream as a string. The profile is determined using the AudioObjectType field which is in the first 5 bits of `audio_config`.

### Note

HE-AAC support has not yet been implemented.

`audio_config` : | a pointer to the AudioSpecificConfig as specified in the Elementary Stream Descriptor (esds) in ISO/IEC 14496-1 (see `gst_codec_utils_aac_get_level()` for a more details).
`len` : | Length of `audio_config` in bytes
Returns : | The profile as a const string and `NULL` if the profile could not be determined.

### gst_codec_utils_aac_get_level ()

    const gchar *       gst_codec_utils_aac_get_level       (const guint8 *audio_config,
                                                             guint len);

Determines the level of a stream as defined in ISO/IEC 14496-3. For AAC LC streams, the constraints from the AAC audio profile are applied. For AAC Main, LTP, SSR and others, the Main profile is used.

The `audio_config` parameter follows the following format, starting from the most significant bit of the first byte:

- Bit 0:4 contains the AudioObjectType

- Bit 5:8 contains the sample frequency index (if this is 0xf, then the next 24 bits define the actual sample frequency, and subsequent fields are appropriately shifted).

- Bit 9:12 contains the channel configuration

### Note

HE-AAC support has not yet been implemented.

`audio_config` : | a pointer to the AudioSpecificConfig as specified in the Elementary Stream Descriptor (esds) in ISO/IEC 14496-1.
`len` : | Length of `audio_config` in bytes
Returns : | The level as a const string and `NULL` if the level could not be determined.

### gst_codec_utils_aac_caps_set_level_and_profile ()

    gboolean            gst_codec_utils_aac_caps_set_level_and_profile
                                                            (GstCaps *caps,
                                                             const guint8 *audio_config,
                                                             guint len);

Sets the level and profile on `caps` if it can be determined from `audio_config`. See `gst_codec_utils_aac_get_level()` and `gst_codec_utils_aac_get_profile()` for more details on the parameters. `caps` must be audio/mpeg caps with an "mpegversion" field of either 2 or 4. If mpegversion is 4, the "base-profile" field is also set in `caps`.

`caps` : | the GstCaps to which level and profile fields are to be added
`audio_config` : | a pointer to the AudioSpecificConfig as specified in the Elementary Stream Descriptor (esds) in ISO/IEC 14496-1 (see below for a more details).
`len` : | Length of `audio_config` in bytes
Returns : | `TRUE` if the level and profile could be set, `FALSE` otherwise.

### gst_codec_utils_h264_get_profile ()

    const gchar *       gst_codec_utils_h264_get_profile    (const guint8 *sps,
                                                             guint len);

Converts the profile indication (profile_idc) in the stream's sequence parameter set into a string. The SPS is expected to have the following format, as defined in the H.264 specification. The SPS is viewed as a bitstream here, with bit 0 being the most significant bit of the first byte.

- Bit 0:7 - Profile indication

- Bit 8 - constraint_set0_flag

- Bit 9 - constraint_set1_flag

- Bit 10 - constraint_set2_flag

- Bit 11 - constraint_set3_flag

- Bit 12 - constraint_set3_flag

- Bit 13:15 - Reserved

- Bit 16:24 - Level indication

`sps` : | Pointer to the sequence parameter set for the stream.
`len` : | Length of the data available in `sps`.
Returns : | The profile as a const string, or `NULL` if there is an error.

### gst_codec_utils_h264_get_level ()

    const gchar *       gst_codec_utils_h264_get_level      (const guint8 *sps,
                                                             guint len);

Converts the level indication (level_idc) in the stream's sequence parameter set into a string. The SPS is expected to have the same format as for `gst_codec_utils_h264_get_profile()`.

`sps` : | Pointer to the sequence parameter set for the stream.
`len` : | Length of the data available in `sps`.
Returns : | The level as a const string, or `NULL` if there is an error.

### gst_codec_utils_h264_caps_set_level_and_profile ()

    gboolean            gst_codec_utils_h264_caps_set_level_and_profile
                                                            (GstCaps *caps,
                                                             const guint8 *sps,
                                                             guint len);

Sets the level and profile in `caps` if it can be determined from `sps`. See `gst_codec_utils_h264_get_level()` and `gst_codec_utils_h264_get_profile()` for more details on the parameters.

`caps` : | the GstCaps to which the level and profile are to be added
`sps` : | Pointer to the sequence parameter set for the stream.
`len` : | Length of the data available in `sps`.
Returns : | `TRUE` if the level and profile could be set, `FALSE` otherwise.

### gst_codec_utils_h264_get_level_idc ()

    guint8              gst_codec_utils_h264_get_level_idc  (const gchar *level);

Transform a level string from the caps into the level_idc

`level` : | A level string from caps
Returns : | the level_idc or 0 if the level is unknown

### gst_codec_utils_mpeg4video_get_profile ()

    const gchar *       gst_codec_utils_mpeg4video_get_profile
                                                            (const guint8 *vis_obj_seq,
                                                             guint len);

Converts the profile indication in the stream's visual object sequence into a string. `vis_obj_seq` is expected to be the data following the visual object sequence start code. Only the first byte (profile_and_level_indication) is used.

`vis_obj_seq` : | Pointer to the visual object sequence for the stream.
`len` : | Length of the data available in `sps`.
Returns : | The profile as a const string, or NULL if there is an error.

### gst_codec_utils_mpeg4video_get_level ()

    const gchar *       gst_codec_utils_mpeg4video_get_level
                                                            (const guint8 *vis_obj_seq,
                                                             guint len);

Converts the level indication in the stream's visual object sequence into a string. `vis_obj_seq` is expected to be the data following the visual object sequence start code. Only the first byte (profile_and_level_indication) is used.

`vis_obj_seq` : | Pointer to the visual object sequence for the stream.
`len` : | Length of the data available in `sps`.
Returns : | The level as a const string, or NULL if there is an error.

### gst_codec_utils_mpeg4video_caps_set_level_and_profile ()

    gboolean            gst_codec_utils_mpeg4video_caps_set_level_and_profile
                                                            (GstCaps *caps,
                                                             const guint8 *vis_obj_seq,
                                                             guint len);

Sets the level and profile in `caps` if it can be determined from `vis_obj_seq`. See `gst_codec_utils_mpeg4video_get_level()` and `gst_codec_utils_mpeg4video_get_profile()` for more details on the parameters.

`caps` : | the GstCaps to which the level and profile are to be added
`vis_obj_seq` : | Pointer to the visual object sequence for the stream.
`len` : | Length of the data available in `sps`.
Returns : | `TRUE` if the level and profile could be set, `FALSE` otherwise.