diff options
author | sotaro <sotaro.ikeda.g@gmail.com> | 2014-12-22 08:56:35 -0800 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2015-11-23 17:08:28 -0800 |
commit | 7c02c8d90621cf4c97eaf3b5fbe75c875f9a0aa4 (patch) | |
tree | 892d9c73de752a054e38f0266fdda46c643e1366 /media/libstagefright/FLACExtractor.cpp | |
parent | 6eb7982d8f46051e6a8cb269289ed0e8e4436040 (diff) | |
download | frameworks_av-7c02c8d90621cf4c97eaf3b5fbe75c875f9a0aa4.zip frameworks_av-7c02c8d90621cf4c97eaf3b5fbe75c875f9a0aa4.tar.gz frameworks_av-7c02c8d90621cf4c97eaf3b5fbe75c875f9a0aa4.tar.bz2 |
Bug 1113271 - Fix stagefright FLACParser
Change-Id: I993bbcdb276ea727c5088cff03cedb34e9a91c38
Diffstat (limited to 'media/libstagefright/FLACExtractor.cpp')
-rw-r--r-- | media/libstagefright/FLACExtractor.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/media/libstagefright/FLACExtractor.cpp b/media/libstagefright/FLACExtractor.cpp index 87345e1..91f0e65 100644 --- a/media/libstagefright/FLACExtractor.cpp +++ b/media/libstagefright/FLACExtractor.cpp @@ -150,7 +150,7 @@ private: bool mWriteRequested; bool mWriteCompleted; FLAC__FrameHeader mWriteHeader; - const FLAC__int32 * const *mWriteBuffer; + const FLAC__int32 * mWriteBuffer[FLAC__MAX_CHANNELS]; // most recent error reported by libFLAC parser FLAC__StreamDecoderErrorStatus mErrorStatus; @@ -334,7 +334,9 @@ FLAC__StreamDecoderWriteStatus FLACParser::writeCallback( mWriteRequested = false; // FLAC parser doesn't free or realloc buffer until next frame or finish mWriteHeader = frame->header; - mWriteBuffer = buffer; + for(unsigned channel = 0; channel < frame->header.channels; channel++) { + mWriteBuffer[channel] = buffer[channel]; + } mWriteCompleted = true; return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } else { @@ -441,7 +443,6 @@ FLACParser::FLACParser( mStreamInfoValid(false), mWriteRequested(false), mWriteCompleted(false), - mWriteBuffer(NULL), mErrorStatus((FLAC__StreamDecoderErrorStatus) -1) { ALOGV("FLACParser::FLACParser"); @@ -618,7 +619,7 @@ MediaBuffer *FLACParser::readBuffer(bool doSeek, FLAC__uint64 sample) short *data = (short *) buffer->data(); buffer->set_range(0, bufferSize); // copy PCM from FLAC write buffer to our media buffer, with interleaving - copyBuffer(data, mWriteBuffer, blocksize); + copyBuffer(data, (const FLAC__int32 * const *)(&mWriteBuffer), blocksize); // fill in buffer metadata CHECK(mWriteHeader.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER); FLAC__uint64 sampleNumber = mWriteHeader.number.sample_number; |