NuPlayerDecoderPassThrough.cpp revision b6f9a21e7036e5619216faae902f005374bd8cad
14a10645c70199c8d8567fbc46312158c419720abChris Lattner/* 23da94aec4d429b2ba0f65fa040c33650cade196bMisha Brukman * Copyright (C) 2014 The Android Open Source Project 37c0e022c5c4be4b11e199a53f73bbdd84e34aa80John Criswell * 47c0e022c5c4be4b11e199a53f73bbdd84e34aa80John Criswell * Licensed under the Apache License, Version 2.0 (the "License"); 521c62da287237d39d0d95004881ea4baae3be6daChris Lattner * you may not use this file except in compliance with the License. 621c62da287237d39d0d95004881ea4baae3be6daChris Lattner * You may obtain a copy of the License at 73da94aec4d429b2ba0f65fa040c33650cade196bMisha Brukman * 87c0e022c5c4be4b11e199a53f73bbdd84e34aa80John Criswell * http://www.apache.org/licenses/LICENSE-2.0 94a10645c70199c8d8567fbc46312158c419720abChris Lattner * 104a10645c70199c8d8567fbc46312158c419720abChris Lattner * Unless required by applicable law or agreed to in writing, software 118ff70c2635bfd4e02c0140a5dc9ca909fffba35aGabor Greif * distributed under the License is distributed on an "AS IS" BASIS, 124a10645c70199c8d8567fbc46312158c419720abChris Lattner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134a10645c70199c8d8567fbc46312158c419720abChris Lattner * See the License for the specific language governing permissions and 144a10645c70199c8d8567fbc46312158c419720abChris Lattner * limitations under the License. 154a10645c70199c8d8567fbc46312158c419720abChris Lattner */ 16f1b20d8620b05abaa52f40ac6d21f839b265fb00Chris Lattner 17551ccae044b0ff658fe629dd67edd5ffe75d10e8Reid Spencer//#define LOG_NDEBUG 0 18551ccae044b0ff658fe629dd67edd5ffe75d10e8Reid Spencer#define LOG_TAG "NuPlayerDecoderPassThrough" 19551ccae044b0ff658fe629dd67edd5ffe75d10e8Reid Spencer#include <utils/Log.h> 20551ccae044b0ff658fe629dd67edd5ffe75d10e8Reid Spencer#include <inttypes.h> 2174382b7c699120fbec5cb5603c9cf4212eb37f06Chris Lattner 224a10645c70199c8d8567fbc46312158c419720abChris Lattner#include "NuPlayerDecoderPassThrough.h" 2351ab5c8862466bbddcd5c4369779c472978ed309Reid Spencer 24d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke#include <media/ICrypto.h> 25d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke#include <media/stagefright/foundation/ABuffer.h> 264a10645c70199c8d8567fbc46312158c419720abChris Lattner#include <media/stagefright/foundation/ADebug.h> 274a10645c70199c8d8567fbc46312158c419720abChris Lattner#include <media/stagefright/foundation/AMessage.h> 284a10645c70199c8d8567fbc46312158c419720abChris Lattner#include <media/stagefright/MediaDefs.h> 294a10645c70199c8d8567fbc46312158c419720abChris Lattner#include <media/stagefright/MediaErrors.h> 304a10645c70199c8d8567fbc46312158c419720abChris Lattner 31a443e5b1f1013612950fc3c9ebfafca60a1c20dfEric Christophernamespace android { 324a10645c70199c8d8567fbc46312158c419720abChris Lattner 334148556a9c767fdf3047ae8e004a759356b893ddMisha Brukmanstatic const int kMaxPendingBuffers = 10; 34a328c51bb99666ee0c045a57ea6d6ce2b0198f9bChris Lattnerstatic const int kMaxCachedBytes = 200000; 35a328c51bb99666ee0c045a57ea6d6ce2b0198f9bChris Lattner 36a328c51bb99666ee0c045a57ea6d6ce2b0198f9bChris LattnerNuPlayer::DecoderPassThrough::DecoderPassThrough( 37a328c51bb99666ee0c045a57ea6d6ce2b0198f9bChris Lattner const sp<AMessage> ¬ify) 38a328c51bb99666ee0c045a57ea6d6ce2b0198f9bChris Lattner : Decoder(notify), 39a328c51bb99666ee0c045a57ea6d6ce2b0198f9bChris Lattner mNotify(notify), 40a328c51bb99666ee0c045a57ea6d6ce2b0198f9bChris Lattner mBufferGeneration(0), 414a10645c70199c8d8567fbc46312158c419720abChris Lattner mReachedEOS(true), 4270ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman mPendingBuffers(0), 43b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke mCachedBytes(0), 44b687d82b029ba448b978e2c9ed424ee5d1f9f093Misha Brukman mComponentName("pass through decoder") { 45b687d82b029ba448b978e2c9ed424ee5d1f9f093Misha Brukman mDecoderLooper = new ALooper; 465073336cd4da5df4ae13a167582d1dc90f32e4e0Misha Brukman mDecoderLooper->setName("NuPlayerDecoderPassThrough"); 475073336cd4da5df4ae13a167582d1dc90f32e4e0Misha Brukman mDecoderLooper->start(false, false, ANDROID_PRIORITY_AUDIO); 4850010429a7c3285dab15ede68acae7231fade367Chris Lattner} 4950010429a7c3285dab15ede68acae7231fade367Chris Lattner 50cd6f46e2ac4c1d64067237c0b28eccfae22bd9f4Chris LattnerNuPlayer::DecoderPassThrough::~DecoderPassThrough() { 51f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick} 52f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick 53f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trickvoid NuPlayer::DecoderPassThrough::configure(const sp<AMessage> &format) { 549ef7425a4d44ff129495da2357c98c67162fbeffAnton Korobeynikov sp<AMessage> msg = new AMessage(kWhatConfigure, id()); 559ef7425a4d44ff129495da2357c98c67162fbeffAnton Korobeynikov msg->setMessage("format", format); 569ef7425a4d44ff129495da2357c98c67162fbeffAnton Korobeynikov msg->post(); 574d143ee01988e1b52e106ffccbb313937ca5e886Chris Lattner} 58b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke 593c053a0a98e19f5ac8905011ad4c8238b08d6aeaChris Lattnervoid NuPlayer::DecoderPassThrough::init() { 6070ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman mDecoderLooper->registerHandler(this); 6170ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman} 6249419e28fe400509363cecf63a3a824002c1d9e0Evan Cheng 6349419e28fe400509363cecf63a3a824002c1d9e0Evan Chengvoid NuPlayer::DecoderPassThrough::signalFlush() { 6449419e28fe400509363cecf63a3a824002c1d9e0Evan Cheng (new AMessage(kWhatFlush, id()))->post(); 6549419e28fe400509363cecf63a3a824002c1d9e0Evan Cheng} 6649419e28fe400509363cecf63a3a824002c1d9e0Evan Cheng 6749419e28fe400509363cecf63a3a824002c1d9e0Evan Chengvoid NuPlayer::DecoderPassThrough::signalResume() { 6870ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman (new AMessage(kWhatResume, id()))->post(); 6970ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman} 7070ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman 7170ef449741da8b1ef035e04a55958652a0200ba1Dan Gohmanvoid NuPlayer::DecoderPassThrough::initiateShutdown() { 7249419e28fe400509363cecf63a3a824002c1d9e0Evan Cheng (new AMessage(kWhatShutdown, id()))->post(); 7349419e28fe400509363cecf63a3a824002c1d9e0Evan Cheng} 7470ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman 75c5cad211d6ec50fe90a0a716dee701c6c4721385Brian Gaekebool NuPlayer::DecoderPassThrough::supportsSeamlessFormatChange( 765e1452c856a8bcf39ab7a67a5af946c8162f942dReid Spencer const sp<AMessage> & /* targetFormat */) const { 775e1452c856a8bcf39ab7a67a5af946c8162f942dReid Spencer return true; 785e1452c856a8bcf39ab7a67a5af946c8162f942dReid Spencer} 795e1452c856a8bcf39ab7a67a5af946c8162f942dReid Spencer 803c053a0a98e19f5ac8905011ad4c8238b08d6aeaChris Lattnervoid NuPlayer::DecoderPassThrough::onConfigure(const sp<AMessage> &format) { 813c053a0a98e19f5ac8905011ad4c8238b08d6aeaChris Lattner ALOGV("[%s] onConfigure", mComponentName.c_str()); 823c053a0a98e19f5ac8905011ad4c8238b08d6aeaChris Lattner mPendingBuffers = 0; 837dac658792425c10274594782d6fcf10208a16f0Chris Lattner mCachedBytes = 0; 847dac658792425c10274594782d6fcf10208a16f0Chris Lattner mReachedEOS = false; 857dac658792425c10274594782d6fcf10208a16f0Chris Lattner ++mBufferGeneration; 867dac658792425c10274594782d6fcf10208a16f0Chris Lattner 877dac658792425c10274594782d6fcf10208a16f0Chris Lattner requestABuffer(); 887d91e49ff7bcc0fd10a54d45a6185bb05adf3d20Chris Lattner 8951ab5c8862466bbddcd5c4369779c472978ed309Reid Spencer sp<AMessage> notify = mNotify->dup(); 90de86cbdc57f30621d3692da7a36613bb623d13b5Andrew Trick notify->setInt32("what", kWhatOutputFormatChanged); 9151ab5c8862466bbddcd5c4369779c472978ed309Reid Spencer notify->setMessage("format", format); 929ef7425a4d44ff129495da2357c98c67162fbeffAnton Korobeynikov notify->post(); 939ef7425a4d44ff129495da2357c98c67162fbeffAnton Korobeynikov} 94f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick 95f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trickbool NuPlayer::DecoderPassThrough::isStaleReply(const sp<AMessage> &msg) { 96f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick int32_t generation; 97f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick CHECK(msg->findInt32("generation", &generation)); 98f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick return generation != mBufferGeneration; 999ef7425a4d44ff129495da2357c98c67162fbeffAnton Korobeynikov} 1009ef7425a4d44ff129495da2357c98c67162fbeffAnton Korobeynikov 1019ef7425a4d44ff129495da2357c98c67162fbeffAnton Korobeynikovvoid NuPlayer::DecoderPassThrough::requestABuffer() { 1024a10645c70199c8d8567fbc46312158c419720abChris Lattner if (mCachedBytes >= kMaxCachedBytes || mReachedEOS) { 1034a10645c70199c8d8567fbc46312158c419720abChris Lattner ALOGV("[%s] mReachedEOS=%d, max pending buffers(%d:%d)", 104d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke mComponentName.c_str(), (mReachedEOS ? 1 : 0), 105fa76183e8e28985dfd17b1d6291c939dab4cbe1dChris Lattner mPendingBuffers, kMaxPendingBuffers); 106fa76183e8e28985dfd17b1d6291c939dab4cbe1dChris Lattner return; 107fa76183e8e28985dfd17b1d6291c939dab4cbe1dChris Lattner } 108fa76183e8e28985dfd17b1d6291c939dab4cbe1dChris Lattner 10960083e2fc0f1165b7511757449f1ee3852b7229cChris Lattner sp<AMessage> reply = new AMessage(kWhatInputBufferFilled, id()); 11068ccdaa84909108c42417a8091c771598e26456eDaniel Dunbar reply->setInt32("generation", mBufferGeneration); 11168ccdaa84909108c42417a8091c771598e26456eDaniel Dunbar 11268ccdaa84909108c42417a8091c771598e26456eDaniel Dunbar sp<AMessage> notify = mNotify->dup(); 11368ccdaa84909108c42417a8091c771598e26456eDaniel Dunbar notify->setInt32("what", kWhatFillThisBuffer); 11470ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman notify->setMessage("reply", reply); 115636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke notify->post(); 11670ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman mPendingBuffers++; 117636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke 118636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke // pending buffers will already result in requestABuffer 11960083e2fc0f1165b7511757449f1ee3852b7229cChris Lattner if (mPendingBuffers < kMaxPendingBuffers) { 12070ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman sp<AMessage> message = new AMessage(kWhatRequestABuffer, id()); 12170ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman message->setInt32("generation", mBufferGeneration); 12270ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman message->post(); 12370ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman } 12470ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman return; 12538efa38c864f6d29892d92102c0232b234b526edBill Wendling} 126faa95763ebb081769bf6ac35e170394c9d477813Kalle Raiskila 127de86cbdc57f30621d3692da7a36613bb623d13b5Andrew Trickvoid android::NuPlayer::DecoderPassThrough::onInputBufferFilled( 128faa95763ebb081769bf6ac35e170394c9d477813Kalle Raiskila const sp<AMessage> &msg) { 129faa95763ebb081769bf6ac35e170394c9d477813Kalle Raiskila if (mReachedEOS) { 13038efa38c864f6d29892d92102c0232b234b526edBill Wendling return; 13138efa38c864f6d29892d92102c0232b234b526edBill Wendling } 13238efa38c864f6d29892d92102c0232b234b526edBill Wendling 13338efa38c864f6d29892d92102c0232b234b526edBill Wendling sp<ABuffer> buffer; 134fa76183e8e28985dfd17b1d6291c939dab4cbe1dChris Lattner msg->findBuffer("buffer", &buffer); 1359d679cbc6cb5c7dc8cca87a1e1548c480fb056b8Misha Brukman if (buffer == NULL) { 1364a10645c70199c8d8567fbc46312158c419720abChris Lattner mReachedEOS = true; 1374a10645c70199c8d8567fbc46312158c419720abChris Lattner 1384a10645c70199c8d8567fbc46312158c419720abChris Lattner sp<AMessage> notify = mNotify->dup(); 1394a10645c70199c8d8567fbc46312158c419720abChris Lattner notify->setInt32("what", kWhatEOS); 1404a10645c70199c8d8567fbc46312158c419720abChris Lattner notify->setInt32("err", ERROR_END_OF_STREAM); 1414a10645c70199c8d8567fbc46312158c419720abChris Lattner notify->post(); 1424a10645c70199c8d8567fbc46312158c419720abChris Lattner return; 1434a10645c70199c8d8567fbc46312158c419720abChris Lattner } 144ac95cc79ac0b899d566cc29c0f646f39c2fa35c0Dan Gohman 1454a10645c70199c8d8567fbc46312158c419720abChris Lattner mCachedBytes += buffer->size(); 1464148556a9c767fdf3047ae8e004a759356b893ddMisha Brukman 1474148556a9c767fdf3047ae8e004a759356b893ddMisha Brukman sp<AMessage> reply = new AMessage(kWhatBufferConsumed, id()); 14870ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman reply->setInt32("generation", mBufferGeneration); 1494a10645c70199c8d8567fbc46312158c419720abChris Lattner reply->setInt32("size", buffer->size()); 150636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke 151cc876a7421f6dbcca98446058d5f0637092c6e1aChris Lattner sp<AMessage> notify = mNotify->dup(); 152b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke notify->setInt32("what", kWhatDrainThisBuffer); 153b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke notify->setBuffer("buffer", buffer); 154b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke notify->setMessage("reply", reply); 155636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke notify->post(); 156636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke} 157b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke 158b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaekevoid NuPlayer::DecoderPassThrough::onBufferConsumed(int32_t size) { 159b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke mPendingBuffers--; 160636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke mCachedBytes -= size; 161de86cbdc57f30621d3692da7a36613bb623d13b5Andrew Trick requestABuffer(); 162faa95763ebb081769bf6ac35e170394c9d477813Kalle Raiskila} 163b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke 164b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaekevoid NuPlayer::DecoderPassThrough::onFlush() { 165b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke ++mBufferGeneration; 166636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke 167636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke sp<AMessage> notify = mNotify->dup(); 168b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke notify->setInt32("what", kWhatFlushCompleted); 169b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke notify->post(); 170b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke mPendingBuffers = 0; 171b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke mCachedBytes = 0; 172b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke mReachedEOS = false; 173b5ee509be2ce78badc11fd649dda90ec78394d1aBrian Gaeke} 174769f1fe6728ffb5627ae0cedc392576d6e701a5aChris Lattner 175636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaekevoid NuPlayer::DecoderPassThrough::onShutdown() { 176636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke ++mBufferGeneration; 177769f1fe6728ffb5627ae0cedc392576d6e701a5aChris Lattner 178769f1fe6728ffb5627ae0cedc392576d6e701a5aChris Lattner sp<AMessage> notify = mNotify->dup(); 17950010429a7c3285dab15ede68acae7231fade367Chris Lattner notify->setInt32("what", kWhatShutdownCompleted); 18070ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman notify->post(); 181636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke mReachedEOS = true; 182de86cbdc57f30621d3692da7a36613bb623d13b5Andrew Trick} 183faa95763ebb081769bf6ac35e170394c9d477813Kalle Raiskila 18450010429a7c3285dab15ede68acae7231fade367Chris Lattnervoid NuPlayer::DecoderPassThrough::onMessageReceived(const sp<AMessage> &msg) { 185769f1fe6728ffb5627ae0cedc392576d6e701a5aChris Lattner ALOGV("[%s] onMessage: %s", mComponentName.c_str(), 186769f1fe6728ffb5627ae0cedc392576d6e701a5aChris Lattner msg->debugString().c_str()); 187636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke 188636df3d7ec51a8c6fd759a98853ff709ae54d64eBrian Gaeke switch (msg->what()) { 189769f1fe6728ffb5627ae0cedc392576d6e701a5aChris Lattner case kWhatConfigure: 190f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick { 191f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick sp<AMessage> format; 192f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick CHECK(msg->findMessage("format", &format)); 193f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick onConfigure(format); 1949ef7425a4d44ff129495da2357c98c67162fbeffAnton Korobeynikov break; 195f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick } 196f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick 1979ef7425a4d44ff129495da2357c98c67162fbeffAnton Korobeynikov case kWhatRequestABuffer: 1984a10645c70199c8d8567fbc46312158c419720abChris Lattner { 199ad6996d74f60340d6139af8f345d93735661fbbaMatthijs Kooijman if (!isStaleReply(msg)) { 20065f57c233cd4499e2e8b52a503201e64edfd6a9eDan Gohman requestABuffer(); 201ad6996d74f60340d6139af8f345d93735661fbbaMatthijs Kooijman } 202ac95cc79ac0b899d566cc29c0f646f39c2fa35c0Dan Gohman 2034a10645c70199c8d8567fbc46312158c419720abChris Lattner break; 20470ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman } 20570ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman 20670ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman case kWhatInputBufferFilled: 20770ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman { 20870ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman if (!isStaleReply(msg)) { 20970ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman onInputBufferFilled(msg); 21070ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman } 21170ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman break; 21270ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman } 21370ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman 21470ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman case kWhatBufferConsumed: 215197f728d49fa0cc0baa5aadb2b905fbd8c22a81eDan Gohman { 216de86cbdc57f30621d3692da7a36613bb623d13b5Andrew Trick if (!isStaleReply(msg)) { 21738efa38c864f6d29892d92102c0232b234b526edBill Wendling int32_t size; 21838efa38c864f6d29892d92102c0232b234b526edBill Wendling CHECK(msg->findInt32("size", &size)); 21970ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman onBufferConsumed(size); 22070ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman } 22170ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman break; 22270ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman } 22370ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman 22470ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman case kWhatFlush: 22570ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman { 226197f728d49fa0cc0baa5aadb2b905fbd8c22a81eDan Gohman onFlush(); 227de86cbdc57f30621d3692da7a36613bb623d13b5Andrew Trick break; 22838efa38c864f6d29892d92102c0232b234b526edBill Wendling } 22938efa38c864f6d29892d92102c0232b234b526edBill Wendling 23070ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman case kWhatResume: 23170ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman { 23270ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman requestABuffer(); 233ed7fcf4fd93b16bfa698451862355fdd17239736Saleem Abdulrasool break; 23470ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman } 23570ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman 23670ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman case kWhatShutdown: 23750010429a7c3285dab15ede68acae7231fade367Chris Lattner { 23870ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman onShutdown(); 239197f728d49fa0cc0baa5aadb2b905fbd8c22a81eDan Gohman break; 240faa95763ebb081769bf6ac35e170394c9d477813Kalle Raiskila } 24150010429a7c3285dab15ede68acae7231fade367Chris Lattner 24250010429a7c3285dab15ede68acae7231fade367Chris Lattner default: 24370ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman TRESPASS(); 24470ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman break; 245f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick } 246f73311bb646bf970806ba7caba220e6bffff7b49Andrew Trick} 24770ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman 24870ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman} // namespace android 24970ef449741da8b1ef035e04a55958652a0200ba1Dan Gohman