📄 umc_mp4_spl_int.cpp
字号:
headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); info->m_audio_info.sample_frequency = GetSamplingFrequency(temp); if( !info->m_audio_info.sample_frequency ) { GetBits(&info->m_audio_info.sample_frequency, 24, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); } GetBits(&info->m_audio_info.channels, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); if ( info->m_audio_info.channels == 0 ) { GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // frameLengthFlag GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // dependsOnCoreCoder if ( temp ) { GetBits(&temp, 14, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // coreCoderDelay } GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // extensionFlag GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // element_instance_tag GetBits(&temp, 2, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // object_type GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // sampling_frequency_index GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // num_front_channel_elements info->m_audio_info.channels += temp; GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // num_side_channel_elements info->m_audio_info.channels += temp; GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // num_back_channel_elements info->m_audio_info.channels += temp; GetBits(&temp, 2, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // num_lfe_channel_elements info->m_audio_info.channels += temp; }// if ( info->m_audio_info.channels == 0 ) } // if ( headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfigLen )*/ else { info->m_audio_info.stream_type = ObjectIDType(headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.objectTypeID); info->m_audio_info.channels = headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->channels; info->m_audio_info.sample_frequency = headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->sample_rate; } switch(info->m_audio_info.channels) { { case 1: info->m_audio_info.channel_mask = CHANNEL_FRONT_CENTER; break; case 2: info->m_audio_info.channel_mask = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT; break; case 3: info->m_audio_info.channel_mask = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | CHANNEL_FRONT_CENTER; break; case 4: info->m_audio_info.channel_mask = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | CHANNEL_FRONT_CENTER | CHANNEL_TOP_CENTER; break; case 5: info->m_audio_info.channel_mask = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | CHANNEL_FRONT_CENTER | CHANNEL_BACK_LEFT | CHANNEL_BACK_RIGHT; break; case 6: info->m_audio_info.channel_mask = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | CHANNEL_FRONT_CENTER | CHANNEL_BACK_LEFT | CHANNEL_BACK_RIGHT | CHANNEL_LOW_FREQUENCY; break; case 7: info->m_audio_info.channel_mask = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | CHANNEL_FRONT_CENTER | CHANNEL_BACK_LEFT | CHANNEL_BACK_RIGHT | CHANNEL_LOW_FREQUENCY | CHANNEL_FRONT_LEFT_OF_CENTER | CHANNEL_FRONT_RIGHT_OF_CENTER; break; default: m_info.m_audio_info.channels = 0; break; } } info->m_audio_info.bitrate = headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.avgBitrate; info->m_audio_info.bitPerSample = 0; info->m_audio_info.duration = ((float)(vm_var64s)(headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.mdhd.duration) / (float)headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.mdhd.time_scale); //if any additional audio track if ( total_audio > 1 ) { for ( i = 0; i < total_audio; i++ ) { ptr = 0; if ( headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfigLen ) { GetBits(&temp, 5, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); info->m_audio_info_aux[i].stream_type = ObjectIDType(temp); GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); info->m_audio_info_aux[i].sample_frequency = GetSamplingFrequency(temp); if( !info->m_audio_info_aux[i].sample_frequency ) { GetBits(&info->m_audio_info_aux[i].sample_frequency, 24, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); } GetBits(&info->m_audio_info_aux[i].channels, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); if ( info->m_audio_info_aux[i].channels == 0 ) { GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // frameLengthFlag GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // dependsOnCoreCoder if ( temp ) { GetBits(&temp, 14, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // coreCoderDelay } GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // extensionFlag GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // element_instance_tag GetBits(&temp, 2, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // object_type GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // sampling_frequency_index GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // num_front_channel_elements info->m_audio_info_aux[i].channels += temp; GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // num_side_channel_elements info->m_audio_info_aux[i].channels += temp; GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // num_back_channel_elements info->m_audio_info_aux[i].channels += temp; GetBits(&temp, 2, &ptr, headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); // num_lfe_channel_elements info->m_audio_info_aux[i].channels += temp; } } else { info->m_audio_info_aux[i].stream_type = ObjectIDType(headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.objectTypeID); info->m_audio_info_aux[i].channels = headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->channels; info->m_audio_info_aux[i].sample_frequency = headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->sample_rate; } info->m_audio_info_aux[i].bitrate = headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.avgBitrate; info->m_audio_info_aux[i].bitPerSample = 0; info->m_audio_info_aux[i].duration = ((float)(vm_var64s)(headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.mdhd.duration) / (float)headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.mdhd.time_scale); } // for ( total_audio ) } // if ( total_audio > 1 ) info->m_audio_info.bitPerSample = 16; } // if ( total_audio ) info->m_splitter_flags = m_splitter_flags; info->m_system_info.stream_type = MP4_ATOM_STREAM; return UMC_OK;}sInfo_sample SplitterMP4::GetSamplePositionAudio(vm_var32 track_idx, vm_var32 nsample){ sInfo_sample temp; if ( (track_idx >= total_audio) ) { temp.position = -1; temp.size = -1; } int id_trak = buferAD[track_idx].buf->idTrak; if ( nsample > headerMPEG4.moov.trak[id_trak]->mdia.minf.stbl.stsz.total_entries ) { temp.position = -1; temp.size = -1; } temp.position = (int)FindPosOfSamples(&headerMPEG4, nsample, id_trak); if (headerMPEG4.moov.trak[id_trak]->mdia.minf.stbl.stsz.sample_size) { temp.size = headerMPEG4.moov.trak[id_trak]->mdia.minf.stbl.stsz.sample_size; } else { temp.size = headerMPEG4.moov.trak[id_trak]->mdia.minf.stbl.stsz.table[nsample].size; } return temp;}sInfo_sample SplitterMP4::GetSamplePositionVideo(vm_var32 track_idx, vm_var32 nsample){ sInfo_sample temp; nsample -= 2; if ( (track_idx >= total_audio) ) { temp.position = -1; temp.size = -1; } int id_trak = buferVC[track_idx].buf->idTrak; if ( nsample > headerMPEG4.moov.trak[id_trak]->mdia.minf.stbl.stsz.total_entries ) { temp.position = -1; temp.size = -1; } temp.position = (int)FindPosOfSamples(&headerMPEG4, nsample, id_trak);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -