17cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden/*
27cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden * Copyright (C) 2013 The Android Open Source Project
37cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden *
47cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden * Licensed under the Apache License, Version 2.0 (the "License");
57cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden * you may not use this file except in compliance with the License.
67cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden * You may obtain a copy of the License at
77cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden *
87cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden *      http://www.apache.org/licenses/LICENSE-2.0
97cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden *
107cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden * Unless required by applicable law or agreed to in writing, software
117cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden * distributed under the License is distributed on an "AS IS" BASIS,
127cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden * See the License for the specific language governing permissions and
147cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden * limitations under the License.
157cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden */
167cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden
177cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden#ifndef BUFFER_PRODUCER_WRAPPER_H_
187cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden
197cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden#define BUFFER_PRODUCER_WRAPPER_H_
207cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden
217cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden#include <gui/IGraphicBufferProducer.h>
22f22e0d8849dd8bd0581297288c2597d0666382aaChih-Hung Hsieh#include <media/stagefright/foundation/ABase.h>
237cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden
247cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFaddennamespace android {
257cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden
267cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden// Can't use static_cast to cast a RefBase back to an IGraphicBufferProducer,
277cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden// because IGBP's parent (IInterface) uses virtual inheritance.  This class
287cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden// wraps IGBP while we pass it through AMessage.
297cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden
307cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFaddenstruct BufferProducerWrapper : RefBase {
317cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden    BufferProducerWrapper(
327cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden            const sp<IGraphicBufferProducer>& bufferProducer) :
337cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden        mBufferProducer(bufferProducer) { }
347cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden
357cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden    sp<IGraphicBufferProducer> getBufferProducer() const {
367cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden        return mBufferProducer;
377cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden    }
387cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden
397cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFaddenprivate:
407cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden    const sp<IGraphicBufferProducer> mBufferProducer;
417cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden
427cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden    DISALLOW_EVIL_CONSTRUCTORS(BufferProducerWrapper);
437cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden};
447cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden
457cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden}  // namespace android
467cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden
477cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden#endif  // BUFFER_PRODUCER_WRAPPER_H_
48