History

cook: convert to new channel layout API

Anton Khirnov committed 13 years ago

Commit fa0c8a71 parent cdde7fe2 files · +16 −13Browse files

Unified · Split

2 files
  1. libavcodec/cook.c +14 −11
  2. libavcodec/cook_parser.c +2 −2
libavcodec/cook.c+14−11
@@ -1054,7 +1054,7 @@ static void dump_cook_context(COOKContext *q) · 1053 unmodified lines
1054 PRINT("js_vlc_bits", q->subpacket[0].js_vlc_bits);1054 PRINT("js_vlc_bits", q->subpacket[0].js_vlc_bits);
1055 }1055 }
1056 ff_dlog(q->avctx, "COOKContext\n");1056 ff_dlog(q->avctx, "COOKContext\n");
1057 PRINT("nb_channels", q->avctx->channels);1057 PRINT("nb_channels", q->avctx->ch_layout.nb_channels);
1058 PRINT("bit_rate", (int)q->avctx->bit_rate);1058 PRINT("bit_rate", (int)q->avctx->bit_rate);
1059 PRINT("sample_rate", q->avctx->sample_rate);1059 PRINT("sample_rate", q->avctx->sample_rate);
1060 PRINT("samples_per_channel", q->subpacket[0].samples_per_channel);1060 PRINT("samples_per_channel", q->subpacket[0].samples_per_channel);
@@ -1079,6 +1079,8 @@ static av_cold int cook_decode_init(AVCodecContext *avctx) · 18 unmodified lines
1079 unsigned int channel_mask = 0;1079 unsigned int channel_mask = 0;
1080 int samples_per_frame = 0;1080 int samples_per_frame = 0;
1081 int ret;1081 int ret;
1082 int channels = avctx->ch_layout.nb_channels;
1083
1082 q->avctx = avctx;1084 q->avctx = avctx;
1083 1085
1084 /* Take care of the codec specific extradata. */1086 /* Take care of the codec specific extradata. */
@@ -1091,7 +1093,7 @@ static av_cold int cook_decode_init(AVCodecContext *avctx) · 6 unmodified lines
1091 bytestream2_init(&gb, avctx->extradata, avctx->extradata_size);1093 bytestream2_init(&gb, avctx->extradata, avctx->extradata_size);
1092 1094
1093 /* Take data from the AVCodecContext (RM container). */1095 /* Take data from the AVCodecContext (RM container). */
1094 if (!avctx->channels) {1096 if (!channels) {
1095 av_log(avctx, AV_LOG_ERROR, "Invalid number of channels\n");1097 av_log(avctx, AV_LOG_ERROR, "Invalid number of channels\n");
1096 return AVERROR_INVALIDDATA;1098 return AVERROR_INVALIDDATA;
1097 }1099 }
@@ -1123,7 +1125,7 @@ static av_cold int cook_decode_init(AVCodecContext *avctx) · 25 unmodified lines
1123 q->subpacket[s].js_vlc_bits = bytestream2_get_be16(&gb);1125 q->subpacket[s].js_vlc_bits = bytestream2_get_be16(&gb);
1124 1126
1125 /* Initialize extradata related variables. */1127 /* Initialize extradata related variables. */
1126 q->subpacket[s].samples_per_channel = samples_per_frame / avctx->channels;1128 q->subpacket[s].samples_per_channel = samples_per_frame / channels;
1127 q->subpacket[s].bits_per_subpacket = avctx->block_align * 8;1129 q->subpacket[s].bits_per_subpacket = avctx->block_align * 8;
1128 1130
1129 /* Initialize default data states. */1131 /* Initialize default data states. */
@@ -1138,21 +1140,21 @@ static av_cold int cook_decode_init(AVCodecContext *avctx) · 8 unmodified lines
1138 q->subpacket[s].joint_stereo = 0;1140 q->subpacket[s].joint_stereo = 0;
1139 switch (q->subpacket[s].cookversion) {1141 switch (q->subpacket[s].cookversion) {
1140 case MONO:1142 case MONO:
1141 if (avctx->channels != 1) {1143 if (channels != 1) {
1142 avpriv_request_sample(avctx, "Container channels != 1");1144 avpriv_request_sample(avctx, "Container channels != 1");
1143 return AVERROR_PATCHWELCOME;1145 return AVERROR_PATCHWELCOME;
1144 }1146 }
1145 av_log(avctx, AV_LOG_DEBUG, "MONO\n");1147 av_log(avctx, AV_LOG_DEBUG, "MONO\n");
1146 break;1148 break;
1147 case STEREO:1149 case STEREO:
1148 if (avctx->channels != 1) {1150 if (channels != 1) {
1149 q->subpacket[s].bits_per_subpdiv = 1;1151 q->subpacket[s].bits_per_subpdiv = 1;
1150 q->subpacket[s].num_channels = 2;1152 q->subpacket[s].num_channels = 2;
1151 }1153 }
1152 av_log(avctx, AV_LOG_DEBUG, "STEREO\n");1154 av_log(avctx, AV_LOG_DEBUG, "STEREO\n");
1153 break;1155 break;
1154 case JOINT_STEREO:1156 case JOINT_STEREO:
1155 if (avctx->channels != 2) {1157 if (channels != 2) {
1156 avpriv_request_sample(avctx, "Container channels != 2");1158 avpriv_request_sample(avctx, "Container channels != 2");
1157 return AVERROR_PATCHWELCOME;1159 return AVERROR_PATCHWELCOME;
1158 }1160 }
@@ -1174,7 +1176,7 @@ static av_cold int cook_decode_init(AVCodecContext *avctx) · 15 unmodified lines
1174 av_log(avctx, AV_LOG_DEBUG, "MULTI_CHANNEL\n");1176 av_log(avctx, AV_LOG_DEBUG, "MULTI_CHANNEL\n");
1175 channel_mask |= q->subpacket[s].channel_mask = bytestream2_get_be32(&gb);1177 channel_mask |= q->subpacket[s].channel_mask = bytestream2_get_be32(&gb);
1176 1178
1177 if (av_get_channel_layout_nb_channels(q->subpacket[s].channel_mask) > 1) {1179 if (av_popcount64(q->subpacket[s].channel_mask) > 1) {
1178 q->subpacket[s].total_subbands = q->subpacket[s].subbands +1180 q->subpacket[s].total_subbands = q->subpacket[s].subbands +
1179 q->subpacket[s].js_subband_start;1181 q->subpacket[s].js_subband_start;
1180 q->subpacket[s].joint_stereo = 1;1182 q->subpacket[s].joint_stereo = 1;
@@ -1233,8 +1235,8 @@ static av_cold int cook_decode_init(AVCodecContext *avctx) · 52 unmodified lines
1233 q->subpacket[s].gains2.now = q->subpacket[s].gain_3;1235 q->subpacket[s].gains2.now = q->subpacket[s].gain_3;
1234 q->subpacket[s].gains2.previous = q->subpacket[s].gain_4;1236 q->subpacket[s].gains2.previous = q->subpacket[s].gain_4;
1235 1237
1236 if (q->num_subpackets + q->subpacket[s].num_channels > q->avctx->channels) {1238 if (q->num_subpackets + q->subpacket[s].num_channels > channels) {
1237 av_log(avctx, AV_LOG_ERROR, "Too many subpackets %d for channels %d\n", q->num_subpackets, q->avctx->channels);1239 av_log(avctx, AV_LOG_ERROR, "Too many subpackets %d for channels %d\n", q->num_subpackets, channels);
1238 return AVERROR_INVALIDDATA;1240 return AVERROR_INVALIDDATA;
1239 }1241 }
1240 1242
@@ -1282,10 +1284,11 @@ static av_cold int cook_decode_init(AVCodecContext *avctx) · 41 unmodified lines
1282 }1284 }
1283 1285
1284 avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;1286 avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
1287 av_channel_layout_uninit(&avctx->ch_layout);
1285 if (channel_mask)1288 if (channel_mask)
1286 avctx->channel_layout = channel_mask;1289 av_channel_layout_from_mask(&avctx->ch_layout, channel_mask);
1287 else1290 else
1288 avctx->channel_layout = (avctx->channels == 2) ? AV_CH_LAYOUT_STEREO : AV_CH_LAYOUT_MONO;1291 av_channel_layout_default(&avctx->ch_layout, channels);
1289 1292
1290 1293
1291 dump_cook_context(q);1294 dump_cook_context(q);
libavcodec/cook_parser.c+2−2
@@ -41,8 +41,8 @@ static int cook_parse(AVCodecParserContext *s1, AVCodecContext *avctx, · 40 unmodified lines
41 CookParseContext *s = s1->priv_data;41 CookParseContext *s = s1->priv_data;
42 42
43 if (!s->duration &&43 if (!s->duration &&
44 avctx->extradata && avctx->extradata_size >= 8 && avctx->channels)44 avctx->extradata && avctx->extradata_size >= 8 && avctx->ch_layout.nb_channels)
45 s->duration = AV_RB16(avctx->extradata + 4) / avctx->channels;45 s->duration = AV_RB16(avctx->extradata + 4) / avctx->ch_layout.nb_channels;
46 46
47 s1->duration = s->duration;47 s1->duration = s->duration;
48 48

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t