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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? faad2.cpp

?? the mpeg2/4 aac decoder
?? CPP
字號:
/*** MPEG4IP plugin for FAAD2** Copyright (C) 2003 Bill May wmay@cisco.com**** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License as published by** the Free Software Foundation; either version 2 of the License, or** (at your option) any later version.**** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the** GNU General Public License for more details.**** You should have received a copy of the GNU General Public License** along with this program; if not, write to the Free Software** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.**** $Id: faad2.cpp,v 1.3 2004/08/20 08:30:53 menno Exp $**/#include "faad2.h"#include <mpeg4_audio_config.h>#include <mpeg4_sdp.h>#include <mp4.h>#include <SDL/SDL.h>#define DEBUG_SYNC 2#ifndef M_LLU#define M_LLU M_64#define LLU U64#endifconst char *aaclib="faad2";/* * 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_audio_inited = 0;  // 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;    }  }  aac->m_info = faacDecOpen();  unsigned long srate;  unsigned char chan;  if ((userdata == NULL && fmtp == NULL) ||      (faacDecInit2(aac->m_info,             (uint8_t *)userdata,             userdata_size,            &srate,             &chan) < 0)) {      if (fmtp != NULL) free_fmtp_parse(fmtp);      return NULL;  }  mp4AudioSpecificConfig mp4ASC;  aac->m_output_frame_size = 1024;  if (AudioSpecificConfig((unsigned char *)userdata,              userdata_size,              &mp4ASC)) {    if (mp4ASC.frameLengthFlag) {      aac->m_output_frame_size = 960;    }  }  aac->m_freq = srate;  aac->m_chans = chan;  aac->m_faad_inited = 1;  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) {    return;  }  aac_codec_t *aac = (aac_codec_t *)ptr;  faacDecClose(aac->m_info);  aac->m_info = 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_ignore_first_sample = 0;  faacDecPostSeekReset(aac->m_info, 0);}/* * 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.     */    abort();    unsigned long freq;    unsigned char chans;    faacDecInit(aac->m_info,        (unsigned char *)buffer,        buflen,        &freq,        &chans);    aac->m_freq = freq;    aac->m_chans = chans;    aac->m_faad_inited = 1;  }  uint8_t *buff;  unsigned long samples;  bytes_consummed = buflen;  //aa_message(LOG_DEBUG, aaclib, "decoding %d bits", buflen * 8);  faacDecFrameInfo frame_info;  buff = (uint8_t *)faacDecDecode(aac->m_info,                  &frame_info,                  buffer,                  buflen);  if (buff != NULL) {    bytes_consummed = frame_info.bytesconsumed;#if 0    aa_message(LOG_DEBUG, aaclib, LLU" bytes %d samples %d",           ts, bytes_consummed, frame_info.samples);#endif    if (aac->m_audio_inited != 0) {      int tempchans = frame_info.channels;      if (tempchans != aac->m_chans) {    aa_message(LOG_NOTICE, aaclib, "chupdate - chans from data is %d",           tempchans);      }    } else {      int tempchans = frame_info.channels;      if (tempchans == 0) {    aa_message(LOG_ERR, aaclib, "initializing aac, returned channels are 0");    aac->m_resync_with_header = 1;    aac->m_record_sync_time = 1;    return bytes_consummed;      }      aac->m_chans = tempchans;      aac->m_freq = frame_info.samplerate;      aac->m_vft->audio_configure(aac->m_ifptr,                  aac->m_freq,                  aac->m_chans,                  (audio_format_t)AUDIO_S16SYS,                  aac->m_output_frame_size);      uint8_t *now = aac->m_vft->audio_get_buffer(aac->m_ifptr);      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    if (frame_info.samples != 0) {      aac->m_vft->audio_load_buffer(aac->m_ifptr,                    buff,                    frame_info.samples * 2,                    aac->m_last_ts,                    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      }    }  } else {    aa_message(LOG_ERR, aaclib, "error return is %d", frame_info.error);    aac->m_resync_with_header = 1;#ifdef DEBUG_SYNC    aa_message(LOG_ERR, aaclib, "Audio decode problem - at "LLU,           aac->m_current_time);#endif  }  aac->m_last_ts = aac->m_current_time;  return (bytes_consummed);}static const char *aac_compressors[] = {  "aac ",  "mp4a",  "enca",  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#ifdef HAVE_PLUGIN_VERSION_0_8              ,CConfigSet *pConfig#endif              ){  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);    message(LOG_DEBUG, "aac", "audio type is %d", audio_config.audio_object_type);    if (fmtp != NULL) free_fmtp_parse(fmtp);    if (audio_object_type_is_aac(&audio_config) == 0) {      return -1;    }#if 0    if (audio_config.audio_object_type == 17) {      message(LOG_INFO, "aac", "audio type is legal ISMA, but not supported");      return -1;    }#endif    return 2;  }#if 0  // I'm not sure I want to be here if we don't have an audio config  if (compressor != NULL) {    const char **lptr = aac_compressors;    while (*lptr != NULL) {      if (strcasecmp(*lptr, compressor) == 0) {    return 2;      }      lptr++;    }  }#endif  return -1;}#ifndef HAVE_PLUGIN_VERSION_0_8AUDIO_CODEC_WITH_RAW_FILE_PLUGIN("faad2",                 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               );#elseAUDIO_CODEC_WITH_RAW_FILE_PLUGIN("faad2",               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,               NULL,               0               );#endif/* end file aa.cpp */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级久久三级久久久| 日韩午夜av电影| 国产91精品免费| 国内精品免费**视频| 免费观看成人av| 麻豆精品新av中文字幕| 青青草国产精品亚洲专区无| 免费在线观看日韩欧美| 蜜臀av国产精品久久久久| 男女男精品视频网| 国产露脸91国语对白| 成人精品免费网站| 日本伦理一区二区| 欧美精品丝袜中出| 精品国产精品一区二区夜夜嗨| 欧美岛国在线观看| 国产欧美一区二区精品忘忧草 | 中文字幕一区二区三区不卡| 国产精品色婷婷久久58| 亚洲欧洲中文日韩久久av乱码| 综合欧美一区二区三区| 亚洲成人一区二区在线观看| 男女男精品视频| 国产成人在线电影| 日本久久电影网| 51精品视频一区二区三区| 久久综合av免费| 亚洲欧美精品午睡沙发| 裸体在线国模精品偷拍| 盗摄精品av一区二区三区| 欧美亚洲国产一区二区三区| 日韩欧美亚洲一区二区| 中文字幕一区二区三区在线观看| 香蕉久久一区二区不卡无毒影院| 九九九精品视频| 在线免费视频一区二区| 精品99久久久久久| 亚洲欧美日韩人成在线播放| 久久99最新地址| 色综合中文综合网| 日本大香伊一区二区三区| 欧美熟乱第一页| 亚洲精品一区二区三区四区高清| 亚洲欧美偷拍另类a∨色屁股| 美国毛片一区二区| 97精品久久久久中文字幕| 日韩欧美在线网站| 亚洲午夜久久久久久久久电影网 | 黄色小说综合网站| 色婷婷综合久久久中文一区二区| 精品精品国产高清a毛片牛牛| 亚洲精品视频在线观看网站| 国产精品一线二线三线| 制服丝袜亚洲精品中文字幕| 17c精品麻豆一区二区免费| 激情图片小说一区| 欧美日韩一区精品| 国产精品成人网| 国产高清久久久久| 欧美www视频| 蜜臂av日日欢夜夜爽一区| 91精品办公室少妇高潮对白| 国产精品情趣视频| 国产+成+人+亚洲欧洲自线| 精品国产网站在线观看| 日韩精品久久理论片| 欧美日韩精品一区视频| 亚洲一区二区三区三| 91浏览器打开| 日韩毛片一二三区| 91麻豆蜜桃一区二区三区| 国产精品青草久久| 99精品久久只有精品| 中文字幕在线观看一区| 99re在线精品| 亚洲免费视频中文字幕| 在线观看视频91| 亚洲一区在线观看网站| 欧美性受xxxx| 免费高清不卡av| 337p日本欧洲亚洲大胆精品| 狠狠色丁香婷婷综合| 国产午夜精品久久| 成人久久久精品乱码一区二区三区| 欧美国产在线观看| 99久久er热在这里只有精品15 | 日韩欧美激情四射| 国内久久婷婷综合| 国产精品三级电影| 日本高清无吗v一区| 午夜久久久久久| 日韩限制级电影在线观看| 国产一区二区三区美女| 国产精品欧美综合在线| 一本久久综合亚洲鲁鲁五月天 | 夜夜嗨av一区二区三区网页| 欧美亚洲国产一区在线观看网站| 丝袜脚交一区二区| 久久一夜天堂av一区二区三区| 粉嫩aⅴ一区二区三区四区| 亚洲精品乱码久久久久久| 欧美人xxxx| 国产91精品露脸国语对白| 亚洲乱码中文字幕| 日韩视频免费观看高清完整版在线观看 | 成人免费在线视频观看| 欧美日韩精品欧美日韩精品一综合| 日韩vs国产vs欧美| 欧美国产亚洲另类动漫| 欧美写真视频网站| 国产一区二区视频在线| 伊人婷婷欧美激情| 精品国产乱码久久久久久牛牛| a亚洲天堂av| 久久99精品久久久久久国产越南| 国产精品国产三级国产aⅴ入口 | 韩国女主播一区二区三区| 亚洲欧洲综合另类在线| 精品国精品国产| 欧美天天综合网| 福利一区在线观看| 日韩av一区二区三区| 国产精品久久福利| 3d成人h动漫网站入口| 成人一区二区三区在线观看| 天天做天天摸天天爽国产一区 | 亚洲欧洲中文日韩久久av乱码| 日韩精品一区国产麻豆| 91国在线观看| 成人激情小说乱人伦| 精彩视频一区二区三区| 天天操天天综合网| 亚洲欧美乱综合| 国产精品麻豆欧美日韩ww| 精品国产伦一区二区三区观看方式| 欧美综合在线视频| 99re这里只有精品首页| 丰满少妇在线播放bd日韩电影| 老司机免费视频一区二区| 亚洲第一狼人社区| 亚洲一区二区三区三| 亚洲乱码中文字幕| 亚洲色图色小说| 91香蕉视频mp4| 黑人精品欧美一区二区蜜桃 | 国产精品乱码一区二区三区软件| 在线亚洲一区观看| 99re这里只有精品首页| 粉嫩高潮美女一区二区三区| 国产美女精品一区二区三区| 蜜桃视频免费观看一区| 日韩国产一二三区| 亚洲成人福利片| 午夜精品久久久久久久| 午夜精品影院在线观看| 五月婷婷久久丁香| 日欧美一区二区| 美女看a上一区| 国产美女精品一区二区三区| 国产99一区视频免费| 风间由美一区二区三区在线观看 | 国产精品色噜噜| 国产精品电影一区二区| 中文字幕一区二区三中文字幕| 国产精品水嫩水嫩| 一区二区三区毛片| 日韩成人免费看| 狠狠色狠狠色综合| 成人国产在线观看| 色av成人天堂桃色av| 欧美人动与zoxxxx乱| 亚洲精品一线二线三线| 国产精品久久久久久久久免费丝袜| 国产精品国产三级国产| 亚洲国产综合色| 久久99久国产精品黄毛片色诱| 国产麻豆视频精品| 一本色道久久综合亚洲精品按摩| 欧美日韩一级片在线观看| 欧美不卡一区二区| 国产精品视频一二三| 亚洲国产欧美在线| 精品一区二区免费| 99热精品一区二区| 51久久夜色精品国产麻豆| 国产日韩精品一区二区三区在线| 一区二区在线观看视频 | av高清不卡在线| 欧美日本一区二区| 国产日韩影视精品| 亚洲地区一二三色| 懂色av一区二区在线播放| 欧美性生活一区| 中文字幕第一区综合| 日韩精品一卡二卡三卡四卡无卡| 国产成人精品一区二区三区四区| 欧美性色欧美a在线播放| 国产女主播视频一区二区| 婷婷综合五月天| 99综合影院在线|