comparison flacenc.c @ 12311:1a4351501522 libavcodec

Combine output_subframe_verbatim() and output_subframe_lpc().
author jbr
date Fri, 30 Jul 2010 21:06:38 +0000
parents eba0e28f6dbc
children 4f7ed0667a27
comparison
equal deleted inserted replaced
12310:eba0e28f6dbc 12311:1a4351501522
1099 put_bits_count(&s->pb) >> 3); 1099 put_bits_count(&s->pb) >> 3);
1100 put_bits(&s->pb, 8, crc); 1100 put_bits(&s->pb, 8, crc);
1101 } 1101 }
1102 1102
1103 1103
1104 static void output_subframe_verbatim(FlacEncodeContext *s, FlacSubframe *sub) 1104 static void output_subframe(FlacEncodeContext *s, FlacSubframe *sub)
1105 {
1106 put_sbits(&s->pb, sub->obits, sub->residual[0]);
1107
1108 if (sub->type == FLAC_SUBFRAME_VERBATIM) {
1109 int i;
1110 for (i = 0; i < s->frame.blocksize; i++)
1111 put_sbits(&s->pb, sub->obits, sub->residual[i]);
1112 }
1113 }
1114
1115
1116 static void output_subframe_lpc(FlacEncodeContext *s, FlacSubframe *sub)
1117 { 1105 {
1118 int i, p, porder, psize; 1106 int i, p, porder, psize;
1119 int32_t *res, *part_end, *frame_end; 1107 int32_t *part_end;
1120 1108 int32_t *res = sub->residual;
1109 int32_t *frame_end = &sub->residual[s->frame.blocksize];
1110
1111 if (sub->type == FLAC_SUBFRAME_CONSTANT) {
1112 put_sbits(&s->pb, sub->obits, res[0]);
1113 } else if (sub->type == FLAC_SUBFRAME_VERBATIM) {
1114 while (res < frame_end)
1115 put_sbits(&s->pb, sub->obits, *res++);
1116 } else {
1121 /* warm-up samples */ 1117 /* warm-up samples */
1122 res = sub->residual;
1123 for (i = 0; i < sub->order; i++) 1118 for (i = 0; i < sub->order; i++)
1124 put_sbits(&s->pb, sub->obits, *res++); 1119 put_sbits(&s->pb, sub->obits, *res++);
1125 1120
1126 /* LPC coefficients */ 1121 /* LPC coefficients */
1127 if (sub->type == FLAC_SUBFRAME_LPC) { 1122 if (sub->type == FLAC_SUBFRAME_LPC) {
1140 psize = s->frame.blocksize >> porder; 1135 psize = s->frame.blocksize >> porder;
1141 put_bits(&s->pb, 4, porder); 1136 put_bits(&s->pb, 4, porder);
1142 1137
1143 /* residual */ 1138 /* residual */
1144 part_end = &sub->residual[psize ]; 1139 part_end = &sub->residual[psize ];
1145 frame_end = &sub->residual[s->frame.blocksize];
1146 for (p = 0; p < 1 << porder; p++) { 1140 for (p = 0; p < 1 << porder; p++) {
1147 int k = sub->rc.params[p]; 1141 int k = sub->rc.params[p];
1148 put_bits(&s->pb, 4, k); 1142 put_bits(&s->pb, 4, k);
1149 while (res < part_end) 1143 while (res < part_end)
1150 set_sr_golomb_flac(&s->pb, *res++, k, INT32_MAX, 0); 1144 set_sr_golomb_flac(&s->pb, *res++, k, INT32_MAX, 0);
1151 part_end = FFMIN(frame_end, part_end + psize); 1145 part_end = FFMIN(frame_end, part_end + psize);
1152 } 1146 }
1147 }
1153 } 1148 }
1154 1149
1155 1150
1156 static void output_subframes(FlacEncodeContext *s) 1151 static void output_subframes(FlacEncodeContext *s)
1157 { 1152 {
1168 put_bits(&s->pb, 1, 0); 1163 put_bits(&s->pb, 1, 0);
1169 put_bits(&s->pb, 6, sub->type_code); 1164 put_bits(&s->pb, 6, sub->type_code);
1170 put_bits(&s->pb, 1, 0); /* no wasted bits */ 1165 put_bits(&s->pb, 1, 0); /* no wasted bits */
1171 1166
1172 /* subframe */ 1167 /* subframe */
1173 switch (sub->type) { 1168 output_subframe(s, sub);
1174 case FLAC_SUBFRAME_CONSTANT:
1175 case FLAC_SUBFRAME_VERBATIM: output_subframe_verbatim(s, sub); break;
1176 case FLAC_SUBFRAME_FIXED:
1177 case FLAC_SUBFRAME_LPC: output_subframe_lpc( s, sub); break;
1178 }
1179 } 1169 }
1180 } 1170 }
1181 1171
1182 1172
1183 static void output_frame_footer(FlacEncodeContext *s) 1173 static void output_frame_footer(FlacEncodeContext *s)