blob: 26c50bd3b7c9bde6d68624f075c3518f68cd94c8 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <iostream>
#include "services/media/framework/formatting.h"
namespace mojo {
namespace media {
int ostream_indent_index() {
static int i = std::ios_base::xalloc();
return i;
}
std::ostream& begl(std::ostream& os) {
for (long i = 0; i < os.iword(ostream_indent_index()); i++) {
os << " ";
}
return os;
}
std::ostream& operator<<(std::ostream& os, Result value) {
switch (value) {
case Result::kOk:
return os << "kOk";
case Result::kUnknownError:
return os << "kUnknownError";
case Result::kInternalError:
return os << "kInternalError";
case Result::kUnsupportedOperation:
return os << "kUnsupportedOperation";
case Result::kInvalidArgument:
return os << "kInvalidArgument";
case Result::kNotFound:
return os << "kNotFound";
}
return os;
}
std::ostream& operator<<(std::ostream& os, Demand value) {
switch (value) {
case Demand::kNegative:
return os << "kNegative";
case Demand::kNeutral:
return os << "kNeutral";
case Demand::kPositive:
return os << "kPositive";
}
return os;
}
std::ostream& operator<<(std::ostream& os, const PacketPtr& value) {
if (!value) {
return os << "<nullptr>";
}
os << "&" << std::hex << uint64_t(value.get()) << std::dec;
os << "/pts:" << value->pts();
os << "/eos:" << (value->end_of_stream() ? "t" : "f");
os << "/size:" << value->size();
os << "/payload:" << std::hex << uint64_t(value->payload()) << std::dec;
return os;
}
std::ostream& operator<<(
std::ostream& os,
const std::unique_ptr<StreamType>& value) {
if (!value) {
return os << "<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "Scheme scheme(): " << value->scheme() << std::endl;
switch (value->scheme()) {
case StreamType::Scheme::kMultiplexed:
os << begl << "std::unique_ptr<StreamType> multiplex_type: "
<< value->multiplexed()->multiplex_type();
os << begl << "std::unique_ptr<std::vector<std::unique_ptr<StreamType>>>"
<< " substream_types: "
<< value->multiplexed()->substream_types();
break;
case StreamType::Scheme::kLpcm:
os << begl << "SampleFormat sample_format: "
<< value->lpcm()->sample_format() << std::endl;
os << begl << "uint32_t channels: "
<< value->lpcm()->channels() << std::endl;
os << begl << "uint32_t frames_per_second: "
<< value->lpcm()->frames_per_second() << std::endl;
break;
case StreamType::Scheme::kCompressedAudio:
os << begl << "AudioEncoding encoding: "
<< value->compressed_audio()->encoding() << std::endl;
os << begl << "SampleFormat sample_format: "
<< value->compressed_audio()->sample_format() << std::endl;
os << begl << "uint32_t channels: "
<< value->compressed_audio()->channels() << std::endl;
os << begl << "uint32_t frames_per_second: "
<< value->compressed_audio()->frames_per_second() << std::endl;
os << begl << "std::unique_ptr<Bytes> encoding_details: "
<< value->compressed_audio()->encoding_details() << std::endl;
break;
case StreamType::Scheme::kVideo:
os << begl << "VideoEncoding encoding: "
<< value->video()->encoding() << std::endl;
os << begl << "VideoProfile profile: "
<< value->video()->profile() << std::endl;
os << begl << "PixelFormat pixel_format: "
<< value->video()->pixel_format() << std::endl;
os << begl << "ColorSpace color_space: "
<< value->video()->color_space() << std::endl;
os << begl << "uint32_t width: "
<< value->video()->width() << std::endl;
os << begl << "uint32_t height: "
<< value->video()->height() << std::endl;
os << begl << "uint32_t coded_width: "
<< value->video()->coded_width() << std::endl;
os << begl << "uint32_t coded_height: "
<< value->video()->coded_height() << std::endl;
os << begl << "std::unique_ptr<Bytes> encoding_details: "
<< value->video()->encoding_details() << std::endl;
break;
default:
break;
}
return os << outdent;
}
std::ostream& operator<<(
std::ostream& os,
const std::unique_ptr<StreamTypeSet>& value) {
if (!value) {
return os << "<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "Scheme scheme(): " << value->scheme() << std::endl;
switch (value->scheme()) {
case StreamType::Scheme::kMultiplexed:
os << begl << "std::unique_ptr<StreamTypeSet> multiplex_type_set: "
<< value->multiplexed()->multiplex_type_set();
os << begl << "std::unique_ptr<std::vector<std::unique_ptr<"
<< "StreamTypeSet>>> substream_type_sets: "
<< value->multiplexed()->substream_type_sets();
break;
case StreamType::Scheme::kLpcm:
os << begl << "SampleFormat sample_format: "
<< value->lpcm()->sample_format() << std::endl;
os << begl << "Range<uint32_t> channels: "
<< value->lpcm()->channels() << std::endl;
os << begl << "Range<uint32_t> frames_per_second: "
<< value->lpcm()->frames_per_second() << std::endl;
break;
case StreamType::Scheme::kCompressedAudio:
os << begl << "AudioEncoding encoding: "
<< value->compressed_audio()->encoding() << std::endl;
os << begl << "SampleFormat sample_format: "
<< value->compressed_audio()->sample_format() << std::endl;
os << begl << "Range<uint32_t> channels: "
<< value->compressed_audio()->channels() << std::endl;
os << begl << "Range<uint32_t> frames_per_second: "
<< value->compressed_audio()->frames_per_second() << std::endl;
break;
case StreamType::Scheme::kVideo:
os << begl << "VideoEncoding encoding: "
<< value->video()->encoding() << std::endl;
os << begl << "Range<uint32_t> width: "
<< value->video()->width() << std::endl;
os << begl << "Range<uint32_t> height: "
<< value->video()->height() << std::endl;
break;
default:
break;
}
return os << outdent;
}
std::ostream& operator<<(
std::ostream& os,
const std::unique_ptr<std::vector<std::unique_ptr<StreamType>>>& value) {
if (!value) {
return os << "<nullptr>" << std::endl;
} else if (value->size() == 0) {
return os << "<empty>" << std::endl;
} else {
os << std::endl;
}
int index = 0;
for (const std::unique_ptr<StreamType>& element : *value) {
os << "[" << index++ << "]: " << element;
}
return os;
}
std::ostream& operator<<(
std::ostream& os,
const std::unique_ptr<std::vector<std::unique_ptr<StreamTypeSet>>>& value) {
if (!value) {
return os << "<nullptr>" << std::endl;
} else if (value->size() == 0) {
return os << "<empty>" << std::endl;
} else {
os << std::endl;
}
int index = 0;
for (const std::unique_ptr<StreamTypeSet>& element : *value) {
os << "[" << index++ << "]: " << element;
}
return os;
}
std::ostream& operator<<(std::ostream& os, StreamType::Scheme value) {
switch (value) {
case StreamType::Scheme::kUnknown:
return os << "kUnknown";
case StreamType::Scheme::kNone:
return os << "kNone";
case StreamType::Scheme::kAnyElementary:
return os << "kAnyElementary";
case StreamType::Scheme::kAnyAudio:
return os << "kAnyAudio";
case StreamType::Scheme::kAnyVideo:
return os << "kAnyVideo";
case StreamType::Scheme::kAnySubpicture:
return os << "kAnySubpicture";
case StreamType::Scheme::kAnyText:
return os << "kAnyText";
case StreamType::Scheme::kAnyMultiplexed:
return os << "kAnyMultiplexed";
case StreamType::Scheme::kAny:
return os << "kAny";
case StreamType::Scheme::kMultiplexed:
return os << "kMultiplexed";
case StreamType::Scheme::kLpcm:
return os << "kLpcm";
case StreamType::Scheme::kCompressedAudio:
return os << "kCompressedAudio";
case StreamType::Scheme::kVideo:
return os << "kVideo";
}
return os;
}
std::ostream& operator<<(std::ostream& os, LpcmStreamType::SampleFormat value) {
switch (value) {
case LpcmStreamType::SampleFormat::kUnknown:
return os << "kUnknown";
case LpcmStreamType::SampleFormat::kAny:
return os << "kAny";
case LpcmStreamType::SampleFormat::kUnsigned8:
return os << "kUnsigned8";
case LpcmStreamType::SampleFormat::kSigned16:
return os << "kSigned16";
case LpcmStreamType::SampleFormat::kSigned24In32:
return os << "kSigned24In32";
case LpcmStreamType::SampleFormat::kFloat:
return os << "kFloat";
}
return os;
}
std::ostream& operator<<(
std::ostream& os,
CompressedAudioStreamType::AudioEncoding value) {
switch (value) {
case CompressedAudioStreamType::AudioEncoding::kUnknown:
return os << "kUnknown";
case CompressedAudioStreamType::AudioEncoding::kAny:
return os << "kAny";
case CompressedAudioStreamType::AudioEncoding::kVorbis:
return os << "kVorbis";
}
return os;
}
std::ostream& operator<<(
std::ostream& os,
VideoStreamType::VideoEncoding value) {
switch (value) {
case VideoStreamType::VideoEncoding::kUnknown:
return os << "kUnknown";
case VideoStreamType::VideoEncoding::kAny:
return os << "kAny";
case VideoStreamType::VideoEncoding::kTheora:
return os << "kTheora";
case VideoStreamType::VideoEncoding::kVp8:
return os << "kVp8";
}
return os;
}
std::ostream& operator<<(
std::ostream& os,
VideoStreamType::VideoProfile value) {
switch (value) {
case VideoStreamType::VideoProfile::kUnknown:
return os << "kUnknown";
case VideoStreamType::VideoProfile::kNotApplicable:
return os << "kNotApplicable";
case VideoStreamType::VideoProfile::kH264Baseline:
return os << "kH264Baseline";
case VideoStreamType::VideoProfile::kH264Main:
return os << "kH264Main";
case VideoStreamType::VideoProfile::kH264Extended:
return os << "kH264Extended";
case VideoStreamType::VideoProfile::kH264High:
return os << "kH264High";
case VideoStreamType::VideoProfile::kH264High10:
return os << "kH264High10";
case VideoStreamType::VideoProfile::kH264High422:
return os << "kH264High422";
case VideoStreamType::VideoProfile::kH264High444Predictive:
return os << "kH264High444Predictive";
case VideoStreamType::VideoProfile::kH264ScalableBaseline:
return os << "kH264ScalableBaseline";
case VideoStreamType::VideoProfile::kH264ScalableHigh:
return os << "kH264ScalableHigh";
case VideoStreamType::VideoProfile::kH264StereoHigh:
return os << "kH264StereoHigh";
case VideoStreamType::VideoProfile::kH264MultiviewHigh:
return os << "kH264MultiviewHigh";
}
return os;
}
std::ostream& operator<<(std::ostream& os, VideoStreamType::PixelFormat value) {
switch (value) {
case VideoStreamType::PixelFormat::kUnknown:
return os << "kUnknown";
case VideoStreamType::PixelFormat::kI420:
return os << "kI420";
case VideoStreamType::PixelFormat::kYv12:
return os << "kYv12";
case VideoStreamType::PixelFormat::kYv16:
return os << "kYv16";
case VideoStreamType::PixelFormat::kYv12A:
return os << "kYv12A";
case VideoStreamType::PixelFormat::kYv24:
return os << "kYv24";
case VideoStreamType::PixelFormat::kNv12:
return os << "kNv12";
case VideoStreamType::PixelFormat::kNv21:
return os << "kNv21";
case VideoStreamType::PixelFormat::kUyvy:
return os << "kUyvy";
case VideoStreamType::PixelFormat::kYuy2:
return os << "kYuy2";
case VideoStreamType::PixelFormat::kArgb:
return os << "kArgb";
case VideoStreamType::PixelFormat::kXrgb:
return os << "kXrgb";
case VideoStreamType::PixelFormat::kRgb24:
return os << "kRgb24";
case VideoStreamType::PixelFormat::kRgb32:
return os << "kRgb24";
case VideoStreamType::PixelFormat::kMjpeg:
return os << "kRgb24";
case VideoStreamType::PixelFormat::kMt21:
return os << "kRgb24";
}
return os;
}
std::ostream& operator<<(std::ostream& os, VideoStreamType::ColorSpace value) {
switch (value) {
case VideoStreamType::ColorSpace::kUnknown:
return os << "kUnknown";
case VideoStreamType::ColorSpace::kNotApplicable:
return os << "kNotApplicable";
case VideoStreamType::ColorSpace::kJpeg:
return os << "kJpeg";
case VideoStreamType::ColorSpace::kHdRec709:
return os << "kHdRec709";
case VideoStreamType::ColorSpace::kSdRec601:
return os << "kSdRec601";
}
return os;
}
std::ostream& operator<<(
std::ostream& os,
const std::unique_ptr<Bytes>& value) {
if (value == nullptr) {
return os << "<nullptr>";
} else {
return os << value->size() << " bytes";
}
}
std::ostream& operator<<(std::ostream& os, Range<bool> value) {
if (value.min) {
return os << "true";
} else if (value.max) {
return os << "false..true";
} else {
return os << "false";
}
}
} // namespace media
} // namespace mojo