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

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

?? aac.cpp

?? jpeg and mpeg 編解碼技術(shù)源代碼
?? 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 2

const char *aaclib="aac";

/*
 * Create CAACodec class
 */
static codec_data_t *aac_codec_create (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 */


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费版pro下载短视频| 亚洲第一av色| 国产精品一区二区久久精品爱涩| 91精品国产色综合久久不卡蜜臀 | 激情综合一区二区三区| 欧美成人aa大片| 国产成人综合在线观看| 国产精品久久综合| 91色porny| 奇米色777欧美一区二区| 欧美va亚洲va香蕉在线| 成人综合激情网| 亚洲精品国产高清久久伦理二区| 欧美体内she精高潮| 久久99精品国产.久久久久| 久久综合999| 色综合亚洲欧洲| 视频一区二区三区在线| 精品处破学生在线二十三| 成人午夜视频免费看| 亚洲精品成a人| 欧美电影免费观看高清完整版| 国产精品99久久久久久久vr | 亚洲一二三区在线观看| 日韩视频一区二区三区| 成人v精品蜜桃久久一区| 天天亚洲美女在线视频| 久久婷婷综合激情| 欧美做爰猛烈大尺度电影无法无天| 丝袜a∨在线一区二区三区不卡| 国产午夜精品理论片a级大结局| 91美女片黄在线观看| 九九国产精品视频| 一区二区三区四区亚洲| 久久综合狠狠综合久久激情 | 精品一区二区三区视频在线观看 | 欧美在线一区二区三区| 寂寞少妇一区二区三区| 一区二区视频在线| 久久天天做天天爱综合色| 欧美在线啊v一区| 国产福利不卡视频| 日韩av在线播放中文字幕| 国产精品美女久久久久久久| 日韩免费视频一区二区| 欧美亚洲综合久久| 91亚洲精品久久久蜜桃| 国产精品一区二区在线播放| 日韩国产欧美在线播放| 国产精品欧美一区喷水| 日韩美女天天操| 欧美性视频一区二区三区| 成人免费毛片高清视频| 国产精品一级二级三级| 日本一区中文字幕| 午夜欧美大尺度福利影院在线看| 中文字幕一区不卡| 国产欧美一二三区| 精品成人在线观看| 日韩一级免费观看| 欧美欧美欧美欧美首页| 色哟哟国产精品免费观看| 99精品国产热久久91蜜凸| 风流少妇一区二区| 高清在线不卡av| 国产精品资源网站| 国产美女主播视频一区| 精品亚洲porn| 国产一区二区三区免费播放| 蜜臀99久久精品久久久久久软件| 日本伊人精品一区二区三区观看方式| 亚洲国产日日夜夜| 亚洲午夜免费福利视频| 一区二区三区在线观看动漫| 一区二区三区加勒比av| 亚洲精品国产a久久久久久| 中文字幕永久在线不卡| 中文字幕一区二区三区蜜月| 国产日产欧产精品推荐色| 国产亚洲精品资源在线26u| 欧美精品一区二区三区很污很色的| 日韩精品一区二区三区四区视频 | 激情六月婷婷综合| 国产乱对白刺激视频不卡| 国产一区91精品张津瑜| 国产激情一区二区三区桃花岛亚洲| 国产乱一区二区| av在线不卡免费看| 99久久综合狠狠综合久久| 97精品电影院| 欧美精品第1页| 欧美成人猛片aaaaaaa| 久久久精品影视| 国产精品久久久久久久第一福利| 亚洲欧洲日韩一区二区三区| 亚洲免费观看高清完整版在线 | 波多野结衣的一区二区三区| 99riav久久精品riav| 欧美日韩色一区| 久久这里只有精品首页| 国产精品免费久久| 午夜精品久久久久久久蜜桃app| 日韩精品乱码免费| 国产馆精品极品| 在线视频一区二区三| 欧美精品电影在线播放| 国产色产综合色产在线视频 | 婷婷国产v国产偷v亚洲高清| 麻豆91在线看| 99久久综合狠狠综合久久| 欧美精品v国产精品v日韩精品 | 国产精品三级在线观看| 夜夜嗨av一区二区三区网页| 免费久久99精品国产| 成人av免费在线观看| 欧美卡1卡2卡| 欧美高清在线精品一区| 亚洲国产精品久久人人爱| 国产主播一区二区三区| 在线免费观看日韩欧美| 26uuu色噜噜精品一区二区| 亚洲精品久久久蜜桃| 国内外成人在线| 欧美日韩精品一区二区三区蜜桃 | 2023国产精品视频| 亚洲欧美色一区| 国产麻豆精品theporn| 欧美性色黄大片手机版| 久久久精品人体av艺术| 午夜影院久久久| 波多野结衣亚洲| 久久精品无码一区二区三区| 亚洲成人精品一区| 成人avav在线| 精品国产免费一区二区三区四区| 亚洲精品乱码久久久久久久久 | 亚洲精品中文字幕在线观看| 国产乱人伦精品一区二区在线观看| 欧美三级乱人伦电影| 国产精品色婷婷| 精一区二区三区| 3d动漫精品啪啪| 亚洲午夜久久久久| 色悠久久久久综合欧美99| 国产精品拍天天在线| 国产一区二区调教| 日韩欧美一区在线观看| 亚洲国产精品精华液网站| 色婷婷亚洲综合| 最新热久久免费视频| 国产91高潮流白浆在线麻豆| 久久综合丝袜日本网| 麻豆精品久久精品色综合| 在线观看91av| 午夜精品一区二区三区电影天堂| 欧洲精品中文字幕| 亚洲精品国产第一综合99久久| 99精品视频在线观看| 国产精品女上位| 不卡高清视频专区| 国产精品天干天干在线综合| 国产在线精品国自产拍免费| 精品国产伦一区二区三区免费| 免费观看久久久4p| 欧美一级高清片| 麻豆一区二区三| 精品国产1区2区3区| 免费av成人在线| 337p日本欧洲亚洲大胆精品 | 成人午夜电影久久影院| 久久久久久久久99精品| 国产精品一区一区三区| 久久久亚洲国产美女国产盗摄| 国产二区国产一区在线观看| 久久影院午夜论| 成人久久18免费网站麻豆 | 国产.精品.日韩.另类.中文.在线.播放| www国产亚洲精品久久麻豆| 国产精品一区二区三区99| 中文久久乱码一区二区| av一区二区三区黑人| 亚洲男同1069视频| 欧美久久高跟鞋激| 国内精品嫩模私拍在线| 欧美激情一区二区三区全黄 | 国产一区二区三区久久悠悠色av| 国产亚洲美州欧州综合国| 白白色 亚洲乱淫| 亚洲一二三四在线| 欧美刺激脚交jootjob| 国产精品自拍毛片| 亚洲黄网站在线观看| 欧美剧情片在线观看| 国产伦精品一区二区三区免费迷| 中文字幕一区av| 制服丝袜亚洲色图| 国产成人综合精品三级| 亚洲精品日韩一| 欧美一区二区在线不卡| 成人自拍视频在线|