diff options
author | James Dong <jdong@google.com> | 2012-08-01 19:32:46 -0700 |
---|---|---|
committer | James Dong <jdong@google.com> | 2012-08-02 14:01:25 -0700 |
commit | 0dff606f42292b8a31b9eee842877f9875279dab (patch) | |
tree | 84529f95eacfe525e3ecbc0d9a6f4b49fb0c737b /media/libstagefright/OMXCodec.cpp | |
parent | c9729ca1cb1760da836e293e3ed7a82f769f3e07 (diff) | |
download | frameworks_av-0dff606f42292b8a31b9eee842877f9875279dab.zip frameworks_av-0dff606f42292b8a31b9eee842877f9875279dab.tar.gz frameworks_av-0dff606f42292b8a31b9eee842877f9875279dab.tar.bz2 |
Allocate buffers before calling start on its source in OMXCodec::start() for encoder case
o This makes it possible to configure the source to use the same number of input buffers
as requested by the video encoder, before the source starts. As a result, hardcoded
number of video buffers for camera source, for instance, can be avoided.
o related-to-bug: 6920805
Change-Id: I13d2c308dce34967768cd407f02988e92ef10a89
Diffstat (limited to 'media/libstagefright/OMXCodec.cpp')
-rwxr-xr-x | media/libstagefright/OMXCodec.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 2f5e9a4..dabb0e7 100755 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -3623,11 +3623,6 @@ status_t OMXCodec::start(MetaData *meta) { } params->setInt64(kKeyTime, startTimeUs); } - status_t err = mSource->start(params.get()); - - if (err != OK) { - return err; - } mCodecSpecificDataIndex = 0; mInitialBufferSubmit = true; @@ -3640,6 +3635,23 @@ status_t OMXCodec::start(MetaData *meta) { mFilledBuffers.clear(); mPaused = false; + status_t err; + if (mIsEncoder) { + // Calling init() before starting its source so that we can configure, + // if supported, the source to use exactly the same number of input + // buffers as requested by the encoder. + if ((err = init()) != OK) { + return err; + } + + params->setInt32(kKeyNumBuffers, mPortBuffers[kPortIndexInput].size()); + return mSource->start(params.get()); + } + + // Decoder case + if ((err = mSource->start(params.get())) != OK) { + return err; + } return init(); } |