コード例 #1
0
ファイル: robot_decoder.cpp プロジェクト: DrItanium/scummvm
void RobotDecoder::open(const GuiResourceId robotId, const reg_t plane, const int16 priority, const int16 x, const int16 y, const int16 scale) {
	if (_status != kRobotStatusUninitialized) {
		close();
	}

	initStream(robotId);

	_version = _stream->readUint16();

	// TODO: Version 4 for PQ:SWAT demo?
	if (_version < 5 || _version > 6) {
		error("Unsupported version %d of Robot resource", _version);
	}

	debugC(kDebugLevelVideo, "Opening version %d robot %d", _version, robotId);

	initPlayback();

	_audioBlockSize = _stream->readUint16();
	_primerZeroCompressFlag = _stream->readSint16();
	_stream->seek(2, SEEK_CUR); // unused
	_numFramesTotal = _stream->readUint16();
	const uint16 paletteSize = _stream->readUint16();
	_primerReservedSize = _stream->readUint16();
	_xResolution = _stream->readSint16();
	_yResolution = _stream->readSint16();
	const bool hasPalette = (bool)_stream->readByte();
	_hasAudio = (bool)_stream->readByte();
	_stream->seek(2, SEEK_CUR); // unused
	_frameRate = _normalFrameRate = _stream->readSint16();
	_isHiRes = (bool)_stream->readSint16();
	_maxSkippablePackets = _stream->readSint16();
	_maxCelsPerFrame = _stream->readSint16();

	// used for memory preallocation of fixed cels
	_maxCelArea.push_back(_stream->readSint32());
	_maxCelArea.push_back(_stream->readSint32());
	_maxCelArea.push_back(_stream->readSint32());
	_maxCelArea.push_back(_stream->readSint32());
	_stream->seek(8, SEEK_CUR); // reserved

	if (_hasAudio) {
		initAudio();
	} else {
		_stream->seek(_primerReservedSize, SEEK_CUR);
	}

	_priority = priority;
	initVideo(x, y, scale, plane, hasPalette, paletteSize);
	initRecordAndCuePositions();
}
コード例 #2
0
  /**
   * Initialize the OpenSL inputs and outputs for this stream.
   */
  HowieError StreamImpl::init(SLEngineItf engineItf,
       SLObjectItf outputMixObject,
       const HowieStreamCreationParams &creationParams_) {
    HOWIE_TRACE_FN(HOWIE_TRACE_LEVEL_CALLS)
    SLresult result;


    // Compute the buffer quantum
    bufferQuantum_ = deviceCharacteristics.framesPerPeriod
                     * deviceCharacteristics.bytesPerSample
                     * deviceCharacteristics.samplesPerFrame;

    // configure the audio source (supply data through a buffer queue in PCM format)
    SLDataFormat_PCM format_pcm;

    // source format
    format_pcm.formatType = SL_DATAFORMAT_PCM;
    format_pcm.numChannels = deviceCharacteristics.channelCount;
    format_pcm.samplesPerSec = (SLuint32) deviceCharacteristics.sampleRate *
                               1000;
    format_pcm.bitsPerSample = deviceCharacteristics.bitsPerSample;
    format_pcm.containerSize = deviceCharacteristics.bitsPerSample
                               * deviceCharacteristics.samplesPerFrame;
    format_pcm.channelMask = (format_pcm.numChannels == 1) ?
                             SL_SPEAKER_FRONT_CENTER :
                             SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT;
    format_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN;


    if (direction_ & HOWIE_STREAM_DIRECTION_RECORD) {
      HOWIE_CHECK(initRecording(engineItf, format_pcm));
    }

    if (direction_ & HOWIE_STREAM_DIRECTION_PLAYBACK) {
      HOWIE_CHECK(initPlayback(engineItf,
                   outputMixObject,
                   format_pcm));
    }

    if (creationParams_.initialState == HOWIE_STREAM_STATE_PLAYING) {
      run();
    }
  }