⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp4_producer_audio.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 4 页
字号:
         return MP4_PRODUCER_FILE_WRITE_ERROR;
      *puBoxSize += 2;
   }

   /* reserved */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 2;

   /* matrix */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0x00010000))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0x00010000))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0x40000000))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 36;

   /* XXX: width */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0x0))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 4;

   /* XXX: height */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0x0))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 4;

   /* update box size */
  	if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT_AT(pstMp4Producer->pstFSAL, *puBoxSize, uFilePos))!=FSAL_OK)
		return MP4_PRODUCER_FILE_WRITE_ERROR;

   return MP4_PRODUCER_OK;
}



MP4_Producer_Status mp4_produce_mdhd(STMp4Producer *pstMp4Producer, kal_uint32 *puBoxSize)
{
   MP4_Producer_Status ret;
   kal_uint32 uFilePos;

   MP4_PRODUCER_CHECK_ARG(pstMp4Producer!=NULL);
   MP4_PRODUCER_CHECK_ARG(puBoxSize!=NULL);

   /* header */
   if((ret=mp4_produce_fullbox(pstMp4Producer, BOX_TYPE_MDHD, 0, 0, 0, &uFilePos))!=MP4_PRODUCER_OK)
      return ret;
   *puBoxSize = 12;

   /* creation time */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 4;

   /* modification time */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 4;

   /* time scale (audio: 8000Hz) */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 8000))!=FSAL_OK)
	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 4;

   /* duration (audio) */
   {
      kal_uint32 uSampleCount;
      MP4_SAMPLE_DATA_GET_AUDIO_SAMPLE_COUNT(uSampleCount);
      if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, uSampleCount*160))!=FSAL_OK)
   	   return MP4_PRODUCER_FILE_WRITE_ERROR;
      *puBoxSize += 4;
   }

   /* language */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 0x15C7))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 2;

   /* predefined */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 2;


   /* update box size */
  	if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT_AT(pstMp4Producer->pstFSAL, *puBoxSize, uFilePos))!=FSAL_OK)
		return MP4_PRODUCER_FILE_WRITE_ERROR;

   return MP4_PRODUCER_OK;
}




MP4_Producer_Status mp4_produce_hdlr(STMp4Producer *pstMp4Producer, kal_uint32 *puBoxSize)
{
   MP4_Producer_Status ret;
   kal_uint32 uFilePos;

   MP4_PRODUCER_CHECK_ARG(pstMp4Producer!=NULL);
   MP4_PRODUCER_CHECK_ARG(puBoxSize!=NULL);

   /* header */
   if((ret=mp4_produce_fullbox(pstMp4Producer, BOX_TYPE_HDLR, 0, 0, 0, &uFilePos))!=MP4_PRODUCER_OK)
      return ret;
   *puBoxSize = 12;

   /* predefined */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
 	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 4;

   /* XXX: handler_type */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, HDLR_TYPE_SOUN))!=FSAL_OK)
 	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 4;

   /* reserved */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
 	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
 	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
 	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 12;

   /* string */
   {
      kal_uint8 pBuf[] = "MTK Sound Handler";

   	if ((pstMp4Producer->eFSALErr=FSAL_Write_Bytes(pstMp4Producer->pstFSAL, pBuf, 18))!=FSAL_OK)
		   return MP4_PRODUCER_FILE_WRITE_ERROR;

      *puBoxSize += 18;
   }

   /* update box size */
  	if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT_AT(pstMp4Producer->pstFSAL, *puBoxSize, uFilePos))!=FSAL_OK)
		return MP4_PRODUCER_FILE_WRITE_ERROR;

   return MP4_PRODUCER_OK;
}



