1 /* 2 * Copyright (c) 2003-2004, Marcus Overhagen 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * * Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17 * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 18 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 19 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 21 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 22 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 23 * OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 #ifndef _RAW_DECODER_PLUGIN_H 26 #define _RAW_DECODER_PLUGIN_H 27 28 #include "DecoderPlugin.h" 29 30 class RawDecoder : public Decoder 31 { 32 public: 33 void GetCodecInfo(media_codec_info *info); 34 35 status_t Setup(media_format *ioEncodedFormat, 36 const void *infoBuffer, size_t infoSize); 37 38 status_t NegotiateOutputFormat(media_format *ioDecodedFormat); 39 40 status_t SeekedTo(int64 frame, bigtime_t time); 41 42 status_t Decode(void *buffer, int64 *frameCount, 43 media_header *mediaHeader, media_decode_info *info); 44 45 private: 46 status_t NegotiateVideoOutputFormat(media_format *ioDecodedFormat); 47 status_t NegotiateAudioOutputFormat(media_format *ioDecodedFormat); 48 49 private: 50 int32 fFrameRate; 51 int32 fInputFrameSize; 52 int32 fOutputFrameSize; 53 int32 fInputSampleSize; 54 int32 fOutputSampleSize; 55 int32 fOutputBufferFrameCount; 56 void (*fSwapInput)(void *data, int32 count); 57 void (*fConvert)(void *dst, const void *src, int32 count); 58 void (*fSwapOutput)(void *data, int32 count); 59 60 const void * fChunkBuffer; 61 size_t fChunkSize; 62 63 bigtime_t fStartTime; 64 65 media_format fInputFormat; 66 }; 67 68 69 class RawDecoderPlugin : public DecoderPlugin 70 { 71 public: 72 Decoder * NewDecoder(uint index); 73 status_t GetSupportedFormats(media_format ** formats, size_t * count); 74 }; 75 76 #endif 77