Currently, audio service type is a field in AVCodecContext. However, side data is more appropriate for this kind of information.tags/n2.6
| @@ -13,6 +13,10 @@ libavutil: 2014-08-09 | |||||
| API changes, most recent first: | API changes, most recent first: | ||||
| 2014-11-xx - xxxxxxx - lavc 56.12.0, lavu 54.8.0 - avcodec.h, frame.h | |||||
| Add AV_PKT_DATA_AUDIO_SERVICE_TYPE and AV_FRAME_DATA_AUDIO_SERVICE_TYPE for | |||||
| storing the audio service type as side data. | |||||
| 201x-xx-xx - xxxxxxx - lavc 56.10.0 - vdpau.h | 201x-xx-xx - xxxxxxx - lavc 56.10.0 - vdpau.h | ||||
| Add av_vdpau_get_surface_parameters(). | Add av_vdpau_get_surface_parameters(). | ||||
| @@ -917,6 +917,12 @@ enum AVPacketSideDataType { | |||||
| * Stereoscopic 3D information in form of the AVStereo3D struct. | * Stereoscopic 3D information in form of the AVStereo3D struct. | ||||
| */ | */ | ||||
| AV_PKT_DATA_STEREO3D, | AV_PKT_DATA_STEREO3D, | ||||
| /** | |||||
| * This side data should be associated with an audio stream and corresponds | |||||
| * to enum AVAudioServiceType. | |||||
| */ | |||||
| AV_PKT_DATA_AUDIO_SERVICE_TYPE, | |||||
| }; | }; | ||||
| typedef struct AVPacketSideData { | typedef struct AVPacketSideData { | ||||
| @@ -569,6 +569,7 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) | |||||
| { AV_PKT_DATA_REPLAYGAIN , AV_FRAME_DATA_REPLAYGAIN }, | { AV_PKT_DATA_REPLAYGAIN , AV_FRAME_DATA_REPLAYGAIN }, | ||||
| { AV_PKT_DATA_DISPLAYMATRIX, AV_FRAME_DATA_DISPLAYMATRIX }, | { AV_PKT_DATA_DISPLAYMATRIX, AV_FRAME_DATA_DISPLAYMATRIX }, | ||||
| { AV_PKT_DATA_STEREO3D, AV_FRAME_DATA_STEREO3D }, | { AV_PKT_DATA_STEREO3D, AV_FRAME_DATA_STEREO3D }, | ||||
| { AV_PKT_DATA_AUDIO_SERVICE_TYPE, AV_FRAME_DATA_AUDIO_SERVICE_TYPE }, | |||||
| }; | }; | ||||
| frame->color_primaries = avctx->color_primaries; | frame->color_primaries = avctx->color_primaries; | ||||
| @@ -29,7 +29,7 @@ | |||||
| #include "libavutil/version.h" | #include "libavutil/version.h" | ||||
| #define LIBAVCODEC_VERSION_MAJOR 56 | #define LIBAVCODEC_VERSION_MAJOR 56 | ||||
| #define LIBAVCODEC_VERSION_MINOR 11 | |||||
| #define LIBAVCODEC_VERSION_MINOR 12 | |||||
| #define LIBAVCODEC_VERSION_MICRO 0 | #define LIBAVCODEC_VERSION_MICRO 0 | ||||
| #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||
| @@ -157,6 +157,30 @@ static void dump_replaygain(AVFilterContext *ctx, AVFrameSideData *sd) | |||||
| print_peak(ctx, "album peak", rg->album_peak); | print_peak(ctx, "album peak", rg->album_peak); | ||||
| } | } | ||||
| static void dump_audio_service_type(AVFilterContext *ctx, AVFrameSideData *sd) | |||||
| { | |||||
| enum AVAudioServiceType *ast; | |||||
| av_log(ctx, AV_LOG_INFO, "audio service type: "); | |||||
| if (sd->size < sizeof(*ast)) { | |||||
| av_log(ctx, AV_LOG_INFO, "invalid data"); | |||||
| return; | |||||
| } | |||||
| ast = (enum AVAudioServiceType*)sd->data; | |||||
| switch (*ast) { | |||||
| case AV_AUDIO_SERVICE_TYPE_MAIN: av_log(ctx, AV_LOG_INFO, "Main Audio Service"); break; | |||||
| case AV_AUDIO_SERVICE_TYPE_EFFECTS: av_log(ctx, AV_LOG_INFO, "Effects"); break; | |||||
| case AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED: av_log(ctx, AV_LOG_INFO, "Visually Impaired"); break; | |||||
| case AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED: av_log(ctx, AV_LOG_INFO, "Hearing Impaired"); break; | |||||
| case AV_AUDIO_SERVICE_TYPE_DIALOGUE: av_log(ctx, AV_LOG_INFO, "Dialogue"); break; | |||||
| case AV_AUDIO_SERVICE_TYPE_COMMENTARY: av_log(ctx, AV_LOG_INFO, "Commentary"); break; | |||||
| case AV_AUDIO_SERVICE_TYPE_EMERGENCY: av_log(ctx, AV_LOG_INFO, "Emergency"); break; | |||||
| case AV_AUDIO_SERVICE_TYPE_VOICE_OVER: av_log(ctx, AV_LOG_INFO, "Voice Over"); break; | |||||
| case AV_AUDIO_SERVICE_TYPE_KARAOKE: av_log(ctx, AV_LOG_INFO, "Karaoke"); break; | |||||
| default: av_log(ctx, AV_LOG_INFO, "unknown"); break; | |||||
| } | |||||
| } | |||||
| static void dump_unknown(AVFilterContext *ctx, AVFrameSideData *sd) | static void dump_unknown(AVFilterContext *ctx, AVFrameSideData *sd) | ||||
| { | { | ||||
| av_log(ctx, AV_LOG_INFO, "unknown side data type: %d, size %d bytes", sd->type, sd->size); | av_log(ctx, AV_LOG_INFO, "unknown side data type: %d, size %d bytes", sd->type, sd->size); | ||||
| @@ -208,6 +232,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf) | |||||
| case AV_FRAME_DATA_MATRIXENCODING: dump_matrixenc (ctx, sd); break; | case AV_FRAME_DATA_MATRIXENCODING: dump_matrixenc (ctx, sd); break; | ||||
| case AV_FRAME_DATA_DOWNMIX_INFO: dump_downmix (ctx, sd); break; | case AV_FRAME_DATA_DOWNMIX_INFO: dump_downmix (ctx, sd); break; | ||||
| case AV_FRAME_DATA_REPLAYGAIN: dump_replaygain(ctx, sd); break; | case AV_FRAME_DATA_REPLAYGAIN: dump_replaygain(ctx, sd); break; | ||||
| case AV_FRAME_DATA_AUDIO_SERVICE_TYPE: dump_audio_service_type(ctx, sd); break; | |||||
| default: dump_unknown (ctx, sd); break; | default: dump_unknown (ctx, sd); break; | ||||
| } | } | ||||
| @@ -87,6 +87,12 @@ enum AVFrameSideDataType { | |||||
| * in ETSI TS 101 154 using enum AVActiveFormatDescription. | * in ETSI TS 101 154 using enum AVActiveFormatDescription. | ||||
| */ | */ | ||||
| AV_FRAME_DATA_AFD, | AV_FRAME_DATA_AFD, | ||||
| /** | |||||
| * This side data must be associated with an audio frame and corresponds to | |||||
| * enum AVAudioServiceType defined in avcodec.h. | |||||
| */ | |||||
| AV_FRAME_DATA_AUDIO_SERVICE_TYPE, | |||||
| }; | }; | ||||
| enum AVActiveFormatDescription { | enum AVActiveFormatDescription { | ||||
| @@ -54,7 +54,7 @@ | |||||
| */ | */ | ||||
| #define LIBAVUTIL_VERSION_MAJOR 54 | #define LIBAVUTIL_VERSION_MAJOR 54 | ||||
| #define LIBAVUTIL_VERSION_MINOR 7 | |||||
| #define LIBAVUTIL_VERSION_MINOR 8 | |||||
| #define LIBAVUTIL_VERSION_MICRO 0 | #define LIBAVUTIL_VERSION_MICRO 0 | ||||
| #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||