NuPlayerDecoderPassThrough.cpp revision de01afbbc55ac9c5c23ec66154603f34217aed2c
1bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia/*
2bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * Copyright (C) 2014 The Android Open Source Project
3bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia *
4bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * Licensed under the Apache License, Version 2.0 (the "License");
5bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * you may not use this file except in compliance with the License.
6bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * You may obtain a copy of the License at
7bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia *
8bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia *      http://www.apache.org/licenses/LICENSE-2.0
9bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia *
10bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * Unless required by applicable law or agreed to in writing, software
11bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * distributed under the License is distributed on an "AS IS" BASIS,
12bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * See the License for the specific language governing permissions and
14bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * limitations under the License.
15bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia */
16bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
17bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia//#define LOG_NDEBUG 0
18bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#define LOG_TAG "NuPlayerDecoderPassThrough"
19bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include <utils/Log.h>
20bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include <inttypes.h>
21bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
22bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include "NuPlayerDecoderPassThrough.h"
23bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
24bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include <media/ICrypto.h>
25bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include <media/stagefright/foundation/ABuffer.h>
26bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include <media/stagefright/foundation/ADebug.h>
27bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include <media/stagefright/foundation/AMessage.h>
28bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include <media/stagefright/MediaDefs.h>
29bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include <media/stagefright/MediaErrors.h>
30bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
31bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jianamespace android {
32bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
33bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiastatic const int kMaxPendingBuffers = 10;
34de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhangstatic const int kMaxCachedBytes = 200000;
35bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
36bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei JiaNuPlayer::DecoderPassThrough::DecoderPassThrough(
37bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        const sp<AMessage> &notify)
38bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    : Decoder(notify),
39bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia      mNotify(notify),
40bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia      mBufferGeneration(0),
41bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia      mReachedEOS(true),
42bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia      mPendingBuffers(0),
43de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang      mCachedBytes(0),
44bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia      mComponentName("pass through decoder") {
45bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    mDecoderLooper = new ALooper;
46bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    mDecoderLooper->setName("NuPlayerDecoderPassThrough");
47bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    mDecoderLooper->start(false, false, ANDROID_PRIORITY_AUDIO);
48bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
49bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
50bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei JiaNuPlayer::DecoderPassThrough::~DecoderPassThrough() {
51bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
52bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
53bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiavoid NuPlayer::DecoderPassThrough::configure(const sp<AMessage> &format) {
54bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<AMessage> msg = new AMessage(kWhatConfigure, id());
55bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    msg->setMessage("format", format);
56bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    msg->post();
57bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
58bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
59bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiavoid NuPlayer::DecoderPassThrough::init() {
60bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    mDecoderLooper->registerHandler(this);
61bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
62bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
63bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiavoid NuPlayer::DecoderPassThrough::signalFlush() {
64bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    (new AMessage(kWhatFlush, id()))->post();
65bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
66bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
67bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiavoid NuPlayer::DecoderPassThrough::signalResume() {
68bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    (new AMessage(kWhatResume, id()))->post();
69bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
70bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
71bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiavoid NuPlayer::DecoderPassThrough::initiateShutdown() {
72bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    (new AMessage(kWhatShutdown, id()))->post();
73bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
74bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
75bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiabool NuPlayer::DecoderPassThrough::supportsSeamlessFormatChange(
76bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        const sp<AMessage> & /* targetFormat */) const {
77bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    return true;
78bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
79bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
80bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiavoid NuPlayer::DecoderPassThrough::onConfigure(const sp<AMessage> &format) {
81bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    ALOGV("[%s] onConfigure", mComponentName.c_str());
82bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    mPendingBuffers = 0;
83de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang    mCachedBytes = 0;
84bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    mReachedEOS = false;
85bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    ++mBufferGeneration;
86bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
87bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    requestABuffer();
88bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
89bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<AMessage> notify = mNotify->dup();
90bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->setInt32("what", kWhatOutputFormatChanged);
91bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->setMessage("format", format);
92bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->post();
93bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
94bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
95bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiabool NuPlayer::DecoderPassThrough::isStaleReply(const sp<AMessage> &msg) {
96bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    int32_t generation;
97bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    CHECK(msg->findInt32("generation", &generation));
98bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    return generation != mBufferGeneration;
99bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
100bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
101bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiavoid NuPlayer::DecoderPassThrough::requestABuffer() {
102de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang    if (mCachedBytes >= kMaxCachedBytes || mReachedEOS) {
103bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        ALOGV("[%s] mReachedEOS=%d, max pending buffers(%d:%d)",
104bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia                mComponentName.c_str(), (mReachedEOS ? 1 : 0),
105bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia                mPendingBuffers, kMaxPendingBuffers);
106bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        return;
107bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    }
108bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
109bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<AMessage> reply = new AMessage(kWhatInputBufferFilled, id());
110bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    reply->setInt32("generation", mBufferGeneration);
111bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
112bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<AMessage> notify = mNotify->dup();
113bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->setInt32("what", kWhatFillThisBuffer);
114bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->setMessage("reply", reply);
115bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->post();
116bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    mPendingBuffers++;
117bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
118bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<AMessage> message = new AMessage(kWhatRequestABuffer, id());
119bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    message->setInt32("generation", mBufferGeneration);
120bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    message->post();
121bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    return;
122bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
123bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
124bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiavoid android::NuPlayer::DecoderPassThrough::onInputBufferFilled(
125bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        const sp<AMessage> &msg) {
126bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    if (mReachedEOS) {
127bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        return;
128bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    }
129bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
130bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<ABuffer> buffer;
131bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    msg->findBuffer("buffer", &buffer);
132bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    if (buffer == NULL) {
133bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        mReachedEOS = true;
134bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
135bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        sp<AMessage> notify = mNotify->dup();
136bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        notify->setInt32("what", kWhatEOS);
137bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        notify->setInt32("err", ERROR_END_OF_STREAM);
138bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        notify->post();
139bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        return;
140bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    }
141bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
142de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang    mCachedBytes += buffer->size();
143de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang
144bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<AMessage> reply = new AMessage(kWhatBufferConsumed, id());
145bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    reply->setInt32("generation", mBufferGeneration);
146de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang    reply->setInt32("size", buffer->size());
147bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
148bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<AMessage> notify = mNotify->dup();
149bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->setInt32("what", kWhatDrainThisBuffer);
150bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->setBuffer("buffer", buffer);
151bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->setMessage("reply", reply);
152bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->post();
153bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
154bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
155de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhangvoid NuPlayer::DecoderPassThrough::onBufferConsumed(int32_t size) {
156bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    mPendingBuffers--;
157de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang    mCachedBytes -= size;
158bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<AMessage> message = new AMessage(kWhatRequestABuffer, id());
159bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    message->setInt32("generation", mBufferGeneration);
160bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    message->post();
161bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
162bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
163bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiavoid NuPlayer::DecoderPassThrough::onFlush() {
164bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    ++mBufferGeneration;
165bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
166bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<AMessage> notify = mNotify->dup();
167bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->setInt32("what", kWhatFlushCompleted);
168bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->post();
169bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    mPendingBuffers = 0;
170de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang    mCachedBytes = 0;
171bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    mReachedEOS = false;
172bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
173bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
174bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiavoid NuPlayer::DecoderPassThrough::onShutdown() {
175bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    ++mBufferGeneration;
176bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
177bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<AMessage> notify = mNotify->dup();
178bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->setInt32("what", kWhatShutdownCompleted);
179bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    notify->post();
180bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    mReachedEOS = true;
181bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
182bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
183bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiavoid NuPlayer::DecoderPassThrough::onMessageReceived(const sp<AMessage> &msg) {
184bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    ALOGV("[%s] onMessage: %s", mComponentName.c_str(),
185bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            msg->debugString().c_str());
186bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
187bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    switch (msg->what()) {
188bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        case kWhatConfigure:
189bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        {
190bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            sp<AMessage> format;
191bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            CHECK(msg->findMessage("format", &format));
192bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            onConfigure(format);
193bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            break;
194bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        }
195bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
196bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        case kWhatRequestABuffer:
197bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        {
198bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            if (!isStaleReply(msg)) {
199bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia                requestABuffer();
200bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            }
201bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
202bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            break;
203bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        }
204bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
205bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        case kWhatInputBufferFilled:
206bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        {
207bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            if (!isStaleReply(msg)) {
208bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia                onInputBufferFilled(msg);
209bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            }
210bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            break;
211bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        }
212bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
213bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        case kWhatBufferConsumed:
214bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        {
215bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            if (!isStaleReply(msg)) {
216de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang                int32_t size;
217de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang                CHECK(msg->findInt32("size", &size));
218de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang                onBufferConsumed(size);
219bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            }
220bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            break;
221bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        }
222bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
223bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        case kWhatFlush:
224bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        {
225bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            onFlush();
226bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            break;
227bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        }
228bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
229bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        case kWhatResume:
230bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        {
231bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            requestABuffer();
232bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            break;
233bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        }
234bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
235bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        case kWhatShutdown:
236bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        {
237bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            onShutdown();
238bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            break;
239bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        }
240bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
241bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        default:
242bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            TRESPASS();
243bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia            break;
244bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    }
245bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}
246bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
247bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}  // namespace android
248