亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? aac.cpp

?? 網絡MPEG4IP流媒體開發源代碼
?? CPP
字號:
/* * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ *  * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. *  * The Original Code is MPEG4IP. *  * The Initial Developer of the Original Code is Cisco Systems Inc. * Portions created by Cisco Systems Inc. are * Copyright (C) Cisco Systems Inc. 2000, 2001.  All Rights Reserved. *  * Contributor(s):  *              Bill May        wmay@cisco.com */#include "aac.h"#include <mp4util/mpeg4_audio_config.h>#include <mp4util/mpeg4_sdp.h>#include <mp4v2/mp4.h>#define DEBUG_SYNC 2const char *aaclib="aac";/* * Create CAACodec class */static codec_data_t *aac_codec_create (const char *compressor, 				       int type, 				       int profile, 				       format_list_t *media_fmt,				       audio_info_t *audio,				       const uint8_t *userdata,				       uint32_t userdata_size,				       audio_vft_t *vft,				       void *ifptr){  aac_codec_t *aac;  aac = (aac_codec_t *)malloc(sizeof(aac_codec_t));  memset(aac, 0, sizeof(aac_codec_t));  aac->m_vft = vft;  aac->m_ifptr = ifptr;  fmtp_parse_t *fmtp = NULL;  // Start setting up FAAC stuff...  aac->m_resync_with_header = 1;  aac->m_record_sync_time = 1;    aac->m_faad_inited = 0;  aac->m_audio_inited = 0;  aac->m_temp_buff = (uint8_t *)malloc(4096);  // Use media_fmt to indicate that we're streaming.  if (media_fmt != NULL) {    // haven't checked for null buffer    // This is not necessarilly right - it is, for the most part, but    // we should be reading the fmtp statement, and looking at the config.    // (like we do below in the userdata section...    aac->m_freq = media_fmt->rtpmap->clock_rate;    fmtp = parse_fmtp_for_mpeg4(media_fmt->fmt_param, vft->log_msg);    if (fmtp != NULL) {      userdata = fmtp->config_binary;      userdata_size = fmtp->config_binary_len;    }  } else {    if (audio != NULL) {      aac->m_freq = audio->freq;    } else {      aac->m_freq = 44100;    }  }  aac->m_chans = 2; // this may be wrong - the isma spec, Appendix A.1.1 of  // Appendix H says the default is 1 channel...  aac->m_output_frame_size = 1024;  aac->m_object_type = AACMAIN;  if (userdata != NULL || fmtp != NULL) {    mpeg4_audio_config_t audio_config;    decode_mpeg4_audio_config(userdata, userdata_size, &audio_config);    aac->m_object_type = audio_config.audio_object_type;    aac->m_freq = audio_config.frequency;    aac->m_chans = audio_config.channels;    if (audio_config.codec.aac.frame_len_1024 == 0) {      aac->m_output_frame_size = 960;    }  }  aa_message(LOG_INFO, aaclib,"AAC object type is %d", aac->m_object_type);  aac->m_info = faacDecOpen();  faacDecConfiguration config;  config.defObjectType = aac->m_object_type;  config.defSampleRate = aac->m_freq;  faacDecSetConfiguration(aac->m_info, &config);  aac->m_msec_per_frame = aac->m_output_frame_size;  aac->m_msec_per_frame *= M_LLU;  aac->m_msec_per_frame /= aac->m_freq;  //  faad_init_bytestream(&m_info->ld, c_read_byte, c_bookmark, m_bytestream);  aa_message(LOG_INFO, aaclib, "Setting freq to %d", aac->m_freq);#if DUMP_OUTPUT_TO_FILE  aac->m_outfile = fopen("temp.raw", "w");#endif  if (fmtp != NULL) {    free_fmtp_parse(fmtp);  }  return (codec_data_t *)aac;}void aac_close (codec_data_t *ptr){  if (ptr == NULL) {    printf("\nin aac close\n");    return;  }  aac_codec_t *aac = (aac_codec_t *)ptr;  faacDecClose(aac->m_info);  aac->m_info = NULL;  if (aac->m_temp_buff) {    free(aac->m_temp_buff);    aac->m_temp_buff = NULL;  }#if DUMP_OUTPUT_TO_FILE  fclose(aac->m_outfile);#endif  free(aac);}/* * Handle pause - basically re-init the codec */static void aac_do_pause (codec_data_t *ifptr){  aac_codec_t *aac = (aac_codec_t *)ifptr;  aac->m_resync_with_header = 1;  aac->m_record_sync_time = 1;  aac->m_audio_inited = 0;  aac->m_faad_inited = 0;  if (aac->m_temp_buff == NULL)     aac->m_temp_buff = (uint8_t *)malloc(4096);}/* * Decode task call for FAAC */static int aac_decode (codec_data_t *ptr,		       uint64_t ts,		       int from_rtp,		       int *sync_frame,		       uint8_t *buffer,		       uint32_t buflen, 		       void *userdata){  aac_codec_t *aac = (aac_codec_t *)ptr;  unsigned long bytes_consummed;  int bits = -1;  //  struct timezone tz;  if (aac->m_record_sync_time) {    aac->m_current_frame = 0;    aac->m_record_sync_time = 0;    aac->m_current_time = ts;    aac->m_last_rtp_ts = ts;  } else {    if (aac->m_last_rtp_ts == ts) {      aac->m_current_time += aac->m_msec_per_frame;      aac->m_current_frame++;    } else {      aac->m_last_rtp_ts = ts;      aac->m_current_time = ts;      aac->m_current_frame = 0;    }    // Note - here m_current_time should pretty much always be >= rtpts.      // If we're not, we most likely want to stop and resync.  We don't    // need to keep decoding - just decode this frame and indicate we    // need a resync... That should handle fast forwards...  We need    // someway to handle reverses - perhaps if we're more than .5 seconds    // later...  }    if (aac->m_faad_inited == 0) {      /*       * If not initialized, do so.       */      unsigned long freq, chans;      faacDecInit(aac->m_info,		  (unsigned char *)buffer,		  &freq,		  &chans);      aac->m_freq = freq;      aac->m_chans = chans;      aac->m_faad_inited = 1;    }    uint8_t *buff;    /*      * Get an audio buffer     */    if (aac->m_audio_inited == 0) {      buff = aac->m_temp_buff;    } else {      buff = aac->m_vft->audio_get_buffer(aac->m_ifptr);    }    if (buff == NULL) {      //player_debug_message("Can't get buffer in aa");      return (0);    }    unsigned long samples;    bytes_consummed = buflen;    bits = faacDecDecode(aac->m_info,			 (unsigned char *)buffer, 			 &bytes_consummed,			 (short *)buff, 			 &samples);    switch (bits) {    case FAAD_OK_CHUPDATE:      if (aac->m_audio_inited != 0) {	int tempchans = faacDecGetProgConfig(aac->m_info, NULL);	if (tempchans != aac->m_chans) {	  aa_message(LOG_NOTICE, aaclib, "chupdate - chans from data is %d", 			       tempchans);	}      }      // fall through...    case FAAD_OK:      if (aac->m_audio_inited == 0) {	int tempchans = faacDecGetProgConfig(aac->m_info, NULL);	if (tempchans == 0) {	  aac->m_resync_with_header = 1;	  aac->m_record_sync_time = 1;	  return bytes_consummed;	}	if (tempchans != aac->m_chans) {	  aa_message(LOG_NOTICE, aaclib, "chans from data is %d conf %d", 		     tempchans, aac->m_chans);	  aac->m_chans = tempchans;	}	aac->m_vft->audio_configure(aac->m_ifptr,				     aac->m_freq, 				     aac->m_chans, 				     AUDIO_S16SYS, 				     aac->m_output_frame_size);	uint8_t *now = aac->m_vft->audio_get_buffer(aac->m_ifptr);	if (now != NULL) {	  memcpy(now, buff, tempchans * aac->m_output_frame_size * sizeof(int16_t));	}	aac->m_audio_inited = 1;      }      /*       * good result - give it to audio sync class       */#if DUMP_OUTPUT_TO_FILE      fwrite(buff, aac->m_output_frame_size * 4, 1, aac->m_outfile);#endif      aac->m_vft->audio_filled_buffer(aac->m_ifptr,				      aac->m_current_time, 				      aac->m_resync_with_header);      if (aac->m_resync_with_header == 1) {	aac->m_resync_with_header = 0;#ifdef DEBUG_SYNC	aa_message(LOG_DEBUG, aaclib, "Back to good at "LLU, aac->m_current_time);#endif      }      break;    default:      aa_message(LOG_ERR, aaclib, "Bits return is %d", bits);      aac->m_resync_with_header = 1;#ifdef DEBUG_SYNC      aa_message(LOG_ERR, aaclib, "Audio decode problem - at "LLU, 		 aac->m_current_time);#endif      break;    }  return (bytes_consummed);}static const char *aac_compressors[] = {  "aac ",  "mp4a",  NULL};static int aac_codec_check (lib_message_func_t message,			    const char *compressor,			    int type,			    int profile,			    format_list_t *fptr, 			    const uint8_t *userdata,			    uint32_t userdata_size){  fmtp_parse_t *fmtp = NULL;  if (compressor != NULL &&       strcasecmp(compressor, "MP4 FILE") == 0 &&      type != -1) {    switch (type) {    case MP4_MPEG2_AAC_MAIN_AUDIO_TYPE:    case MP4_MPEG2_AAC_LC_AUDIO_TYPE:    case MP4_MPEG2_AAC_SSR_AUDIO_TYPE:    case MP4_MPEG4_AUDIO_TYPE:      break;    default:      return -1;    }  }  if (fptr != NULL &&       fptr->rtpmap != NULL &&      fptr->rtpmap->encode_name != NULL) {    if (strcasecmp(fptr->rtpmap->encode_name, "mpeg4-generic") != 0) {      return -1;    }    if (userdata == NULL) {      fmtp = parse_fmtp_for_mpeg4(fptr->fmt_param, message);      if (fmtp != NULL) {	userdata = fmtp->config_binary;	userdata_size = fmtp->config_binary_len;      }    }  }  if (userdata != NULL) {    mpeg4_audio_config_t audio_config;    decode_mpeg4_audio_config(userdata, userdata_size, &audio_config);    if (fmtp != NULL) free_fmtp_parse(fmtp);    if (audio_object_type_is_aac(&audio_config) == 0) {      return -1;    }    return 1;  }  if (compressor != NULL) {    const char **lptr = aac_compressors;    while (*lptr != NULL) {      if (strcasecmp(*lptr, compressor) == 0) {	return 1;      }      lptr++;    }  }  return -1;}AUDIO_CODEC_WITH_RAW_FILE_PLUGIN("aac",				 aac_codec_create,				 aac_do_pause,				 aac_decode,				 NULL, 				 aac_close,				 aac_codec_check,				 aac_file_check,				 aac_file_next_frame,				 aac_file_used_for_frame,				 aac_raw_file_seek_to,				 aac_file_eof);/* end file aa.cpp */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区成人精品| 最新日韩在线视频| 欧美色网站导航| 处破女av一区二区| 国产精品888| 成人一区二区三区视频在线观看| 国产精品白丝jk黑袜喷水| 三级精品在线观看| 青青草原综合久久大伊人精品优势 | www.亚洲精品| 99久久久精品免费观看国产蜜| 播五月开心婷婷综合| 97久久精品人人做人人爽50路| 91无套直看片红桃| 欧美天堂亚洲电影院在线播放 | 蜜桃精品视频在线| 黄一区二区三区| 成人一区二区三区视频在线观看| av电影天堂一区二区在线观看| 日本乱码高清不卡字幕| 91麻豆精品国产91| 久久久精品免费观看| 亚洲啪啪综合av一区二区三区| 亚洲综合免费观看高清完整版| 亚洲自拍都市欧美小说| 美国十次了思思久久精品导航| 韩国av一区二区三区四区| 成人a免费在线看| 欧美精品vⅰdeose4hd| 久久久久青草大香线综合精品| 中文字幕av在线一区二区三区| 樱花草国产18久久久久| 美女视频黄免费的久久| 97精品国产97久久久久久久久久久久| 色悠悠久久综合| 欧美mv日韩mv国产网站| 一色屋精品亚洲香蕉网站| 奇米色一区二区| 国产精品资源网站| 91久久精品网| 国产日产欧产精品推荐色| 一二三四社区欧美黄| 国产剧情在线观看一区二区| 欧美日韩视频一区二区| 国产精品国产a级| 男男视频亚洲欧美| 色88888久久久久久影院按摩| 精品国产乱码久久久久久久久 | 欧美精品一区二区三区蜜桃 | 久久伊人中文字幕| 亚洲电影第三页| 99久久亚洲一区二区三区青草| 日韩视频免费观看高清完整版 | 亚洲啪啪综合av一区二区三区| 国产裸体歌舞团一区二区| 欧美日韩国产高清一区二区| 国产精品国产精品国产专区不蜜 | 综合婷婷亚洲小说| 国产精品中文字幕欧美| 日韩一区二区免费在线观看| 夜夜爽夜夜爽精品视频| 99国产精品视频免费观看| 国产精品天干天干在线综合| 精品一二三四在线| 欧美电影免费提供在线观看| 午夜精品久久久久久不卡8050| 91在线视频在线| 国产精品全国免费观看高清| 国产aⅴ综合色| 欧美经典三级视频一区二区三区| 国产一区二区三区不卡在线观看| 日韩亚洲国产中文字幕欧美| 奇米影视在线99精品| 欧美一区二区三区人| 日韩av一二三| 欧美成人激情免费网| 久久99精品国产.久久久久| 日韩视频免费观看高清完整版在线观看| 偷拍一区二区三区四区| 欧美一区二区三区视频在线| 久久精品国产成人一区二区三区 | 亚洲国产另类av| 欧美在线影院一区二区| 五月婷婷色综合| 欧美一区二区三区日韩| 久久国产精品99久久久久久老狼| 欧美精品一区男女天堂| 成人精品gif动图一区| 综合自拍亚洲综合图不卡区| 91片在线免费观看| 亚洲成av人片一区二区三区| 日韩一级二级三级| 国产高清亚洲一区| 国产精品视频第一区| 一本一本大道香蕉久在线精品| 亚洲aaa精品| 久久久一区二区三区捆绑**| av不卡在线播放| 亚洲444eee在线观看| 精品成人一区二区三区四区| 成人app在线| 玉米视频成人免费看| 欧美一区二区三区视频免费 | 欧美挠脚心视频网站| 国内精品视频666| 亚洲欧美视频在线观看视频| 制服丝袜av成人在线看| 国产精品亚洲第一区在线暖暖韩国| 亚洲美女视频一区| 26uuu亚洲婷婷狠狠天堂| 99精品视频在线免费观看| 视频一区视频二区在线观看| 欧美高清在线一区| 欧美日韩一区二区三区四区| 国产精品亚洲人在线观看| 一区二区三区在线观看动漫| 久久影院视频免费| 91精品在线一区二区| 99久久精品一区| 国产美女av一区二区三区| 一区二区三区在线影院| 国产色婷婷亚洲99精品小说| 91精品免费在线观看| 日本乱人伦一区| av福利精品导航| 国产成人av一区二区| 日本午夜一区二区| 亚洲一区中文在线| 国产精品乱码一区二三区小蝌蚪| 7799精品视频| 欧美色精品在线视频| 不卡的av电影在线观看| 国产精品一区二区三区四区| 日韩电影网1区2区| 亚洲福利视频一区| 亚洲精品va在线观看| 国产精品伦一区| 国产欧美一区二区精品婷婷 | 午夜激情综合网| 亚洲图片另类小说| 亚洲国产精品成人久久综合一区| 欧美一级午夜免费电影| 3d成人h动漫网站入口| 欧美综合一区二区三区| 日本久久精品电影| 色综合久久中文综合久久97| 99久久99久久久精品齐齐| 不卡视频在线看| kk眼镜猥琐国模调教系列一区二区| 国产老肥熟一区二区三区| 国产麻豆一精品一av一免费| 久久国产婷婷国产香蕉| 久久精品国产精品青草| 狠狠色丁香婷婷综合久久片| 国产一区二区三区高清播放| 韩国女主播一区| 国产一区二区三区久久久| 国产99久久久国产精品潘金网站| 99精品在线观看视频| 在线观看区一区二| 欧美日韩aaaaa| 日韩黄色免费电影| 蜜桃精品视频在线| 国产成人精品午夜视频免费| 国产原创一区二区| 成人av网站在线观看免费| 一本一道久久a久久精品综合蜜臀| 在线观看一区二区视频| 69堂成人精品免费视频| 精品国产网站在线观看| 久久久91精品国产一区二区精品 | 亚洲成人自拍偷拍| 日日摸夜夜添夜夜添亚洲女人| 免费成人结看片| 国产99一区视频免费| 91国在线观看| 欧美电视剧在线看免费| 中文在线一区二区| 国产精品理论片在线观看| 亚洲一区免费视频| 国产在线麻豆精品观看| 国产乱理伦片在线观看夜一区| 色综合久久久久网| 日韩欧美视频一区| **性色生活片久久毛片| 免费在线看成人av| 99久久精品情趣| 日韩欧美在线一区二区三区| 日本一区二区三区高清不卡| 亚洲成人免费看| 成人综合在线视频| 51精品国自产在线| 中文欧美字幕免费| 蜜臀久久99精品久久久画质超高清 | 一区二区三区在线视频免费 | 日韩三级av在线播放| 国产精品乱码一区二三区小蝌蚪| 五月天激情综合网| 不卡的av中国片| 久久只精品国产|