1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MEDIA_FILTERS_DECODER_STREAM_TRAITS_H_ 6 #define MEDIA_FILTERS_DECODER_STREAM_TRAITS_H_ 7 8 #include "media/base/demuxer_stream.h" 9 #include "media/base/pipeline_status.h" 10 11 namespace media { 12 13 class AudioBuffer; 14 class AudioDecoder; 15 class DecryptingAudioDecoder; 16 class DecryptingVideoDecoder; 17 class DemuxerStream; 18 class VideoDecoder; 19 class VideoFrame; 20 21 template <DemuxerStream::Type StreamType> 22 struct DecoderStreamTraits {}; 23 24 template <> 25 struct DecoderStreamTraits<DemuxerStream::AUDIO> { 26 typedef AudioBuffer OutputType; 27 typedef AudioDecoder DecoderType; 28 typedef AudioDecoderConfig DecoderConfigType; 29 typedef DecryptingAudioDecoder DecryptingDecoderType; 30 typedef base::Callback<void(bool success)> StreamInitCB; 31 typedef base::Callback<void(const scoped_refptr<OutputType>&)> OutputCB; 32 33 static std::string ToString(); 34 static void Initialize(DecoderType* decoder, 35 const DecoderConfigType& config, 36 bool low_delay, 37 const PipelineStatusCB& status_cb, 38 const OutputCB& output_cb); 39 static bool NeedsBitstreamConversion(DecoderType* decoder) { return false; } 40 static void ReportStatistics(const StatisticsCB& statistics_cb, 41 int bytes_decoded); 42 static DecoderConfigType GetDecoderConfig(DemuxerStream& stream); 43 static scoped_refptr<OutputType> CreateEOSOutput(); 44 }; 45 46 template <> 47 struct DecoderStreamTraits<DemuxerStream::VIDEO> { 48 typedef VideoFrame OutputType; 49 typedef VideoDecoder DecoderType; 50 typedef VideoDecoderConfig DecoderConfigType; 51 typedef DecryptingVideoDecoder DecryptingDecoderType; 52 typedef base::Callback<void(bool success)> StreamInitCB; 53 typedef base::Callback<void(const scoped_refptr<OutputType>&)> OutputCB; 54 55 static std::string ToString(); 56 static void Initialize(DecoderType* decoder, 57 const DecoderConfigType& config, 58 bool low_delay, 59 const PipelineStatusCB& status_cb, 60 const OutputCB& output_cb); 61 static bool NeedsBitstreamConversion(DecoderType* decoder); 62 static void ReportStatistics(const StatisticsCB& statistics_cb, 63 int bytes_decoded); 64 static DecoderConfigType GetDecoderConfig(DemuxerStream& stream); 65 static scoped_refptr<OutputType> CreateEOSOutput(); 66 }; 67 68 } // namespace media 69 70 #endif // MEDIA_FILTERS_DECODER_STREAM_TRAITS_H_ 71