📄 umc_mp4_spl_int.cpp
字号:
&ptr, headerMPEG4.moov.trak[buferVC[0].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); GetBits(&info->m_video_info.clip_info.width, 13, &ptr, headerMPEG4.moov.trak[buferVC[0].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferVC[0].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); GetBits(&info->m_video_info.clip_info.height, 13, &ptr, headerMPEG4.moov.trak[buferVC[0].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); }// if break; }// if }// if }// if }// if }// for if ( info->m_video_info.clip_info.width == -1 ) { info->m_video_info.clip_info.width = (int)headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->width; info->m_video_info.clip_info.height = (int)headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->height; } info->m_video_info.bitrate = headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.avgBitrate; info->m_video_info.duration = ((float)(vm_var64s)(headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.mdhd.duration) / (float)headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.mdhd.time_scale); info->m_video_info.framerate = (headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsz.total_entries) / info->m_video_info.duration; switch ( headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.objectTypeID ) { case 0x00: info->m_video_info.stream_type = UMC::UNDEF_VIDEO; break; case 0x6a: info->m_video_info.stream_type = UMC::MPEG1_VIDEO; break; case 0x60: case 0x61: case 0x62: info->m_video_info.stream_type = UMC::MPEG2_VIDEO; break; case 0x20: info->m_video_info.stream_type = UMC::MPEG4_VIDEO; info->m_video_info.stream_subtype = UMC::MPEG4_VIDEO_QTIME; break; case 0xf1: info->m_video_info.stream_type = UMC::H264_VIDEO; break; case 0xf2: info->m_video_info.stream_type = UMC::H263_VIDEO; break; case 0xf3: info->m_video_info.stream_type = UMC::H261_VIDEO; break; default: info->m_video_info.stream_type = UMC::UNDEF_VIDEO; break; } //if any additional video track if ( total_video > 1 ) { for ( i = 0; i < total_video; i++ ) { info->m_video_info.clip_info.width = -1; // find start code VideoObjectLayer and parse width and height for ( j = 0; j < headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfigLen; j++ ) { if ( headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig[j] == 0x00 ) { if ( headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig[j + 1] == 0x00 ) { if ( headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig[j + 2] == 0x01 ) { if ( (headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig[j + 3] >= 0x20) && (headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig[j + 3] <= 0x2f) ) { ptr = 8 * (j + 4); GetBits(&temp, 9, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); if ( temp ) { GetBits(&temp, 7, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); } GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); if ( temp == 15 ) { GetBits(&temp, 18, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); } GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); if ( temp ) { GetBits(&temp, 3, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); if ( temp ) { GetBits(&temp, 79, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); } } GetBits(&video_object_layer_shape, 2, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); if ( temp == 3 ) { GetBits(&temp, 4, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); } GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); GetBits(&temp, 16, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); temp = temp - 1; for ( k = 1; k <= 16; k ++ ) { temp >>= 1; if ( temp == 0 ) { break; } } GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); if ( temp ) { GetBits(&temp, k, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); } if ( video_object_layer_shape == 0 ) { GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); GetBits(&info->m_video_info_aux[i].clip_info.width, 13, &ptr, headerMPEG4.moov.trak[buferVC[0].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); GetBits(&temp, 1, &ptr, headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); GetBits(&info->m_video_info_aux[i].clip_info.height, 13, &ptr, headerMPEG4.moov.trak[buferVC[0].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig); }// if break; }// if }// if }// if }// if } // for if ( info->m_video_info_aux[i].clip_info.width == -1 ) { info->m_video_info_aux[i].clip_info.width = (int)headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->width; info->m_video_info_aux[i].clip_info.height = (int)headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->height; } info->m_video_info_aux[i].bitrate = headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.avgBitrate; info->m_video_info_aux[i].duration = ((float)(vm_var64s)(headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.mdhd.duration) / (float)headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.mdhd.time_scale); info->m_video_info_aux[i].framerate = (headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsz.total_entries) / info->m_video_info_aux[i].duration; switch ( headerMPEG4.moov.trak[buferVC[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.objectTypeID ) { case 0x00: info->m_video_info_aux[i].stream_type = UMC::UNDEF_VIDEO; break; case 0x6a: info->m_video_info_aux[i].stream_type = UMC::MPEG1_VIDEO; break; case 0x60: case 0x61: case 0x62: info->m_video_info_aux[i].stream_type = UMC::MPEG2_VIDEO; break; case 0x20: info->m_video_info_aux[i].stream_type = UMC::MPEG4_VIDEO; info->m_video_info_aux[i].stream_subtype = UMC::MPEG4_VIDEO_QTIME; break; case 0xf1: info->m_video_info_aux[i].stream_type = UMC::H264_VIDEO; break; case 0xf2: info->m_video_info_aux[i].stream_type = UMC::H263_VIDEO; break; case 0xf3: info->m_video_info_aux[i].stream_type = UMC::H261_VIDEO; break; default: info->m_video_info_aux[i].stream_type = UMC::UNDEF_VIDEO; break; }// switch }// for }// if }// if if ( (total_audio > 0) && (m_splitter_flags & AUDIO_SPLITTER) ) { info->number_audio_tracks = total_audio;// info->m_audio_info.stream_type_ex = AAC_FMT_RAW; if( total_audio > 1 ) { if( info->m_audio_info_aux ) { ippsFree(info->m_audio_info_aux); } unsigned int buff_size = total_audio * sizeof(sAudioStreamInfo); info->m_audio_info_aux = (sAudioStreamInfo*)ippsMalloc_8u(buff_size); memset(info->m_audio_info_aux, 0, buff_size); } //zero audio and video track info ptr = 0; i = 0; if ( headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfigLen ) { bs.nBit_offset = 32; bs.pCurrent_dword = bs.pBuffer = (unsigned int*) headerMPEG4.moov.trak[buferAD[i].buf->idTrak]->mdia.minf.stbl.stsd.table->esds.decoderConfig; dec_audio_specific_config(&audio_config_data,&bs); info->m_audio_info.stream_type = ObjectIDType(audio_config_data.audioObjectType); info->m_audio_info.sample_frequency = get_sampling_frequency(&audio_config_data); info->m_audio_info.channels = get_channels_number(&audio_config_data); }/* 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.stream_type = ObjectIDType(temp); GetBits(&temp, 4, &ptr,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -