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

📄 interf_dec.c

📁 mpeg4 video codec mpeg4 video codec
💻 C
📖 第 1 页 / 共 2 页
字号:
         if ( *stream & 0x1 )            param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) );         mask += 2;         if ( j % 8 )            *stream >>= 1;         else            stream++;      }      *frame_type = RX_SPEECH_GOOD;   }   else if ( mode == MR59 ) {      mask = order_MR59;      for ( j = 5; j < 123; j++ ) {         if ( *stream & 0x1 )            param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) );         mask += 2;         if ( j % 8 )            *stream >>= 1;         else            stream++;      }      *frame_type = RX_SPEECH_GOOD;   }   else if ( mode == MR67 ) {      mask = order_MR67;      for ( j = 5; j < 139; j++ ) {         if ( *stream & 0x1 )            param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) );         mask += 2;         if ( j % 8 )            *stream >>= 1;         else            stream++;      }      *frame_type = RX_SPEECH_GOOD;   }   else if ( mode == MR74 ) {      mask = order_MR74;      for ( j = 5; j < 153; j++ ) {         if ( *stream & 0x1 )            param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) );         mask += 2;         if ( j % 8 )            *stream >>= 1;         else            stream++;      }      *frame_type = RX_SPEECH_GOOD;   }   else if ( mode == MR795 ) {      mask = order_MR795;      for ( j = 5; j < 164; j++ ) {         if ( *stream & 0x1 )            param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) );         mask += 2;         if ( j % 8 )            *stream >>= 1;         else            stream++;      }      *frame_type = RX_SPEECH_GOOD;   }   else if ( mode == MR102 ) {      mask = order_MR102;      for ( j = 5; j < 209; j++ ) {         if ( *stream & 0x1 )            param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) );         mask += 2;         if ( j % 8 )            *stream >>= 1;         else            stream++;      }      *frame_type = RX_SPEECH_GOOD;   }   else if ( mode == MR122 ) {      mask = order_MR122;      for ( j = 5; j < 249; j++ ) {         if ( *stream & 0x1 )            param[ * mask] = ( short )( param[ * mask] + *( mask + 1 ) );         mask += 2;         if ( j % 8 )            *stream >>= 1;         else            stream++;      }      *frame_type = RX_SPEECH_GOOD;   }   else      *frame_type = RX_SPEECH_BAD;   return mode;}#endif#endif/* * Decoder_Interface_reset * * * Parameters: *    st                O: state struct * * Function: *    Reset homing frame counter * * Returns: *    void */void Decoder_Interface_reset( dec_interface_State *st ){   st->reset_flag_old = 1;   st->prev_ft = RX_SPEECH_GOOD;   st->prev_mode = MR475;   /* minimum bitrate */}/* * Decoder_Interface_init * * * Parameters: *    void * * Function: *    Allocates state memory and initializes state memory * * Returns: *    success           : pointer to structure *    failure           : NULL */void * Decoder_Interface_init( void ){   dec_interface_State * s;   /* allocate memory */   if ( ( s = ( dec_interface_State * ) malloc( sizeof( dec_interface_State ) ) ) ==         NULL ) {      fprintf( stderr, "Decoder_Interface_init: "            "can not malloc state structure\n" );      return NULL;   }   s->decoder_State = Speech_Decode_Frame_init( );   if ( s->decoder_State == NULL ) {      free( s );      return NULL;   }   Decoder_Interface_reset( s );   return s;}/* * Decoder_Interface_exit * * * Parameters: *    state                I: state structure * * Function: *    The memory used for state memory is freed * * Returns: *    Void */void Decoder_Interface_exit( void *state ){   dec_interface_State * s;   s = ( dec_interface_State * )state;   /* free memory */   Speech_Decode_Frame_exit(s->decoder_State );   free( s );   s = NULL;   state = NULL;}/* * Decoder_Interface_Decode * * * Parameters: *    st                B: state structure *    bits              I: bit stream *    synth             O: synthesized speech *    bfi               I: bad frame indicator * * Function: *    Decode bit stream to synthesized speech * * Returns: *    Void */void Decoder_Interface_Decode( void *st,#ifndef ETSI      UWord8 *bits,#else      Word16 *bits,#endif      Word16 *synth, int bfi){   enum Mode mode;   /* AMR mode */#ifndef ETSI   enum Mode speech_mode = MR475;   /* speech mode */#endif   Word16 prm[PRMNO_MR122];   /* AMR parameters */   enum RXFrameType frame_type;   /* frame type */   dec_interface_State * s;   /* pointer to structure */   const Word16 *homing;   /* pointer to homing frame */   Word16 homingSize;   /* frame size for homing frame */   Word32 i;   /* counter */   Word32 resetFlag = 1;   /* homing frame */#ifndef ETSI#ifndef IF2   Word16 q_bit;#endif#endif   s = ( dec_interface_State * )st;#ifndef ETSI   /*    * extract mode information and frametype,    * octets to parameters    */#ifdef IF2   mode = Decoder3GPP( prm, bits, &frame_type, &speech_mode );#else   mode = DecoderMMS( prm, bits, &frame_type, &speech_mode, &q_bit );   if (!bfi)	bfi = 1 - q_bit;#endif   /*    * if no mode information    * guess one from the previous frame    */   if ( frame_type == RX_SPEECH_BAD ) {      if ( s->prev_ft > 3 ) {         frame_type = RX_SID_BAD;         mode = MRDTX;      }      else {         mode = s->prev_mode;      }   }   else if ( frame_type == RX_NO_DATA ) {      mode = s->prev_mode;   }   if ( bfi == 1 ) {      if ( mode < 8 ) {         frame_type = RX_SPEECH_BAD;      }      else if ( mode != 15 ) {         frame_type = RX_SID_BAD;      }   }#else   bfi = 0;   frame_type = bits[0];   switch ( frame_type ) {      case 0:         frame_type = RX_SPEECH_GOOD;         mode = bits[245];         Bits2Prm( mode, &bits[1], prm );         break;      case 1:         frame_type = RX_SID_FIRST;         mode = s->prev_mode;         break;      case 2:         frame_type = RX_SID_UPDATE;         mode = s->prev_mode;         Bits2Prm( MRDTX, &bits[1], prm );         break;      case 3:         frame_type = RX_NO_DATA;         mode = s->prev_mode;         break;   }#endif   /* test for homing frame */   if ( s->reset_flag_old == 1 ) {      switch ( mode ) {         case MR122:            homing = dhf_MR122;            homingSize = 18;            break;         case MR102:            homing = dhf_MR102;            homingSize = 12;            break;         case MR795:            homing = dhf_MR795;            homingSize = 8;            break;         case MR74:            homing = dhf_MR74;            homingSize = 7;            break;         case MR67:            homing = dhf_MR67;            homingSize = 7;            break;         case MR59:            homing = dhf_MR59;            homingSize = 7;            break;         case MR515:            homing = dhf_MR515;            homingSize = 7;            break;         case MR475:            homing = dhf_MR475;            homingSize = 7;            break;         default:            homing = NULL;            homingSize = 0;            break;      }      for ( i = 0; i < homingSize; i++ ) {         resetFlag = prm[i] ^ homing[i];         if ( resetFlag )            break;      }   }   if ( ( resetFlag == 0 ) && ( s->reset_flag_old != 0 ) ) {      for ( i = 0; i < 160; i++ ) {         synth[i] = EHF_MASK;      }   }   else      Speech_Decode_Frame( s->decoder_State, mode, prm, frame_type, synth );   if ( s->reset_flag_old == 0 ) {      /* check whole frame */      switch ( mode ) {         case MR122:            homing = dhf_MR122;            homingSize = PRMNO_MR122;            break;         case MR102:            homing = dhf_MR102;            homingSize = PRMNO_MR102;            break;         case MR795:            homing = dhf_MR795;            homingSize = PRMNO_MR795;            break;         case MR74:            homing = dhf_MR74;            homingSize = PRMNO_MR74;            break;         case MR67:            homing = dhf_MR67;            homingSize = PRMNO_MR67;            break;         case MR59:            homing = dhf_MR59;            homingSize = PRMNO_MR59;            break;         case MR515:            homing = dhf_MR515;            homingSize = PRMNO_MR515;            break;         case MR475:            homing = dhf_MR475;            homingSize = PRMNO_MR475;            break;         default:            homing = NULL;            homingSize = 0;      }      for ( i = 0; i < homingSize; i++ ) {         resetFlag = prm[i] ^ homing[i];         if ( resetFlag )            break;      }   }   /* reset decoder if current frame is a homing frame */   if ( resetFlag == 0 ) {      Speech_Decode_Frame_reset( s->decoder_State );   }   s->reset_flag_old = !resetFlag;   s->prev_ft = frame_type;   s->prev_mode = mode;}

⌨️ 快捷键说明

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