MediaRecordertest.java
MediaRecorder.java
android_media_mediarecorder.cpp
MediaRecorder.cpp(BpMediaRecorder)
|
Binder
|
MediaPlayerService::createMediaRecorder
new MediaRecorderClient(class MediaRecorderClient : public BnMediaRecorder)
new StagefrightRecorder(struct StagefrightRecorder : public MediaRecorderBase)
StagefrightRecorder::startMPEG4Recording()
mWriter = new MPEG4Writer(dup(mOutputFd))
setupAudioEncoder(const sp& mWriter)
createAudioSource()
audioSource=new AudioSource(mAudioSource,mSampleRate,mAudioChannels)-->mRecord = new AudioRecord(inputSource, sampleRate, AudioSystem::PCM_16_BIT,channels > 1? AudioSystem::CHANNEL_IN_STEREO: AudioSystem::CHANNEL_IN_MONO,4 * kMaxBufferSize / sizeof(int16_t), flags);
audioEncoder =OMXCodec::Create(client.interface(), encMeta,true, audioSource);
setupVideoEncoder(&encoder)
mCamera=setupCameraSource
cameraSource = CameraSource::CreateFromCamera(mCamera)-->new CameraSource(mCamera)
encoder = OMXCodec::Create(client.interface(), enc_meta,true , cameraSource);
mWriter->addSource(encoder)--Track *track = new Track(this, source);-->mTracks.push_back(track);
mWriter->start(meta.get())
MPEG4Writer::start
startWriterThread
pthread_create(&mThread, &attr, ThreadWrapper, this)
MPEG4Writer::threadFunc()
mChunkReadyCondition.wait(mLock);
writeChunks()
writeFirstChunk
addSample_l
fwrite(mFile)
startTracks
mTracks.begin().start
MPEG4Writer::Track::start
mSource->start
pthread_create(&mThread, &attr, ThreadWrapper, this)
MPEG4Writer::Track::ThreadWrapper
threadEntry
mSource->read(&buffer))
mChunkSamples.push_back(buffer);
bufferChunk
mChunkReadyCondition.signal()唤醒MPEG4Writer::threadFunc()