- Timestamp:
- Feb 9, 2009 10:39:58 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/branches/projects/aps-direct/pjmedia/src/pjmedia-codec/passthrough.c
r2438 r2444 171 171 { 172 172 # if PJMEDIA_HAS_PASSTHROUGH_CODEC_AMR 173 {1, "AMR", PJMEDIA_RTP_PT_AMR, PJMEDIA_FOURCC_AMR,173 {1, "AMR", PJMEDIA_RTP_PT_AMR, {PJMEDIA_FOURCC_AMR}, 174 174 8000, 1, 160, 175 5900, 12200, 4,175 12200, 12200, 2, 176 176 &parse_amr, &pack_amr 177 177 /*, {1, {{{"octet-align", 11}, {"1", 1}}} } */ … … 180 180 181 181 # if PJMEDIA_HAS_PASSTHROUGH_CODEC_G729 182 {1, "G729", PJMEDIA_RTP_PT_G729, PJMEDIA_FOURCC_G729,182 {1, "G729", PJMEDIA_RTP_PT_G729, {PJMEDIA_FOURCC_G729}, 183 183 8000, 1, 80, 184 8000, 11800, 2184 8000, 8000, 2 185 185 }, 186 186 # endif 187 187 188 188 # if PJMEDIA_HAS_PASSTHROUGH_CODEC_ILBC 189 {1, "iLBC", PJMEDIA_RTP_PT_ILBC, PJMEDIA_FOURCC_ILBC,190 8000, 1, 80,191 8000, 11800, 2,189 {1, "iLBC", PJMEDIA_RTP_PT_ILBC, {PJMEDIA_FOURCC_ILBC}, 190 8000, 1, 240, 191 13333, 15200, 2, 192 192 NULL, NULL, 193 193 {1, {{{"mode", 4}, {"30", 2}}} } … … 196 196 197 197 # if PJMEDIA_HAS_PASSTHROUGH_CODEC_PCMU 198 {1, "PCMU", PJMEDIA_RTP_PT_PCMU, PJMEDIA_FOURCC_G711U,198 {1, "PCMU", PJMEDIA_RTP_PT_PCMU, {PJMEDIA_FOURCC_G711U}, 199 199 8000, 1, 80, 200 200 64000, 64000, 2 … … 203 203 204 204 # if PJMEDIA_HAS_PASSTHROUGH_CODEC_PCMA 205 {1, "PCMA", PJMEDIA_RTP_PT_PCMA, PJMEDIA_FOURCC_G711A,205 {1, "PCMA", PJMEDIA_RTP_PT_PCMA, {PJMEDIA_FOURCC_G711A}, 206 206 8000, 1, 80, 207 207 64000, 64000, 2 … … 210 210 }; 211 211 212 212 213 #if PJMEDIA_HAS_PASSTHROUGH_CODEC_AMR 213 214 … … 227 228 struct pjmedia_frame *output) 228 229 { 229 enum {MAX_FRAMES_PER_PACKET = 16};230 enum {MAX_FRAMES_PER_PACKET = 8}; 230 231 231 232 pjmedia_frame frames[MAX_FRAMES_PER_PACKET]; 232 unsigned nframes = 0; 233 pjmedia_codec_amr_bit_info *info; 234 235 PJ_TODO(DEFINE_AMR_FRAME_INFO_FOR_PJMEDIA_FRAME_EXT); 236 237 #if 0 238 239 pj_uint8_t *r; /* Read cursor */ 233 amr_settings_t* setting = (amr_settings_t*)codec_data->codec_setting; 234 pjmedia_codec_amr_pack_setting *enc_setting = &setting->enc_setting; 240 235 pj_uint8_t SID_FT; 241 pjmedia_codec_amr_pack_setting *setting; 242 243 setting = &((amr_settings_t*)codec_data->codec_setting)->enc_setting; 244 245 SID_FT = (pj_uint8_t)(setting->amr_nb? 8 : 9); 246 247 /* Align pkt buf right */ 248 r = (pj_uint8_t*)pkt + max_pkt_size - *pkt_size; 249 pj_memmove(r, pkt, *pkt_size); 236 unsigned i; 237 238 pj_assert(input->subframe_cnt <= MAX_FRAMES_PER_PACKET); 239 240 SID_FT = (pj_uint8_t)(enc_setting->amr_nb? 8 : 9); 250 241 251 242 /* Get frames */ 252 for (;;) { 253 pj_bool_t eof; 254 pj_uint16_t info_; 255 256 info_ = *((pj_uint16_t*)r); 257 eof = ((info_ & 0x40) != 0); 258 259 info = (pjmedia_codec_amr_bit_info*) &frames[nframes].bit_info; 243 for (i = 0; i < input->subframe_cnt; ++i) { 244 pjmedia_frame_ext_subframe *sf; 245 pjmedia_codec_amr_bit_info *info; 246 unsigned len; 247 248 sf = pjmedia_frame_ext_get_subframe(input, i); 249 250 len = sf->bitlen >> 3; 251 if (sf->bitlen & 0x07) 252 ++len; 253 254 info = (pjmedia_codec_amr_bit_info*) &frames[i].bit_info; 260 255 pj_bzero(info, sizeof(*info)); 261 info->frame_type = (pj_uint8_t)(info_ & 0x0F); 256 info->frame_type = pjmedia_codec_amr_get_mode2(enc_setting->amr_nb, 257 len); 262 258 info->good_quality = 1; 263 info->mode = (pj_int8_t) ((info_ >> 8) & 0x0F); 264 265 frames[nframes].buf = r + 2; 266 frames[nframes].size = info->frame_type <= SID_FT ? 267 pjmedia_codec_amrnb_framelen[info->frame_type] : 268 0; 269 270 r += frames[nframes].size + 2; 271 272 /* Last frame */ 273 if (++nframes >= MAX_FRAMES_PER_PACKET || eof) 274 break; 275 } 276 277 /* Pack */ 278 *pkt_size = max_pkt_size; 279 280 return pjmedia_codec_amr_pack(frames, nframes, setting, pkt, pkt_size); 281 #endif 282 283 return PJ_ENOTSUP; 259 info->mode = setting->enc_mode; 260 261 frames[i].buf = sf->data; 262 frames[i].size = len; 263 } 264 265 output->size = output_buf_len; 266 267 return pjmedia_codec_amr_pack(frames, input->subframe_cnt, enc_setting, 268 output->buf, &output->size); 284 269 } 285 270 … … 302 287 return status; 303 288 289 // CMR is not supported for now. 304 290 /* Check Change Mode Request. */ 305 if ((setting->amr_nb && cmr <= 7) || (!setting->amr_nb && cmr <= 8)) {306 s->enc_mode = cmr;307 }291 //if ((setting->amr_nb && cmr <= 7) || (!setting->amr_nb && cmr <= 8)) { 292 // s->enc_mode = cmr; 293 //} 308 294 309 295 return PJ_SUCCESS; … … 800 786 pjmedia_frame_ext *output_ = (pjmedia_frame_ext*) output; 801 787 802 pj_assert(input && input->size > 0);788 pj_assert(input); 803 789 804 790 #if PJMEDIA_HAS_PASSTHROUGH_CODEC_AMR … … 807 793 * into encoder bits order. 808 794 */ 809 if (desc->pt == PJMEDIA_RTP_PT_AMR ) {810 pjmedia_frame frame;795 if (desc->pt == PJMEDIA_RTP_PT_AMR || desc->pt == PJMEDIA_RTP_PT_AMRWB) { 796 pjmedia_frame input_; 811 797 pjmedia_codec_amr_pack_setting *setting; 812 798 813 799 setting = &((amr_settings_t*)codec_data->codec_setting)->dec_setting; 814 800 815 frame = *input; 816 pjmedia_codec_amr_predecode(input, setting, &frame); 801 input_ = *input; 802 pjmedia_codec_amr_predecode(input, setting, &input_); 803 804 pjmedia_frame_ext_append_subframe(output_, input_.buf, 805 (pj_uint16_t)(input_.size << 3), 806 (pj_uint16_t)desc->samples_per_frame); 807 808 return PJ_SUCCESS; 817 809 } 818 810 #endif 819 /* 820 PJ_ASSERT_RETURN(output_buf_len >= sizeof(pjmedia_frame_ext) + 821 sizeof(pjmedia_frame_ext_subframe) + 822 input->size, 823 PJMEDIA_CODEC_EFRMTOOSHORT); 824 */ 825 811 826 812 pjmedia_frame_ext_append_subframe(output_, input->buf, 827 813 (pj_uint16_t)(input->size << 3),
Note: See TracChangeset
for help on using the changeset viewer.