Exemplo n.º 1
0
bool FirewireRecorder::ProcessTSPacket(const TSPacket &tspacket)
{
    if (tspacket.TransportError())
        return true;

    if (tspacket.Scrambled())
        return true;

    if (tspacket.HasAdaptationField())
        GetStreamData()->HandleAdaptationFieldControl(&tspacket);

    if (tspacket.HasPayload())
    {
        const unsigned int lpid = tspacket.PID();

        // Pass or reject packets based on PID, and parse info from them
        if (lpid == GetStreamData()->VideoPIDSingleProgram())
        {
            _buffer_packets = !FindMPEG2Keyframes(&tspacket);
            BufferedWrite(tspacket);
        }
        else if (GetStreamData()->IsAudioPID(lpid))
        {
            _buffer_packets = !FindAudioKeyframes(&tspacket);
            BufferedWrite(tspacket);
        }
        else if (GetStreamData()->IsListeningPID(lpid))
            GetStreamData()->HandleTSTables(&tspacket);
        else if (GetStreamData()->IsWritingPID(lpid))
            BufferedWrite(tspacket);
    }

    return true;
}
Exemplo n.º 2
0
bool FirewireRecorder::ProcessTSPacket(const TSPacket &tspacket)
{
    const uint pid = tspacket.PID();

    if (pid == 0x1fff) // Stuffing
        return true;

    if (tspacket.TransportError())
        return true;

    if (tspacket.Scrambled())
        return true;

    if (tspacket.HasAdaptationField())
        GetStreamData()->HandleAdaptationFieldControl(&tspacket);

    if (GetStreamData()->IsVideoPID(tspacket.PID()))
        return ProcessVideoTSPacket(tspacket);

    if (GetStreamData()->IsAudioPID(tspacket.PID()))
        return ProcessAudioTSPacket(tspacket);

    if (GetStreamData()->IsWritingPID(tspacket.PID()))
        BufferedWrite(tspacket);

    if (GetStreamData()->IsListeningPID(tspacket.PID()) && tspacket.HasPayload())
        GetStreamData()->HandleTSTables(&tspacket);

    return true;
}
Exemplo n.º 3
0
bool Storage::TerminalCommandHandler(string commandName, vector<string> commandArgs){

	if(commandName == "save"){
		int slotNum = atoi(commandArgs[0].c_str());
		int len = strlen(commandArgs[1].c_str());
		if(len % 4 != 0) len = len +4 - (len%4);

		char data[len];
		strcpy(data, commandArgs[1].c_str());

		BufferedWrite((unsigned char*)data, slotNum, len);

		logt("STORAGE", "len: %d is saved in %d", len, slotNum);

	} else if (commandName == "load"){
		int slotNum = atoi(commandArgs[0].c_str());
		int len = atoi(commandArgs[1].c_str());
		if(len % 4 != 0) len = len +4 - (len%4);

		u8 dest_data[len];
		BufferedRead(dest_data, slotNum, len);

		logt("STORAGE", "%s (%d) has been loaded from %d", dest_data, len, slotNum);

	} else {
		return false;
	}
	return true;

}
Exemplo n.º 4
0
void IPTVRecorder::HandleSingleProgramPMT(ProgramMapTable *pmt)
{
    if (!pmt)
        return;

    int next = (pmt->tsheader()->ContinuityCounter()+1)&0xf;
    pmt->tsheader()->SetContinuityCounter(next);
    BufferedWrite(*(reinterpret_cast<const TSPacket*>(pmt->tsheader())));
}
Exemplo n.º 5
0
bool IPTVRecorder::ProcessTSPacket(const TSPacket& tspacket)
{
    if (!_stream_data)
        return true;

    if (tspacket.TransportError() || tspacket.Scrambled())
        return true;

    if (tspacket.HasAdaptationField())
        _stream_data->HandleAdaptationFieldControl(&tspacket);

    if (tspacket.HasPayload())
    {
        const unsigned int lpid = tspacket.PID();

        // Pass or reject packets based on PID, and parse info from them
        if (lpid == _stream_data->VideoPIDSingleProgram())
        {
            ProgramMapTable *pmt = _stream_data->PMTSingleProgram();
            uint video_stream_type = pmt->StreamType(pmt->FindPID(lpid));

            if (video_stream_type == StreamID::H264Video)
                _buffer_packets = !FindH264Keyframes(&tspacket);
            else if (StreamID::IsVideo(video_stream_type))
                _buffer_packets = !FindMPEG2Keyframes(&tspacket);

            if ((video_stream_type != StreamID::H264Video) || _seen_sps)
                BufferedWrite(tspacket);
        }
        else if (_stream_data->IsAudioPID(lpid))
        {
            _buffer_packets = !FindAudioKeyframes(&tspacket);
            BufferedWrite(tspacket);
        }
        else if (_stream_data->IsListeningPID(lpid))
            _stream_data->HandleTSTables(&tspacket);
        else if (_stream_data->IsWritingPID(lpid))
            BufferedWrite(tspacket);
    }

    return true;
}
Exemplo n.º 6
0
void Storage::ProcessQueue()
{
	if(bufferedOperationInProgress || taskQueue->_numElements < 1){
		return;
	} else {
		bufferedOperationInProgress = true;
	}

	//Get one item from the queue and execute it
	sizedData data = taskQueue->PeekNext();
	taskitem* task = (taskitem*)data.data;

	if(task->operation == operation::OPERATION_READ) BufferedRead(task->data, task->storageBlock, task->dataLength);
	else if(task->operation == operation::OPERATION_WRITE) BufferedWrite(task->data, task->storageBlock, task->dataLength);
}