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#include "media/filters/decoder_stream_traits.h"
6
7#include "base/logging.h"
8#include "media/base/audio_buffer.h"
9#include "media/base/audio_decoder.h"
10#include "media/base/audio_decoder_config.h"
11#include "media/base/video_decoder.h"
12#include "media/base/video_decoder_config.h"
13#include "media/base/video_frame.h"
14
15namespace media {
16
17std::string DecoderStreamTraits<DemuxerStream::AUDIO>::ToString() {
18  return "audio";
19}
20
21void DecoderStreamTraits<DemuxerStream::AUDIO>::Initialize(
22    DecoderType* decoder,
23    const DecoderConfigType& config,
24    bool low_delay,
25    const PipelineStatusCB& status_cb,
26    const OutputCB& output_cb) {
27  decoder->Initialize(config, status_cb, output_cb);
28}
29
30void DecoderStreamTraits<DemuxerStream::AUDIO>::ReportStatistics(
31    const StatisticsCB& statistics_cb,
32    int bytes_decoded) {
33  PipelineStatistics statistics;
34  statistics.audio_bytes_decoded = bytes_decoded;
35  statistics_cb.Run(statistics);
36}
37
38DecoderStreamTraits<DemuxerStream::AUDIO>::DecoderConfigType
39    DecoderStreamTraits<DemuxerStream::AUDIO>::GetDecoderConfig(
40        DemuxerStream& stream) {
41  return stream.audio_decoder_config();
42}
43
44scoped_refptr<DecoderStreamTraits<DemuxerStream::AUDIO>::OutputType>
45    DecoderStreamTraits<DemuxerStream::AUDIO>::CreateEOSOutput() {
46  return OutputType::CreateEOSBuffer();
47}
48
49std::string DecoderStreamTraits<DemuxerStream::VIDEO>::ToString() {
50  return "video";
51}
52
53void DecoderStreamTraits<DemuxerStream::VIDEO>::Initialize(
54    DecoderType* decoder,
55    const DecoderConfigType& config,
56    bool low_delay,
57    const PipelineStatusCB& status_cb,
58    const OutputCB& output_cb) {
59  decoder->Initialize(config, low_delay, status_cb, output_cb);
60}
61
62bool DecoderStreamTraits<DemuxerStream::VIDEO>::NeedsBitstreamConversion(
63    DecoderType* decoder) {
64  return decoder->NeedsBitstreamConversion();
65}
66
67void DecoderStreamTraits<DemuxerStream::VIDEO>::ReportStatistics(
68    const StatisticsCB& statistics_cb,
69    int bytes_decoded) {
70  PipelineStatistics statistics;
71  statistics.video_bytes_decoded = bytes_decoded;
72  statistics_cb.Run(statistics);
73}
74
75DecoderStreamTraits<DemuxerStream::VIDEO>::DecoderConfigType
76    DecoderStreamTraits<DemuxerStream::VIDEO>::GetDecoderConfig(
77        DemuxerStream& stream) {
78  return stream.video_decoder_config();
79}
80
81scoped_refptr<DecoderStreamTraits<DemuxerStream::VIDEO>::OutputType>
82    DecoderStreamTraits<DemuxerStream::VIDEO>::CreateEOSOutput() {
83  return OutputType::CreateEOSFrame();
84}
85
86}  // namespace media
87