コード例 #1
0
ファイル: TSBuffUtil.cpp プロジェクト: 9060/EDCB.local
BOOL CTSBuffUtil::GetSectionBuff(BYTE** sectionData, DWORD* dataSize)
{
	if( sectionSize == 0 && carryPacket.empty() == false ){
		//繰り越しパケットを処理
		CTSPacketUtil tsPacket;
		tsPacket.payload_unit_start_indicator = 1;
		tsPacket.data_byteSize = (BYTE)carryPacket.size();
		tsPacket.data_byte = &carryPacket.front();
		if( PESMode == FALSE ){
			if( AddSectionBuff(&tsPacket) != 2 ){
				carryPacket.clear();
			}
		}else{
			AddPESBuff(&tsPacket);
			carryPacket.clear();
		}
	}
	if( sectionSize == 0 || sectionSize != sectionBuff.size() ){
		//sectionBuffはGet済みか作成途中
		carryPacket.clear();
		return FALSE;
	}

	*sectionData = &sectionBuff.front();
	*dataSize = sectionSize;
	//sectionBuffがGet済みであることを示す
	sectionSize = 0;

	return TRUE;
}
コード例 #2
0
ファイル: TSBuffUtil.cpp プロジェクト: PyYoshi/EDCB
DWORD CTSBuffUtil::Add188TS(CTSPacketUtil* tsPacket)
{
	if( tsPacket == NULL ){
		return FALSE;
	}

	//カウンターチェック
	if( CheckCounter(tsPacket) == FALSE ){
		Clear();
	}
	//スクランブルのチェック
	if( tsPacket->transport_scrambling_control != 0 ){
		//スクランブルパケットなので解析できない
		Clear();
		return ERR_NOT_SUPPORT;
	}

	if( tsPacket->payload_unit_start_indicator == 1 ){
		if( tsPacket->data_byteSize < 3 ){
			//サイズが小さすぎる
			return FALSE;
		}
		if(tsPacket->data_byte[0] == 0x00 && tsPacket->data_byte[1] == 0x00 && tsPacket->data_byte[2] == 0x01){
			//PES
			if( this->supportPES == FALSE ){
				Clear();
				return ERR_NOT_SUPPORT;
			}
			this->PESMode = TRUE;
		}else if( tsPacket->adaptation_field_length > 0 && tsPacket->random_access_indicator == 1 ){
			//PES
			if( this->supportPES == FALSE ){
				Clear();
				return ERR_NOT_SUPPORT;
			}
			this->PESMode = TRUE;
		}else if( tsPacket->adaptation_field_length > 0 && tsPacket->PCR_flag == 1 ){
			//PCR
			Clear();
			return ERR_NOT_SUPPORT;
		}else if( tsPacket->adaptation_field_length > 0 && tsPacket->OPCR_flag == 1 ){
			//OPCR
			Clear();
			return ERR_NOT_SUPPORT;
		}
	}

	if( this->lastPID == 0xFFFF && this->lastCounter == 0xFF ){
		//初回
		if( tsPacket->payload_unit_start_indicator == 1 ){
			//PSI
			this->lastPID = tsPacket->PID;
			this->lastCounter = tsPacket->continuity_counter;
			if( this->PESMode == FALSE ){
				return AddSectionBuff(tsPacket);
			}else{
				return AddPESBuff(tsPacket);
			}
		}else{
			//スタート位置ではない
			return ERR_ADD_NEXT;
		}
	}else{
		this->lastPID = tsPacket->PID;
		this->lastCounter = tsPacket->continuity_counter;
		if( this->PESMode == FALSE ){
			return AddSectionBuff(tsPacket);
		}else{
			return AddPESBuff(tsPacket);
		}
	}

}