MP4_Producer_Status mp4_produce_url(STMp4Producer *pstMp4Producer, kal_uint32 *puBoxSize)
{
   MP4_Producer_Status ret;
   kal_uint32 uFilePos;

   MP4_PRODUCER_CHECK_ARG(pstMp4Producer!=NULL);
   MP4_PRODUCER_CHECK_ARG(puBoxSize!=NULL);

   /* header */
   if((ret=mp4_produce_fullbox(pstMp4Producer, BOX_TYPE_URL, 0, 0, 1, &uFilePos))!=MP4_PRODUCER_OK)
      return ret;
   *puBoxSize = 12;

   /* update box size */
  	if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT_AT(pstMp4Producer->pstFSAL, *puBoxSize, uFilePos))!=FSAL_OK)
		return MP4_PRODUCER_FILE_WRITE_ERROR;

   return MP4_PRODUCER_OK;
}

MP4_Producer_Status mp4_produce_dref(STMp4Producer *pstMp4Producer, kal_uint32 *puBoxSize)
{
   MP4_Producer_Status ret;
   kal_uint32 uFilePos;
   kal_uint32 uUrlSize;

   MP4_PRODUCER_CHECK_ARG(pstMp4Producer!=NULL);
   MP4_PRODUCER_CHECK_ARG(puBoxSize!=NULL);

   /* header */
   if((ret=mp4_produce_fullbox(pstMp4Producer, BOX_TYPE_DREF, 0, 0, 0, &uFilePos))!=MP4_PRODUCER_OK)
      return ret;
   *puBoxSize = 12;

   /* entry count */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 1))!=FSAL_OK)
 	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 4;

   /* data entry box */
   if((ret=mp4_produce_url(pstMp4Producer, &uUrlSize))!=MP4_PRODUCER_OK)
      return ret;
   *puBoxSize += uUrlSize;

   /* update box size */
  	if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT_AT(pstMp4Producer->pstFSAL, *puBoxSize, uFilePos))!=FSAL_OK)
		return MP4_PRODUCER_FILE_WRITE_ERROR;

   return MP4_PRODUCER_OK;
}



MP4_Producer_Status mp4_produce_dinf(STMp4Producer *pstMp4Producer, kal_uint32 *puBoxSize)
{
   MP4_Producer_Status ret;
   kal_uint32 uFilePos;
   kal_uint32 uDrefSize;

   MP4_PRODUCER_CHECK_ARG(pstMp4Producer!=NULL);
   MP4_PRODUCER_CHECK_ARG(puBoxSize!=NULL);

   /* header */
   if((ret=mp4_produce_box(pstMp4Producer, BOX_TYPE_DINF, 0, &uFilePos))!=MP4_PRODUCER_OK)
      return ret;
   *puBoxSize = 8;

   /* data information */
   if((ret=mp4_produce_dref(pstMp4Producer, &uDrefSize))!=MP4_PRODUCER_OK)
      return ret;
   *puBoxSize += uDrefSize;

   /* update box size */
  	if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT_AT(pstMp4Producer->pstFSAL, *puBoxSize, uFilePos))!=FSAL_OK)
		return MP4_PRODUCER_FILE_WRITE_ERROR;

   return MP4_PRODUCER_OK;
}



