Use the new libavcore audio channel API.
This also allows to remove a linking dependency of libavfilter on libavcodec. Originally committed as revision 25789 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
d6e602536c
commit
63e8d9760f
3
ffmpeg.c
3
ffmpeg.c
@ -36,6 +36,7 @@
|
|||||||
#include "libswscale/swscale.h"
|
#include "libswscale/swscale.h"
|
||||||
#include "libavcodec/opt.h"
|
#include "libavcodec/opt.h"
|
||||||
#include "libavcodec/audioconvert.h"
|
#include "libavcodec/audioconvert.h"
|
||||||
|
#include "libavcore/audioconvert.h"
|
||||||
#include "libavcore/parseutils.h"
|
#include "libavcore/parseutils.h"
|
||||||
#include "libavcore/samplefmt.h"
|
#include "libavcore/samplefmt.h"
|
||||||
#include "libavutil/colorspace.h"
|
#include "libavutil/colorspace.h"
|
||||||
@ -3541,7 +3542,7 @@ static void new_audio_stream(AVFormatContext *oc, int file_idx)
|
|||||||
audio_enc->sample_fmt = audio_sample_fmt;
|
audio_enc->sample_fmt = audio_sample_fmt;
|
||||||
audio_enc->sample_rate = audio_sample_rate;
|
audio_enc->sample_rate = audio_sample_rate;
|
||||||
audio_enc->channel_layout = channel_layout;
|
audio_enc->channel_layout = channel_layout;
|
||||||
if (avcodec_channel_layout_num_channels(channel_layout) != audio_channels)
|
if (av_get_channel_layout_nb_channels(channel_layout) != audio_channels)
|
||||||
audio_enc->channel_layout = 0;
|
audio_enc->channel_layout = 0;
|
||||||
choose_sample_fmt(st, codec);
|
choose_sample_fmt(st, codec);
|
||||||
choose_sample_rate(st, codec);
|
choose_sample_rate(st, codec);
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#ifndef AVCODEC_AACDECTAB_H
|
#ifndef AVCODEC_AACDECTAB_H
|
||||||
#define AVCODEC_AACDECTAB_H
|
#define AVCODEC_AACDECTAB_H
|
||||||
|
|
||||||
|
#include "libavcore/audioconvert.h"
|
||||||
#include "aac.h"
|
#include "aac.h"
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@ -82,13 +83,13 @@ static const uint8_t aac_channel_layout_map[7][5][2] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const int64_t aac_channel_layout[8] = {
|
static const int64_t aac_channel_layout[8] = {
|
||||||
CH_LAYOUT_MONO,
|
AV_CH_LAYOUT_MONO,
|
||||||
CH_LAYOUT_STEREO,
|
AV_CH_LAYOUT_STEREO,
|
||||||
CH_LAYOUT_SURROUND,
|
AV_CH_LAYOUT_SURROUND,
|
||||||
CH_LAYOUT_4POINT0,
|
AV_CH_LAYOUT_4POINT0,
|
||||||
CH_LAYOUT_5POINT0_BACK,
|
AV_CH_LAYOUT_5POINT0_BACK,
|
||||||
CH_LAYOUT_5POINT1_BACK,
|
AV_CH_LAYOUT_5POINT1_BACK,
|
||||||
CH_LAYOUT_7POINT1_WIDE,
|
AV_CH_LAYOUT_7POINT1_WIDE,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
//#define DEBUG
|
//#define DEBUG
|
||||||
//#define DEBUG_BITALLOC
|
//#define DEBUG_BITALLOC
|
||||||
|
#include "libavcore/audioconvert.h"
|
||||||
#include "libavutil/crc.h"
|
#include "libavutil/crc.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "libavutil/common.h" /* for av_reverse */
|
#include "libavutil/common.h" /* for av_reverse */
|
||||||
@ -620,26 +621,26 @@ static av_cold int set_channel_info(AC3EncodeContext *s, int channels,
|
|||||||
ch_layout = *channel_layout;
|
ch_layout = *channel_layout;
|
||||||
if (!ch_layout)
|
if (!ch_layout)
|
||||||
ch_layout = avcodec_guess_channel_layout(channels, CODEC_ID_AC3, NULL);
|
ch_layout = avcodec_guess_channel_layout(channels, CODEC_ID_AC3, NULL);
|
||||||
if (avcodec_channel_layout_num_channels(ch_layout) != channels)
|
if (av_get_channel_layout_nb_channels(ch_layout) != channels)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
s->lfe = !!(ch_layout & CH_LOW_FREQUENCY);
|
s->lfe = !!(ch_layout & AV_CH_LOW_FREQUENCY);
|
||||||
s->nb_all_channels = channels;
|
s->nb_all_channels = channels;
|
||||||
s->nb_channels = channels - s->lfe;
|
s->nb_channels = channels - s->lfe;
|
||||||
s->lfe_channel = s->lfe ? s->nb_channels : -1;
|
s->lfe_channel = s->lfe ? s->nb_channels : -1;
|
||||||
if (s->lfe)
|
if (s->lfe)
|
||||||
ch_layout -= CH_LOW_FREQUENCY;
|
ch_layout -= AV_CH_LOW_FREQUENCY;
|
||||||
|
|
||||||
switch (ch_layout) {
|
switch (ch_layout) {
|
||||||
case CH_LAYOUT_MONO: s->channel_mode = AC3_CHMODE_MONO; break;
|
case AV_CH_LAYOUT_MONO: s->channel_mode = AC3_CHMODE_MONO; break;
|
||||||
case CH_LAYOUT_STEREO: s->channel_mode = AC3_CHMODE_STEREO; break;
|
case AV_CH_LAYOUT_STEREO: s->channel_mode = AC3_CHMODE_STEREO; break;
|
||||||
case CH_LAYOUT_SURROUND: s->channel_mode = AC3_CHMODE_3F; break;
|
case AV_CH_LAYOUT_SURROUND: s->channel_mode = AC3_CHMODE_3F; break;
|
||||||
case CH_LAYOUT_2_1: s->channel_mode = AC3_CHMODE_2F1R; break;
|
case AV_CH_LAYOUT_2_1: s->channel_mode = AC3_CHMODE_2F1R; break;
|
||||||
case CH_LAYOUT_4POINT0: s->channel_mode = AC3_CHMODE_3F1R; break;
|
case AV_CH_LAYOUT_4POINT0: s->channel_mode = AC3_CHMODE_3F1R; break;
|
||||||
case CH_LAYOUT_QUAD:
|
case AV_CH_LAYOUT_QUAD:
|
||||||
case CH_LAYOUT_2_2: s->channel_mode = AC3_CHMODE_2F2R; break;
|
case AV_CH_LAYOUT_2_2: s->channel_mode = AC3_CHMODE_2F2R; break;
|
||||||
case CH_LAYOUT_5POINT0:
|
case AV_CH_LAYOUT_5POINT0:
|
||||||
case CH_LAYOUT_5POINT0_BACK: s->channel_mode = AC3_CHMODE_3F2R; break;
|
case AV_CH_LAYOUT_5POINT0_BACK: s->channel_mode = AC3_CHMODE_3F2R; break;
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -647,7 +648,7 @@ static av_cold int set_channel_info(AC3EncodeContext *s, int channels,
|
|||||||
s->channel_map = ff_ac3_enc_channel_map[s->channel_mode][s->lfe];
|
s->channel_map = ff_ac3_enc_channel_map[s->channel_mode][s->lfe];
|
||||||
*channel_layout = ch_layout;
|
*channel_layout = ch_layout;
|
||||||
if (s->lfe)
|
if (s->lfe)
|
||||||
*channel_layout |= CH_LOW_FREQUENCY;
|
*channel_layout |= AV_CH_LOW_FREQUENCY;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1403,23 +1404,23 @@ AVCodec ac3_encoder = {
|
|||||||
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
|
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
|
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
|
||||||
.channel_layouts = (const int64_t[]){
|
.channel_layouts = (const int64_t[]){
|
||||||
CH_LAYOUT_MONO,
|
AV_CH_LAYOUT_MONO,
|
||||||
CH_LAYOUT_STEREO,
|
AV_CH_LAYOUT_STEREO,
|
||||||
CH_LAYOUT_2_1,
|
AV_CH_LAYOUT_2_1,
|
||||||
CH_LAYOUT_SURROUND,
|
AV_CH_LAYOUT_SURROUND,
|
||||||
CH_LAYOUT_2_2,
|
AV_CH_LAYOUT_2_2,
|
||||||
CH_LAYOUT_QUAD,
|
AV_CH_LAYOUT_QUAD,
|
||||||
CH_LAYOUT_4POINT0,
|
AV_CH_LAYOUT_4POINT0,
|
||||||
CH_LAYOUT_5POINT0,
|
AV_CH_LAYOUT_5POINT0,
|
||||||
CH_LAYOUT_5POINT0_BACK,
|
AV_CH_LAYOUT_5POINT0_BACK,
|
||||||
(CH_LAYOUT_MONO | CH_LOW_FREQUENCY),
|
(AV_CH_LAYOUT_MONO | AV_CH_LOW_FREQUENCY),
|
||||||
(CH_LAYOUT_STEREO | CH_LOW_FREQUENCY),
|
(AV_CH_LAYOUT_STEREO | AV_CH_LOW_FREQUENCY),
|
||||||
(CH_LAYOUT_2_1 | CH_LOW_FREQUENCY),
|
(AV_CH_LAYOUT_2_1 | AV_CH_LOW_FREQUENCY),
|
||||||
(CH_LAYOUT_SURROUND | CH_LOW_FREQUENCY),
|
(AV_CH_LAYOUT_SURROUND | AV_CH_LOW_FREQUENCY),
|
||||||
(CH_LAYOUT_2_2 | CH_LOW_FREQUENCY),
|
(AV_CH_LAYOUT_2_2 | AV_CH_LOW_FREQUENCY),
|
||||||
(CH_LAYOUT_QUAD | CH_LOW_FREQUENCY),
|
(AV_CH_LAYOUT_QUAD | AV_CH_LOW_FREQUENCY),
|
||||||
(CH_LAYOUT_4POINT0 | CH_LOW_FREQUENCY),
|
(AV_CH_LAYOUT_4POINT0 | AV_CH_LOW_FREQUENCY),
|
||||||
CH_LAYOUT_5POINT1,
|
AV_CH_LAYOUT_5POINT1,
|
||||||
CH_LAYOUT_5POINT1_BACK,
|
AV_CH_LAYOUT_5POINT1_BACK,
|
||||||
0 },
|
0 },
|
||||||
};
|
};
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
* tables taken directly from the AC-3 spec.
|
* tables taken directly from the AC-3 spec.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "libavcore/audioconvert.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "ac3tab.h"
|
#include "ac3tab.h"
|
||||||
|
|
||||||
@ -84,14 +85,14 @@ const uint8_t ff_ac3_channels_tab[8] = {
|
|||||||
* Map audio coding mode (acmod) to channel layout mask.
|
* Map audio coding mode (acmod) to channel layout mask.
|
||||||
*/
|
*/
|
||||||
const uint16_t ff_ac3_channel_layout_tab[8] = {
|
const uint16_t ff_ac3_channel_layout_tab[8] = {
|
||||||
CH_LAYOUT_STEREO,
|
AV_CH_LAYOUT_STEREO,
|
||||||
CH_LAYOUT_MONO,
|
AV_CH_LAYOUT_MONO,
|
||||||
CH_LAYOUT_STEREO,
|
AV_CH_LAYOUT_STEREO,
|
||||||
CH_LAYOUT_SURROUND,
|
AV_CH_LAYOUT_SURROUND,
|
||||||
CH_LAYOUT_2_1,
|
AV_CH_LAYOUT_2_1,
|
||||||
CH_LAYOUT_4POINT0,
|
AV_CH_LAYOUT_4POINT0,
|
||||||
CH_LAYOUT_2_2,
|
AV_CH_LAYOUT_2_2,
|
||||||
CH_LAYOUT_5POINT0
|
AV_CH_LAYOUT_5POINT0
|
||||||
};
|
};
|
||||||
|
|
||||||
#define COMMON_CHANNEL_MAP \
|
#define COMMON_CHANNEL_MAP \
|
||||||
|
@ -51,13 +51,13 @@ void avcodec_sample_fmt_string (char *buf, int buf_size, int sample_fmt)
|
|||||||
int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name)
|
int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name)
|
||||||
{
|
{
|
||||||
switch(nb_channels) {
|
switch(nb_channels) {
|
||||||
case 1: return CH_LAYOUT_MONO;
|
case 1: return AV_CH_LAYOUT_MONO;
|
||||||
case 2: return CH_LAYOUT_STEREO;
|
case 2: return AV_CH_LAYOUT_STEREO;
|
||||||
case 3: return CH_LAYOUT_SURROUND;
|
case 3: return AV_CH_LAYOUT_SURROUND;
|
||||||
case 4: return CH_LAYOUT_QUAD;
|
case 4: return AV_CH_LAYOUT_QUAD;
|
||||||
case 5: return CH_LAYOUT_5POINT0;
|
case 5: return AV_CH_LAYOUT_5POINT0;
|
||||||
case 6: return CH_LAYOUT_5POINT1;
|
case 6: return AV_CH_LAYOUT_5POINT1;
|
||||||
case 8: return CH_LAYOUT_7POINT1;
|
case 8: return AV_CH_LAYOUT_7POINT1;
|
||||||
default: return 0;
|
default: return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 52
|
#define LIBAVCODEC_VERSION_MAJOR 52
|
||||||
#define LIBAVCODEC_VERSION_MINOR 97
|
#define LIBAVCODEC_VERSION_MINOR 97
|
||||||
#define LIBAVCODEC_VERSION_MICRO 1
|
#define LIBAVCODEC_VERSION_MICRO 2
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
LIBAVCODEC_VERSION_MINOR, \
|
LIBAVCODEC_VERSION_MINOR, \
|
||||||
@ -80,7 +80,7 @@
|
|||||||
#define FF_API_OLD_SAMPLE_FMT (LIBAVCODEC_VERSION_MAJOR < 53)
|
#define FF_API_OLD_SAMPLE_FMT (LIBAVCODEC_VERSION_MAJOR < 53)
|
||||||
#endif
|
#endif
|
||||||
#ifndef FF_API_OLD_AUDIOCONVERT
|
#ifndef FF_API_OLD_AUDIOCONVERT
|
||||||
#define FF_API_OLD_AUDIOCONVERT (LIBAVCODEC_VERSION_MAJOR < 54)
|
#define FF_API_OLD_AUDIOCONVERT (LIBAVCODEC_VERSION_MAJOR < 53)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define AV_NOPTS_VALUE INT64_C(0x8000000000000000)
|
#define AV_NOPTS_VALUE INT64_C(0x8000000000000000)
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
#include "libavutil/intmath.h"
|
#include "libavutil/intmath.h"
|
||||||
#include "libavutil/intreadwrite.h"
|
#include "libavutil/intreadwrite.h"
|
||||||
|
#include "libavcore/audioconvert.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
#include "fft.h"
|
#include "fft.h"
|
||||||
@ -74,22 +75,22 @@ enum DCAMode {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static const int64_t dca_core_channel_layout[] = {
|
static const int64_t dca_core_channel_layout[] = {
|
||||||
CH_FRONT_CENTER, ///< 1, A
|
AV_CH_FRONT_CENTER, ///< 1, A
|
||||||
CH_LAYOUT_STEREO, ///< 2, A + B (dual mono)
|
AV_CH_LAYOUT_STEREO, ///< 2, A + B (dual mono)
|
||||||
CH_LAYOUT_STEREO, ///< 2, L + R (stereo)
|
AV_CH_LAYOUT_STEREO, ///< 2, L + R (stereo)
|
||||||
CH_LAYOUT_STEREO, ///< 2, (L+R) + (L-R) (sum-difference)
|
AV_CH_LAYOUT_STEREO, ///< 2, (L+R) + (L-R) (sum-difference)
|
||||||
CH_LAYOUT_STEREO, ///< 2, LT +RT (left and right total)
|
AV_CH_LAYOUT_STEREO, ///< 2, LT +RT (left and right total)
|
||||||
CH_LAYOUT_STEREO|CH_FRONT_CENTER, ///< 3, C+L+R
|
AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER, ///< 3, C+L+R
|
||||||
CH_LAYOUT_STEREO|CH_BACK_CENTER, ///< 3, L+R+S
|
AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER, ///< 3, L+R+S
|
||||||
CH_LAYOUT_STEREO|CH_FRONT_CENTER|CH_BACK_CENTER, ///< 4, C + L + R+ S
|
AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER|CH_BACK_CENTER, ///< 4, C + L + R+ S
|
||||||
CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT, ///< 4, L + R +SL+ SR
|
AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, ///< 4, L + R +SL+ SR
|
||||||
CH_LAYOUT_STEREO|CH_FRONT_CENTER|CH_SIDE_LEFT|CH_SIDE_RIGHT, ///< 5, C + L + R+ SL+SR
|
AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, ///< 5, C + L + R+ SL+SR
|
||||||
CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT|CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER, ///< 6, CL + CR + L + R + SL + SR
|
AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER, ///< 6, CL + CR + L + R + SL + SR
|
||||||
CH_LAYOUT_STEREO|CH_BACK_LEFT|CH_BACK_RIGHT|CH_FRONT_CENTER|CH_BACK_CENTER, ///< 6, C + L + R+ LR + RR + OV
|
AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT|AV_CH_FRONT_CENTER|AV_CH_BACK_CENTER, ///< 6, C + L + R+ LR + RR + OV
|
||||||
CH_FRONT_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_FRONT_LEFT_OF_CENTER|CH_BACK_CENTER|CH_BACK_LEFT|CH_BACK_RIGHT, ///< 6, CF+ CR+LF+ RF+LR + RR
|
AV_CH_FRONT_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT, ///< 6, CF+ CR+LF+ RF+LR + RR
|
||||||
CH_FRONT_LEFT_OF_CENTER|CH_FRONT_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT, ///< 7, CL + C + CR + L + R + SL + SR
|
AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, ///< 7, CL + C + CR + L + R + SL + SR
|
||||||
CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT|CH_BACK_LEFT|CH_BACK_RIGHT, ///< 8, CL + CR + L + R + SL1 + SL2+ SR1 + SR2
|
AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT, ///< 8, CL + CR + L + R + SL1 + SL2+ SR1 + SR2
|
||||||
CH_FRONT_LEFT_OF_CENTER|CH_FRONT_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_BACK_CENTER|CH_SIDE_RIGHT, ///< 8, CL + C+ CR + L + R + SL + S+ SR
|
AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_BACK_CENTER|AV_CH_SIDE_RIGHT, ///< 8, CL + C+ CR + L + R + SL + S+ SR
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int8_t dca_lfe_index[] = {
|
static const int8_t dca_lfe_index[] = {
|
||||||
@ -1368,9 +1369,9 @@ static int dca_decode_frame(AVCodecContext * avctx,
|
|||||||
|
|
||||||
if (s->xch_present && (!avctx->request_channels ||
|
if (s->xch_present && (!avctx->request_channels ||
|
||||||
avctx->request_channels > num_core_channels + !!s->lfe)) {
|
avctx->request_channels > num_core_channels + !!s->lfe)) {
|
||||||
avctx->channel_layout |= CH_BACK_CENTER;
|
avctx->channel_layout |= AV_CH_BACK_CENTER;
|
||||||
if (s->lfe) {
|
if (s->lfe) {
|
||||||
avctx->channel_layout |= CH_LOW_FREQUENCY;
|
avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
|
||||||
s->channel_order_tab = dca_channel_reorder_lfe_xch[s->amode];
|
s->channel_order_tab = dca_channel_reorder_lfe_xch[s->amode];
|
||||||
} else {
|
} else {
|
||||||
s->channel_order_tab = dca_channel_reorder_nolfe_xch[s->amode];
|
s->channel_order_tab = dca_channel_reorder_nolfe_xch[s->amode];
|
||||||
@ -1379,7 +1380,7 @@ static int dca_decode_frame(AVCodecContext * avctx,
|
|||||||
channels = num_core_channels + !!s->lfe;
|
channels = num_core_channels + !!s->lfe;
|
||||||
s->xch_present = 0; /* disable further xch processing */
|
s->xch_present = 0; /* disable further xch processing */
|
||||||
if (s->lfe) {
|
if (s->lfe) {
|
||||||
avctx->channel_layout |= CH_LOW_FREQUENCY;
|
avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
|
||||||
s->channel_order_tab = dca_channel_reorder_lfe[s->amode];
|
s->channel_order_tab = dca_channel_reorder_lfe[s->amode];
|
||||||
} else
|
} else
|
||||||
s->channel_order_tab = dca_channel_reorder_nolfe[s->amode];
|
s->channel_order_tab = dca_channel_reorder_nolfe[s->amode];
|
||||||
@ -1392,7 +1393,7 @@ static int dca_decode_frame(AVCodecContext * avctx,
|
|||||||
if (avctx->request_channels == 2 && s->prim_channels > 2) {
|
if (avctx->request_channels == 2 && s->prim_channels > 2) {
|
||||||
channels = 2;
|
channels = 2;
|
||||||
s->output = DCA_STEREO;
|
s->output = DCA_STEREO;
|
||||||
avctx->channel_layout = CH_LAYOUT_STEREO;
|
avctx->channel_layout = AV_CH_LAYOUT_STEREO;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Non standard configuration %d !\n",s->amode);
|
av_log(avctx, AV_LOG_ERROR, "Non standard configuration %d !\n",s->amode);
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "nellymoser.h"
|
#include "nellymoser.h"
|
||||||
#include "libavutil/lfg.h"
|
#include "libavutil/lfg.h"
|
||||||
#include "libavutil/random_seed.h"
|
#include "libavutil/random_seed.h"
|
||||||
|
#include "libavcore/audioconvert.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
#include "fft.h"
|
#include "fft.h"
|
||||||
@ -148,7 +149,7 @@ static av_cold int decode_init(AVCodecContext * avctx) {
|
|||||||
ff_init_ff_sine_windows(7);
|
ff_init_ff_sine_windows(7);
|
||||||
|
|
||||||
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
|
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
|
||||||
avctx->channel_layout = CH_LAYOUT_MONO;
|
avctx->channel_layout = AV_CH_LAYOUT_MONO;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
* PCM codecs for encodings found in MPEG streams (DVD/Blu-ray)
|
* PCM codecs for encodings found in MPEG streams (DVD/Blu-ray)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "libavcore/audioconvert.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
|
|
||||||
@ -53,9 +54,9 @@ static int pcm_bluray_parse_header(AVCodecContext *avctx,
|
|||||||
{
|
{
|
||||||
static const uint8_t bits_per_samples[4] = { 0, 16, 20, 24 };
|
static const uint8_t bits_per_samples[4] = { 0, 16, 20, 24 };
|
||||||
static const uint32_t channel_layouts[16] = {
|
static const uint32_t channel_layouts[16] = {
|
||||||
0, CH_LAYOUT_MONO, 0, CH_LAYOUT_STEREO, CH_LAYOUT_SURROUND,
|
0, AV_CH_LAYOUT_MONO, 0, AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_SURROUND,
|
||||||
CH_LAYOUT_2_1, CH_LAYOUT_4POINT0, CH_LAYOUT_2_2, CH_LAYOUT_5POINT0,
|
AV_CH_LAYOUT_2_1, AV_CH_LAYOUT_4POINT0, AV_CH_LAYOUT_2_2, AV_CH_LAYOUT_5POINT0,
|
||||||
CH_LAYOUT_5POINT1, CH_LAYOUT_7POINT0, CH_LAYOUT_7POINT1, 0, 0, 0, 0
|
AV_CH_LAYOUT_5POINT1, AV_CH_LAYOUT_7POINT0, AV_CH_LAYOUT_7POINT1, 0, 0, 0, 0
|
||||||
};
|
};
|
||||||
static const uint8_t channels[16] = {
|
static const uint8_t channels[16] = {
|
||||||
0, 1, 0, 2, 3, 3, 4, 4, 5, 6, 7, 8, 0, 0, 0, 0
|
0, 1, 0, 2, 3, 3, 4, 4, 5, 6, 7, 8, 0, 0, 0, 0
|
||||||
@ -158,9 +159,9 @@ static int pcm_bluray_decode_frame(AVCodecContext *avctx,
|
|||||||
if (samples) {
|
if (samples) {
|
||||||
switch (avctx->channel_layout) {
|
switch (avctx->channel_layout) {
|
||||||
/* cases with same number of source and coded channels */
|
/* cases with same number of source and coded channels */
|
||||||
case CH_LAYOUT_STEREO:
|
case AV_CH_LAYOUT_STEREO:
|
||||||
case CH_LAYOUT_4POINT0:
|
case AV_CH_LAYOUT_4POINT0:
|
||||||
case CH_LAYOUT_2_2:
|
case AV_CH_LAYOUT_2_2:
|
||||||
samples *= num_source_channels;
|
samples *= num_source_channels;
|
||||||
if (AV_SAMPLE_FMT_S16 == avctx->sample_fmt) {
|
if (AV_SAMPLE_FMT_S16 == avctx->sample_fmt) {
|
||||||
#if HAVE_BIGENDIAN
|
#if HAVE_BIGENDIAN
|
||||||
@ -177,10 +178,10 @@ static int pcm_bluray_decode_frame(AVCodecContext *avctx,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
/* cases where number of source channels = coded channels + 1 */
|
/* cases where number of source channels = coded channels + 1 */
|
||||||
case CH_LAYOUT_MONO:
|
case AV_CH_LAYOUT_MONO:
|
||||||
case CH_LAYOUT_SURROUND:
|
case AV_CH_LAYOUT_SURROUND:
|
||||||
case CH_LAYOUT_2_1:
|
case AV_CH_LAYOUT_2_1:
|
||||||
case CH_LAYOUT_5POINT0:
|
case AV_CH_LAYOUT_5POINT0:
|
||||||
if (AV_SAMPLE_FMT_S16 == avctx->sample_fmt) {
|
if (AV_SAMPLE_FMT_S16 == avctx->sample_fmt) {
|
||||||
do {
|
do {
|
||||||
#if HAVE_BIGENDIAN
|
#if HAVE_BIGENDIAN
|
||||||
@ -206,7 +207,7 @@ static int pcm_bluray_decode_frame(AVCodecContext *avctx,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
/* remapping: L, R, C, LBack, RBack, LF */
|
/* remapping: L, R, C, LBack, RBack, LF */
|
||||||
case CH_LAYOUT_5POINT1:
|
case AV_CH_LAYOUT_5POINT1:
|
||||||
if (AV_SAMPLE_FMT_S16 == avctx->sample_fmt) {
|
if (AV_SAMPLE_FMT_S16 == avctx->sample_fmt) {
|
||||||
do {
|
do {
|
||||||
dst16[0] = bytestream_get_be16(&src);
|
dst16[0] = bytestream_get_be16(&src);
|
||||||
@ -230,7 +231,7 @@ static int pcm_bluray_decode_frame(AVCodecContext *avctx,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
/* remapping: L, R, C, LSide, LBack, RBack, RSide, <unused> */
|
/* remapping: L, R, C, LSide, LBack, RBack, RSide, <unused> */
|
||||||
case CH_LAYOUT_7POINT0:
|
case AV_CH_LAYOUT_7POINT0:
|
||||||
if (AV_SAMPLE_FMT_S16 == avctx->sample_fmt) {
|
if (AV_SAMPLE_FMT_S16 == avctx->sample_fmt) {
|
||||||
do {
|
do {
|
||||||
dst16[0] = bytestream_get_be16(&src);
|
dst16[0] = bytestream_get_be16(&src);
|
||||||
@ -258,7 +259,7 @@ static int pcm_bluray_decode_frame(AVCodecContext *avctx,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
/* remapping: L, R, C, LSide, LBack, RBack, RSide, LF */
|
/* remapping: L, R, C, LSide, LBack, RBack, RSide, LF */
|
||||||
case CH_LAYOUT_7POINT1:
|
case AV_CH_LAYOUT_7POINT1:
|
||||||
if (AV_SAMPLE_FMT_S16 == avctx->sample_fmt) {
|
if (AV_SAMPLE_FMT_S16 == avctx->sample_fmt) {
|
||||||
do {
|
do {
|
||||||
dst16[0] = bytestream_get_be16(&src);
|
dst16[0] = bytestream_get_be16(&src);
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "libavutil/integer.h"
|
#include "libavutil/integer.h"
|
||||||
#include "libavutil/crc.h"
|
#include "libavutil/crc.h"
|
||||||
#include "libavutil/pixdesc.h"
|
#include "libavutil/pixdesc.h"
|
||||||
|
#include "libavcore/audioconvert.h"
|
||||||
#include "libavcore/imgutils.h"
|
#include "libavcore/imgutils.h"
|
||||||
#include "libavcore/internal.h"
|
#include "libavcore/internal.h"
|
||||||
#include "libavcore/samplefmt.h"
|
#include "libavcore/samplefmt.h"
|
||||||
@ -922,7 +923,7 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
|
|||||||
", %d Hz", enc->sample_rate);
|
", %d Hz", enc->sample_rate);
|
||||||
}
|
}
|
||||||
av_strlcat(buf, ", ", buf_size);
|
av_strlcat(buf, ", ", buf_size);
|
||||||
avcodec_get_channel_layout_string(buf + strlen(buf), buf_size - strlen(buf), enc->channels, enc->channel_layout);
|
av_get_channel_layout_string(buf + strlen(buf), buf_size - strlen(buf), enc->channels, enc->channel_layout);
|
||||||
if (enc->sample_fmt != AV_SAMPLE_FMT_NONE) {
|
if (enc->sample_fmt != AV_SAMPLE_FMT_NONE) {
|
||||||
snprintf(buf + strlen(buf), buf_size - strlen(buf),
|
snprintf(buf + strlen(buf), buf_size - strlen(buf),
|
||||||
", %s", av_get_sample_fmt_name(enc->sample_fmt));
|
", %s", av_get_sample_fmt_name(enc->sample_fmt));
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
include $(SUBDIR)../config.mak
|
include $(SUBDIR)../config.mak
|
||||||
|
|
||||||
NAME = avfilter
|
NAME = avfilter
|
||||||
FFLIBS = avcodec avcore avutil
|
FFLIBS = avcore avutil
|
||||||
FFLIBS-$(CONFIG_SCALE_FILTER) += swscale
|
FFLIBS-$(CONFIG_SCALE_FILTER) += swscale
|
||||||
|
|
||||||
HEADERS = avfilter.h avfiltergraph.h
|
HEADERS = avfilter.h avfiltergraph.h
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "avfilter.h"
|
#include "avfilter.h"
|
||||||
#include "libavcodec/audioconvert.h"
|
#include "libavcore/audioconvert.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int64_t channel_layout;
|
int64_t channel_layout;
|
||||||
@ -35,7 +35,7 @@ static int init(AVFilterContext *ctx, const char *args, void *opaque)
|
|||||||
char channel_layout_str[128] = "";
|
char channel_layout_str[128] = "";
|
||||||
|
|
||||||
priv->sample_rate = 44100;
|
priv->sample_rate = 44100;
|
||||||
priv->channel_layout = CH_LAYOUT_STEREO;
|
priv->channel_layout = AV_CH_LAYOUT_STEREO;
|
||||||
|
|
||||||
if (args)
|
if (args)
|
||||||
sscanf(args, "%"PRId64":%s", &priv->sample_rate, channel_layout_str);
|
sscanf(args, "%"PRId64":%s", &priv->sample_rate, channel_layout_str);
|
||||||
@ -46,7 +46,7 @@ static int init(AVFilterContext *ctx, const char *args, void *opaque)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (*channel_layout_str)
|
if (*channel_layout_str)
|
||||||
if (!(priv->channel_layout = avcodec_get_channel_layout(channel_layout_str))
|
if (!(priv->channel_layout = av_get_channel_layout(channel_layout_str))
|
||||||
&& sscanf(channel_layout_str, "%"PRId64, &priv->channel_layout) != 1) {
|
&& sscanf(channel_layout_str, "%"PRId64, &priv->channel_layout) != 1) {
|
||||||
av_log(ctx, AV_LOG_ERROR, "Invalid value '%s' for channel layout\n",
|
av_log(ctx, AV_LOG_ERROR, "Invalid value '%s' for channel layout\n",
|
||||||
channel_layout_str);
|
channel_layout_str);
|
||||||
@ -65,8 +65,8 @@ static int config_props(AVFilterLink *outlink)
|
|||||||
outlink->sample_rate = priv->sample_rate;
|
outlink->sample_rate = priv->sample_rate;
|
||||||
outlink->channel_layout = priv->channel_layout;
|
outlink->channel_layout = priv->channel_layout;
|
||||||
|
|
||||||
chans_nb = avcodec_channel_layout_num_channels(priv->channel_layout);
|
chans_nb = av_get_channel_layout_nb_channels(priv->channel_layout);
|
||||||
avcodec_get_channel_layout_string(buf, sizeof(buf), chans_nb, priv->channel_layout);
|
av_get_channel_layout_string(buf, sizeof(buf), chans_nb, priv->channel_layout);
|
||||||
av_log(outlink->src, AV_LOG_INFO,
|
av_log(outlink->src, AV_LOG_INFO,
|
||||||
"sample_rate:%"PRId64 " channel_layout:%"PRId64 " channel_layout_description:'%s'\n",
|
"sample_rate:%"PRId64 " channel_layout:%"PRId64 " channel_layout_description:'%s'\n",
|
||||||
priv->sample_rate, priv->channel_layout, buf);
|
priv->sample_rate, priv->channel_layout, buf);
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
#define LIBAVFILTER_VERSION_MAJOR 1
|
#define LIBAVFILTER_VERSION_MAJOR 1
|
||||||
#define LIBAVFILTER_VERSION_MINOR 63
|
#define LIBAVFILTER_VERSION_MINOR 63
|
||||||
#define LIBAVFILTER_VERSION_MICRO 0
|
#define LIBAVFILTER_VERSION_MICRO 1
|
||||||
|
|
||||||
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
||||||
LIBAVFILTER_VERSION_MINOR, \
|
LIBAVFILTER_VERSION_MINOR, \
|
||||||
@ -579,7 +579,7 @@ struct AVFilterLink {
|
|||||||
int w; ///< agreed upon image width
|
int w; ///< agreed upon image width
|
||||||
int h; ///< agreed upon image height
|
int h; ///< agreed upon image height
|
||||||
/* These two parameters apply only to audio */
|
/* These two parameters apply only to audio */
|
||||||
int64_t channel_layout; ///< channel layout of current buffer (see avcodec.h)
|
int64_t channel_layout; ///< channel layout of current buffer (see libavcore/audioconvert.h)
|
||||||
int64_t sample_rate; ///< samples per second
|
int64_t sample_rate; ///< samples per second
|
||||||
|
|
||||||
int format; ///< agreed upon media format
|
int format; ///< agreed upon media format
|
||||||
|
@ -19,9 +19,9 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "libavcore/audioconvert.h"
|
||||||
#include "libavcore/imgutils.h"
|
#include "libavcore/imgutils.h"
|
||||||
#include "libavcore/samplefmt.h"
|
#include "libavcore/samplefmt.h"
|
||||||
#include "libavcodec/audioconvert.h"
|
|
||||||
#include "avfilter.h"
|
#include "avfilter.h"
|
||||||
|
|
||||||
/* TODO: buffer pool. see comment for avfilter_default_get_video_buffer() */
|
/* TODO: buffer pool. see comment for avfilter_default_get_video_buffer() */
|
||||||
@ -111,7 +111,7 @@ AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int per
|
|||||||
samples->free = avfilter_default_free_buffer;
|
samples->free = avfilter_default_free_buffer;
|
||||||
|
|
||||||
sample_size = av_get_bits_per_sample_fmt(sample_fmt) >>3;
|
sample_size = av_get_bits_per_sample_fmt(sample_fmt) >>3;
|
||||||
chans_nb = avcodec_channel_layout_num_channels(channel_layout);
|
chans_nb = av_get_channel_layout_nb_channels(channel_layout);
|
||||||
|
|
||||||
per_channel_size = size/chans_nb;
|
per_channel_size = size/chans_nb;
|
||||||
ref->audio->samples_nb = per_channel_size/sample_size;
|
ref->audio->samples_nb = per_channel_size/sample_size;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user