static MP4_Producer_Status mp4_produce_damr(STMp4Producer *pstMp4Producer, kal_uint32 *puBoxSize)
{
   MP4_Producer_Status ret;
   kal_uint32 uFilePos;

   MP4_PRODUCER_CHECK_ARG(pstMp4Producer!=NULL);
   MP4_PRODUCER_CHECK_ARG(puBoxSize!=NULL);

   /* header */
   if((ret=mp4_produce_box(pstMp4Producer, BOX_TYPE_DAMR, 0, &uFilePos))!=MP4_PRODUCER_OK)
      return ret;
   *puBoxSize = 8;

   /* AMR Decoder Specific Structure */

   /* vendor */
   {
      kal_uint8 pBuf[] = "MTK ";

	   if ((pstMp4Producer->eFSALErr=FSAL_Write_Bytes(pstMp4Producer->pstFSAL, pBuf, 4))!=FSAL_OK)
		   return MP4_PRODUCER_FILE_WRITE_ERROR;

      *puBoxSize += 4;
   }

   /* decoder version */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT8(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 1;

   /* mode_set */
   {
      MP4_Audio_Type eAudioType;
      kal_uint16 wModeSet;
      eAudioType = MP4_AudioSampleData_GetAudioType(pstMp4Producer->pstMp4SampleData);
      if (MP4_AUDIO_AMR == eAudioType) {
         wModeSet = 0x81FF;
      } else if (MP4_AUDIO_AMR_WB == eAudioType) {
         wModeSet = 0x83FF;
      } else {
         return MP4_PRODUCER_SAMPLE_DATA_AUDIO_TYPE_ERROR;
      }
      if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 0x81FF))!=FSAL_OK)
         return MP4_PRODUCER_FILE_WRITE_ERROR;
      *puBoxSize += 2;
   }

   /* mode change period */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT8(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 1;

   /* frame per sample */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT8(pstMp4Producer->pstFSAL, 1))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 1;

   /* update box size */
  	if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT_AT(pstMp4Producer->pstFSAL, *puBoxSize, uFilePos))!=FSAL_OK)
		return MP4_PRODUCER_FILE_WRITE_ERROR;

   return MP4_PRODUCER_OK;
}



static MP4_Producer_Status mp4_produce_samr(STMp4Producer *pstMp4Producer, kal_uint32 *puBoxSize)
{
   MP4_Producer_Status ret;
   kal_uint32 uFilePos;
   kal_uint32 uDamrSize;

   MP4_PRODUCER_CHECK_ARG(pstMp4Producer!=NULL);
   MP4_PRODUCER_CHECK_ARG(puBoxSize!=NULL);

   /* header */
   {
      kal_uint32 uBoxType;
      MP4_Audio_Type eAudioType;
      eAudioType = MP4_AudioSampleData_GetAudioType(pstMp4Producer->pstMp4SampleData);
      if (MP4_AUDIO_AMR == eAudioType) {
         uBoxType = SAMPLE_FMT_SAMR;
      } else if (MP4_AUDIO_AMR_WB == eAudioType) {
         uBoxType = SAMPLE_FMT_SAWB;
      } else {
         return MP4_PRODUCER_SAMPLE_DATA_AUDIO_TYPE_ERROR;
      }
      if((ret=mp4_produce_box(pstMp4Producer, uBoxType, 0, &uFilePos))!=MP4_PRODUCER_OK)
         return ret;
      *puBoxSize = 8;
   }

   /* reserved */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
 	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 6;

   /* data reference index */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 1))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 2;

   /* reserved */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
 	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
 	   return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 8;

   /* channel count = 2 */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 2))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 2;

   /* sample size = 16 */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 16))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 2;

   /* predefined */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 2;

   /* reserved */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 2;

   /* time scale (audio) */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 8000))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 2;

   /* reserved */
   if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT16(pstMp4Producer->pstFSAL, 0))!=FSAL_OK)
      return MP4_PRODUCER_FILE_WRITE_ERROR;
   *puBoxSize += 2;

   /* AMR Specific Box */
   if((ret=mp4_produce_damr(pstMp4Producer, &uDamrSize))!=MP4_PRODUCER_OK)
      return ret;
   *puBoxSize += uDamrSize;

   /* update box size */
  	if ((pstMp4Producer->eFSALErr=FSAL_Write_UINT_AT(pstMp4Producer->pstFSAL, *puBoxSize, uFilePos))!=FSAL_OK)
		return MP4_PRODUCER_FILE_WRITE_ERROR;

   return MP4_PRODUCER_OK;
}



MP4_Producer_Status mp4_produce_stsd(STMp4Producer *pstMp4Producer, kal_uint32 *puBoxSize)
{
   MP4_Producer_Status ret;
   kal_uint32 uFilePos;
   kal_uint32 uSampleSize;

   MP4_PRODUCER_CHECK_ARG(pstMp4Producer!=NULL);
   MP4_PRODUCER_CHECK_ARG(puBoxSize!=NULL);

   /* header */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -