blob: 72e25ac11e2a3aacef774b2edbb071bfa4511972 [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 <ostream>
#include "services/media/framework_ffmpeg/ffmpeg_formatting.h"
extern "C" {
#include "third_party/ffmpeg/libavformat/avformat.h"
#include "third_party/ffmpeg/libavformat/internal.h"
#include "third_party/ffmpeg/libavutil/dict.h"
}
namespace mojo {
namespace media {
const char* safe(const char* s) {
return s == nullptr ? "<nullptr>" : s;
}
std::ostream& operator<<(std::ostream& os,
const struct AVCodecTag* const* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else if (*value == nullptr) {
return os << "&<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "AVCodecID id: " << (*value)->id << std::endl;
os << begl << "unsigned int tag: " << (*value)->tag << std::endl;
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVInputFormat* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "const char *name: " << value->name << std::endl;
os << begl << "const char *long_name: " << value->long_name << std::endl;
os << begl << "int flags: " << AVFMTFlags(value->flags);
os << begl << "const char *extensions: " << safe(value->extensions)
<< std::endl;
os << begl << "const AVCodecTag * const *codec_tag: " << value->codec_tag;
os << begl << "const char *mime_type: " << safe(value->mime_type)
<< std::endl;
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVOutputFormat* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "const char *name: " << safe(value->name) << std::endl;
os << begl << "const char *long_name: " << safe(value->long_name)
<< std::endl;
os << begl << "const char *mime_type: " << safe(value->mime_type)
<< std::endl;
os << begl << "const char *extensions: " << safe(value->extensions)
<< std::endl;
os << begl << "AVCodecID audio_codec: " << value->audio_codec;
os << begl << "AVCodecID video_codec: " << value->video_codec;
os << begl << "AVCodecID subtitle_codec: " << value->subtitle_codec;
os << begl << "int flags: " << AVFMTFlags(value->flags);
os << begl << "const AVCodecTag * const *codec_tag: " << value->codec_tag;
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVIOContext* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
return os << "TODO" << std::endl;
}
}
std::ostream& operator<<(std::ostream& os, AVFMTCTXFlags value) {
if (value.flags_ == 0) {
return os << "<none>" << std::endl;
}
if (value.flags_ & AVFMTCTX_NOHEADER) {
return os << "AVFMTCTX_NOHEADER" << std::endl;
} else {
return os << "<UNKNOWN AVFMTCTX_: " << value.flags_ << ">" << std::endl;
}
}
std::ostream& operator<<(std::ostream& os, const AVRational* value) {
if (value == nullptr) {
return os << "<none>" << std::endl;
} else {
os << std::endl;
}
os << indent;
for (int index = 0; value->num != 0 || value->den != 0; ++value, ++index) {
os << begl << "[" << index << "]: " << *value;
}
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const int* value) {
if (value == nullptr) {
return os << "<none>" << std::endl;
} else {
os << std::endl;
}
os << indent;
for (int index = 0; *value != 0; ++value, ++index) {
os << begl << "[" << index << "]: " << *value << std::endl;
}
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const uint64_t* value) {
if (value == nullptr) {
return os << "<none>" << std::endl;
} else {
os << std::endl;
}
os << indent;
for (int index = 0; *value != 0; ++value, ++index) {
os << begl << "[" << index << "]: " << *value << std::endl;
}
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVSampleFormat* value) {
if (value == nullptr) {
return os << "<none>" << std::endl;
} else {
os << std::endl;
}
os << indent;
for (int index = 0; int(*value) != 0; ++value, ++index) {
os << begl << "[" << index << "]: " << *value;
}
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVCodec* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "const char *name: " << safe(value->name) << std::endl;
os << begl << "const char *long_name: " << safe(value->long_name)
<< std::endl;
os << begl << "AVMediaType type: " << value->type;
os << begl << "AVCodecID id: " << value->id;
os << begl << "int capabilities: " << value->capabilities << std::endl;
os << begl
<< "AVRational *supported_framerates: " << value->supported_framerates;
os << begl
<< "const int *supported_samplerates: " << value->supported_samplerates;
os << begl << "const AVSampleFormat *sample_fmts: " << value->sample_fmts;
os << begl << "const uint64_t *channel_layouts: " << value->channel_layouts;
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVCodecContext* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "AVMediaType codec_type: " << value->codec_type;
os << begl << "const struct AVCodec *codec: " << value->codec;
os << begl << "AVCodecID codec_id: " << value->codec_id;
os << begl << "int bit_rate: " << value->bit_rate << std::endl;
os << begl << "int extradata_size: " << value->extradata_size << std::endl;
os << begl << "int width: " << value->width << std::endl;
os << begl << "int height: " << value->height << std::endl;
os << begl << "int coded_width: " << value->coded_width << std::endl;
os << begl << "int coded_height: " << value->coded_height << std::endl;
os << begl << "int gop_size: " << value->gop_size << std::endl;
os << begl << "int sample_rate: " << value->sample_rate << std::endl;
os << begl << "int channels: " << value->channels << std::endl;
os << begl << "AVSampleFormat sample_fmt: " << value->sample_fmt;
os << begl << "int frame_size: " << value->frame_size << std::endl;
os << begl << "int frame_number: " << value->frame_number << std::endl;
os << begl << "int block_align: " << value->block_align << std::endl;
os << begl << "int cutoff: " << value->cutoff << std::endl;
os << begl << "uint64_t channel_layout: " << value->channel_layout
<< std::endl;
os << begl
<< "uint64_t request_channel_layout: " << value->request_channel_layout
<< std::endl;
os << begl
<< "AVAudioServiceType audio_service_type: " << value->audio_service_type
<< std::endl;
os << begl
<< "AVSampleFormat request_sample_fmt: " << value->request_sample_fmt;
os << begl << "int profile: " << value->profile << std::endl;
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVRational& value) {
return os << value.num << "/" << value.den << std::endl;
}
std::ostream& operator<<(std::ostream& os, const AVStream* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "int index: " << value->index << std::endl;
os << begl << "int id: " << value->id << std::endl;
os << begl << "AVCodecContext *codec: " << value->codec;
os << begl << "AVRational time_base: " << value->time_base;
os << begl << "int64_t start_time: " << value->start_time << std::endl;
os << begl << "int64_t duration: " << value->duration << std::endl;
os << begl << "int64_t nb_frames: " << value->nb_frames << std::endl;
os << begl << "int disposition: " << AV_DISPOSITIONFlags(value->disposition);
os << begl << "AVDiscard discard: " << value->discard;
os << begl
<< "AVRational sample_aspect_ratio: " << value->sample_aspect_ratio;
os << begl << "AVDictionary *metadata: " << value->metadata;
os << begl << "AVRational avg_frame_rate: " << value->avg_frame_rate;
os << begl << "AVPacket attached_pic: " << &value->attached_pic;
os << begl << "int nb_side_data: " << value->nb_side_data << std::endl;
os << begl << "AVPacketSideData side_data: "
<< AVPacketSideDataArray(value->side_data, value->nb_side_data);
os << begl << "int event_flags: " << AVSTREAM_EVENTFlags(value->event_flags);
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVStreamArray& value) {
if (value.items_ == nullptr) {
return os << "<nullptr>" << std::endl;
} else if (value.count_ == 0) {
return os << "<empty>" << std::endl;
} else {
os << std::endl;
}
os << indent;
for (unsigned int i = 0; i < value.count_; i++) {
os << begl << "[" << i << "] " << value.items_[i];
}
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, AVFMTFlags value) {
if (value.flags_ == 0) {
os << "<none>" << std::endl;
return os;
} else {
os << std::endl;
}
os << indent;
if (value.flags_ & AVFMT_FLAG_GENPTS) {
os << begl << "AVFMT_FLAG_GENPTS" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_IGNIDX) {
os << begl << "AVFMT_FLAG_IGNIDX" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_NONBLOCK) {
os << begl << "AVFMT_FLAG_NONBLOCK" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_IGNDTS) {
os << begl << "AVFMT_FLAG_IGNDTS" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_NOFILLIN) {
os << begl << "AVFMT_FLAG_NOFILLIN" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_NOPARSE) {
os << begl << "AVFMT_FLAG_NOPARSE" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_NOBUFFER) {
os << begl << "AVFMT_FLAG_NOBUFFER" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_CUSTOM_IO) {
os << begl << "AVFMT_FLAG_CUSTOM_IO" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_DISCARD_CORRUPT) {
os << begl << "AVFMT_FLAG_DISCARD_CORRUPT" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_FLUSH_PACKETS) {
os << begl << "AVFMT_FLAG_FLUSH_PACKETS" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_BITEXACT) {
os << begl << "AVFMT_FLAG_BITEXACT" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_MP4A_LATM) {
os << begl << "AVFMT_FLAG_MP4A_LATM" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_SORT_DTS) {
os << begl << "AVFMT_FLAG_SORT_DTS" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_PRIV_OPT) {
os << begl << "AVFMT_FLAG_PRIV_OPT" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_KEEP_SIDE_DATA) {
os << begl << "AVFMT_FLAG_KEEP_SIDE_DATA" << std::endl;
}
if (value.flags_ & AVFMT_FLAG_FAST_SEEK) {
os << begl << "AVFMT_FLAG_FAST_SEEK" << std::endl;
}
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, AV_DISPOSITIONFlags value) {
if (value.flags_ == 0) {
os << "<none>" << std::endl;
return os;
} else {
os << std::endl;
}
os << indent;
if (value.flags_ & AV_DISPOSITION_DEFAULT) {
os << begl << "AV_DISPOSITION_DEFAULT 0x0001" << std::endl;
}
if (value.flags_ & AV_DISPOSITION_DUB) {
os << begl << "AV_DISPOSITION_DUB 0x0002" << std::endl;
}
if (value.flags_ & AV_DISPOSITION_ORIGINAL) {
os << begl << "AV_DISPOSITION_ORIGINAL 0x0004" << std::endl;
}
if (value.flags_ & AV_DISPOSITION_COMMENT) {
os << begl << "AV_DISPOSITION_COMMENT 0x0008" << std::endl;
}
if (value.flags_ & AV_DISPOSITION_LYRICS) {
os << begl << "AV_DISPOSITION_LYRICS 0x0010" << std::endl;
}
if (value.flags_ & AV_DISPOSITION_KARAOKE) {
os << begl << "AV_DISPOSITION_KARAOKE 0x0020" << std::endl;
}
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVBufferRef* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "AVBuffer *buffer: "
<< (value->buffer == nullptr ? "<nullptr>" : "TODO") << std::endl;
os << begl
<< "uint8_t *data: " << (value->data == nullptr ? "<nullptr>" : "<opaque>")
<< std::endl;
os << begl << "int size: " << value->size << std::endl;
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVFrame* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "uint8_t *data[AV_NUM_DATA_POINTERS]: ";
{
os << indent;
bool any = false;
for (int i = 0; i < AV_NUM_DATA_POINTERS; i++) {
if (value->data[i] != nullptr) {
if (!any) {
any = true;
os << std::endl;
}
os << begl << "[" << i << "]: <opaque>" << std::endl;
}
}
if (!any) {
os << "<all nullptr>" << std::endl;
}
os << outdent;
}
os << begl << "int linesize[AV_NUM_DATA_POINTERS]: ";
{
os << indent;
bool any = false;
for (int i = 0; i < AV_NUM_DATA_POINTERS; i++) {
if (value->linesize[i] != 0) {
if (!any) {
any = true;
os << std::endl;
}
os << begl << "[" << i << "]: " << value->linesize[i] << std::endl;
}
}
if (!any) {
os << "<all zero>" << std::endl;
}
os << outdent;
}
os << begl << "uint8_t **extended_data: "
<< (value->extended_data == nullptr ? "<nullptr>" : "<opaque>")
<< std::endl;
os << begl << "int width: " << value->width << std::endl;
os << begl << "int height: " << value->height << std::endl;
os << begl << "int nb_samples: " << value->nb_samples << std::endl;
os << begl << "int format: " << value->format << std::endl;
os << begl << "int key_frame: " << value->key_frame << std::endl;
os << begl << "int64_t pts: " << value->pts << std::endl;
os << begl << "int64_t pkt_pts: " << value->pkt_pts << std::endl;
os << begl << "int64_t pkt_dts: " << value->pkt_dts << std::endl;
os << begl << "int sample_rate: " << value->sample_rate << std::endl;
os << begl << "AVBufferRef *buf[AV_NUM_DATA_POINTERS]: ";
{
os << indent;
bool any = false;
for (int i = 0; i < AV_NUM_DATA_POINTERS; i++) {
if (value->buf[i] != nullptr) {
if (!any) {
any = true;
os << std::endl;
}
os << begl << "[" << i << "]:" << value->buf[i];
}
}
if (!any) {
os << "<all nullptr>" << std::endl;
}
os << outdent;
}
os << begl << "int channels: " << value->channels << std::endl;
os << begl << "int pkt_size: " << value->pkt_size << std::endl;
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVPacket* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "AVBufferRef *buf: " << value->buf;
os << begl << "int64_t pts: " << value->pts << std::endl;
os << begl << "int64_t dts: " << value->dts << std::endl;
os << begl
<< "uint8_t *data: " << (value->data == nullptr ? "<nullptr>" : "<opaque>")
<< std::endl;
os << begl << "int size: " << value->size << std::endl;
os << begl << "int stream_index: " << value->stream_index << std::endl;
os << begl << "int flags: " << value->flags << std::endl;
os << begl << "AVPacketSideData *side_data: " << value->side_data;
os << begl << "int side_data_elems: " << value->side_data_elems << std::endl;
os << begl << "int duration: " << value->duration << std::endl;
os << begl << "int64_t pos: " << value->pos << std::endl;
os << begl << "int64_t convergence_duration: " << value->convergence_duration
<< std::endl;
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVPacketSideData* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
return os << "TODO" << std::endl;
}
}
std::ostream& operator<<(std::ostream& os, const AVPacketSideDataArray& value) {
if (value.items_ == nullptr) {
return os << "<nullptr>" << std::endl;
} else if (value.count_ == 0) {
return os << "<empty>" << std::endl;
} else {
os << std::endl;
}
os << indent;
for (unsigned int i = 0; i < value.count_; i++) {
os << begl << "[" << i << "] " << &value.items_[i];
}
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVProgram* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
return os << "TODO" << std::endl;
}
}
std::ostream& operator<<(std::ostream& os, const AVProgramArray& value) {
if (value.items_ == nullptr) {
return os << "<nullptr>" << std::endl;
} else if (value.count_ == 0) {
return os << "<empty>" << std::endl;
} else {
os << std::endl;
}
os << indent;
for (unsigned int i = 0; i < value.count_; i++) {
os << begl << "[" << i << "]" << value.items_[i];
}
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, const AVChapter* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
return os << "TODO" << std::endl;
}
}
std::ostream& operator<<(std::ostream& os, const AVChapterArray& value) {
if (value.items_ == nullptr) {
return os << "<nullptr>" << std::endl;
} else if (value.count_ == 0) {
return os << "<empty>" << std::endl;
} else {
os << std::endl;
}
os << indent;
for (unsigned int i = 0; i < value.count_; i++) {
os << begl << "[" << i << "]" << value.items_[i];
}
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, AVCodecID value) {
return os << avcodec_get_name(value) << " (" << static_cast<int>(value) << ")"
<< std::endl;
}
std::ostream& operator<<(std::ostream& os, const AVDictionary* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
}
AVDictionaryEntry* entry =
av_dict_get(value, "", nullptr, AV_DICT_IGNORE_SUFFIX);
if (entry == nullptr) {
return os << "<empty>" << std::endl;
}
os << std::endl;
os << indent;
while (entry != nullptr) {
os << begl << safe(entry->key) << ": " << safe(entry->value) << std::endl;
entry = av_dict_get(value, "", entry, AV_DICT_IGNORE_SUFFIX);
}
return os << outdent;
}
std::ostream& operator<<(std::ostream& os, AVFMT_EVENTFlags value) {
if (value.flags_ == 0) {
os << "<none>" << std::endl;
return os;
}
if (value.flags_ & AVFMT_EVENT_FLAG_METADATA_UPDATED) {
return os << "AVFMT_EVENT_FLAG_METADATA_UPDATED" << std::endl;
} else {
return os << "<UNKNOWN AVFMT_EVENT_FLAG_: " << value.flags_ << ">"
<< std::endl;
}
}
std::ostream& operator<<(std::ostream& os, AVSTREAM_EVENTFlags value) {
if (value.flags_ == 0) {
os << "<none>" << std::endl;
return os;
}
if (value.flags_ & AVSTREAM_EVENT_FLAG_METADATA_UPDATED) {
return os << "AVSTREAM_EVENT_FLAG_METADATA_UPDATED" << std::endl;
} else {
return os << "<UNKNOWN AVSTREAM_EVENT_FLAG_: " << value.flags_ << ">"
<< std::endl;
}
}
std::ostream& operator<<(std::ostream& os, AVFMT_AVOID_NEG_TSFlags value) {
switch (value.flags_) {
case AVFMT_AVOID_NEG_TS_AUTO:
return os << "AVFMT_AVOID_NEG_TS_AUTO" << std::endl;
case AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE:
return os << "AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE" << std::endl;
case AVFMT_AVOID_NEG_TS_MAKE_ZERO:
return os << "AVFMT_AVOID_NEG_TS_MAKE_ZERO" << std::endl;
default:
return os << "<UNKNOWN AVFMT_AVOID_NEG_TS_: " << value.flags_ << ">"
<< std::endl;
}
}
std::ostream& operator<<(std::ostream& os, AVMediaType value) {
switch (value) {
case AVMEDIA_TYPE_UNKNOWN:
return os << "AVMEDIA_TYPE_UNKNOWN" << std::endl;
case AVMEDIA_TYPE_VIDEO:
return os << "AVMEDIA_TYPE_VIDEO" << std::endl;
case AVMEDIA_TYPE_AUDIO:
return os << "AVMEDIA_TYPE_AUDIO" << std::endl;
case AVMEDIA_TYPE_DATA:
return os << "AVMEDIA_TYPE_DATA" << std::endl;
case AVMEDIA_TYPE_SUBTITLE:
return os << "AVMEDIA_TYPE_SUBTITLE" << std::endl;
case AVMEDIA_TYPE_ATTACHMENT:
return os << "AVMEDIA_TYPE_ATTACHMENT" << std::endl;
case AVMEDIA_TYPE_NB:
return os << "AVMEDIA_TYPE_NB" << std::endl;
default:
return os << "<UNKNOWN AVMediaType: " << static_cast<int>(value) << ">"
<< std::endl;
}
}
std::ostream& operator<<(std::ostream& os, AVSampleFormat value) {
switch (value) {
case AV_SAMPLE_FMT_NONE:
return os << "AV_SAMPLE_FMT_NONE" << std::endl;
case AV_SAMPLE_FMT_U8:
return os << "AV_SAMPLE_FMT_U8" << std::endl;
case AV_SAMPLE_FMT_S16:
return os << "AV_SAMPLE_FMT_S16" << std::endl;
case AV_SAMPLE_FMT_S32:
return os << "AV_SAMPLE_FMT_S32" << std::endl;
case AV_SAMPLE_FMT_FLT:
return os << "AV_SAMPLE_FMT_FLT" << std::endl;
case AV_SAMPLE_FMT_DBL:
return os << "AV_SAMPLE_FMT_DBL" << std::endl;
case AV_SAMPLE_FMT_U8P:
return os << "AV_SAMPLE_FMT_U8P" << std::endl;
case AV_SAMPLE_FMT_S16P:
return os << "AV_SAMPLE_FMT_S16P" << std::endl;
case AV_SAMPLE_FMT_S32P:
return os << "AV_SAMPLE_FMT_S32P" << std::endl;
case AV_SAMPLE_FMT_FLTP:
return os << "AV_SAMPLE_FMT_FLTP" << std::endl;
case AV_SAMPLE_FMT_DBLP:
return os << "AV_SAMPLE_FMT_DBLP" << std::endl;
case AV_SAMPLE_FMT_NB:
return os << "AV_SAMPLE_FMT_NB" << std::endl;
default:
return os << "<UNKNOWN AVSampleFormat: " << static_cast<int>(value) << ">"
<< std::endl;
}
}
std::ostream& operator<<(std::ostream& os, AVColorSpace value) {
switch (value) {
case AVCOL_SPC_RGB:
return os << "AVCOL_SPC_RGB";
case AVCOL_SPC_BT709:
return os << "AVCOL_SPC_BT709";
case AVCOL_SPC_UNSPECIFIED:
return os << "AVCOL_SPC_UNSPECIFIED";
case AVCOL_SPC_RESERVED:
return os << "AVCOL_SPC_RESERVED";
case AVCOL_SPC_FCC:
return os << "AVCOL_SPC_FCC";
case AVCOL_SPC_BT470BG:
return os << "AVCOL_SPC_BT470BG";
case AVCOL_SPC_SMPTE170M:
return os << "AVCOL_SPC_SMPTE170M";
case AVCOL_SPC_SMPTE240M:
return os << "AVCOL_SPC_SMPTE240M";
case AVCOL_SPC_YCOCG:
return os << "AVCOL_SPC_YCOCG";
case AVCOL_SPC_BT2020_NCL:
return os << "AVCOL_SPC_BT2020_NCL";
case AVCOL_SPC_BT2020_CL:
return os << "AVCOL_SPC_BT2020_CL";
case AVCOL_SPC_NB:
return os << "AVCOL_SPC_NB";
default:
return os << "<UNKNOWN AVColorSpace: " << static_cast<int>(value) << ">";
}
}
std::ostream& operator<<(std::ostream& os, enum AVDiscard value) {
switch (value) {
case AVDISCARD_NONE:
return os << "AVDISCARD_NONE" << std::endl;
case AVDISCARD_DEFAULT:
return os << "AVDISCARD_DEFAULT" << std::endl;
case AVDISCARD_NONREF:
return os << "AVDISCARD_NONREF" << std::endl;
case AVDISCARD_BIDIR:
return os << "AVDISCARD_BIDIR" << std::endl;
case AVDISCARD_NONINTRA:
return os << "AVDISCARD_NONINTRA" << std::endl;
case AVDISCARD_NONKEY:
return os << "AVDISCARD_NONKEY" << std::endl;
case AVDISCARD_ALL:
return os << "AVDISCARD_ALL" << std::endl;
default:
return os << "<UNKNOWN AVDISCARD_: " << static_cast<int>(value) << ">"
<< std::endl;
}
}
std::ostream& operator<<(std::ostream& os, AVDurationEstimationMethod value) {
switch (value) {
case AVFMT_DURATION_FROM_PTS:
return os << "AVFMT_DURATION_FROM_PTS" << std::endl;
case AVFMT_DURATION_FROM_STREAM:
return os << "AVFMT_DURATION_FROM_STREAM" << std::endl;
case AVFMT_DURATION_FROM_BITRATE:
return os << "AVFMT_DURATION_FROM_BITRATE" << std::endl;
default:
return os << "<UNKNOWN AVDurationEstimationMethod: "
<< static_cast<int>(value) << ">" << std::endl;
}
}
std::ostream& operator<<(std::ostream& os, const AVFormatContext* value) {
if (value == nullptr) {
return os << "<nullptr>" << std::endl;
} else {
os << std::endl;
}
os << indent;
os << begl << "AVInputFormat *iformat: " << value->iformat;
os << begl << "AVOutputFormat *oformat: " << value->oformat;
os << begl << "AVIOContext *pb: " << value->pb;
os << begl << "int ctx_flags: " << AVFMTCTXFlags(value->ctx_flags);
os << begl << "unsigned int nb_streams: " << value->nb_streams << std::endl;
os << begl << "AVStream **streams: " << AVStreamArray(value->streams,
value->nb_streams);
os << begl << "char filename[1024]: " << value->filename << std::endl;
os << begl << "int64_t start_time: " << value->start_time << std::endl;
os << begl << "int64_t duration: " << value->duration << std::endl;
os << begl << "int64_t bit_rate: " << value->bit_rate << std::endl;
os << begl << "unsigned int packet_size: " << value->packet_size << std::endl;
os << begl << "int max_delay: " << value->max_delay << std::endl;
os << begl << "int flags: " << AVFMTFlags(value->flags);
os << begl << "int64_t probesize: " << value->probesize << std::endl;
os << begl << "unsigned int nb_programs: " << value->nb_programs << std::endl;
os << begl << "AVProgram **programs: " << AVProgramArray(value->programs,
value->nb_programs);
os << begl << "AVCodecID video_codec_id: " << value->video_codec_id;
os << begl << "AVCodecID audio_codec_id: " << value->audio_codec_id;
os << begl << "AVCodecID subtitle_codec_id: " << value->subtitle_codec_id;
os << begl << "unsigned int max_index_size: " << value->max_index_size
<< std::endl;
os << begl << "unsigned int max_picture_buffer: " << value->max_picture_buffer
<< std::endl;
os << begl << "unsigned int nb_chapters: " << value->nb_chapters << std::endl;
os << begl << "AVChapter **chapters: " << AVChapterArray(value->chapters,
value->nb_chapters);
os << begl << "AVDictionary *metadata: " << value->metadata;
os << begl << "int64_t start_time_realtime: " << value->start_time_realtime
<< std::endl;
os << begl << "int fps_probe_size: " << value->fps_probe_size << std::endl;
os << begl << "int error_recognition: " << value->error_recognition
<< std::endl;
os << begl << "int64_t max_interleave_delta: " << value->max_interleave_delta
<< std::endl;
os << begl << "int strict_std_compliance: " << value->strict_std_compliance
<< std::endl;
os << begl << "int event_flags: " << AVFMT_EVENTFlags(value->flags);
os << begl << "int max_ts_probe: " << value->max_ts_probe << std::endl;
os << begl << "int avoid_negative_ts: "
<< AVFMT_AVOID_NEG_TSFlags(value->avoid_negative_ts);
os << begl << "int ts_id: " << value->ts_id << std::endl;
os << begl << "int audio_preload: " << value->audio_preload << std::endl;
os << begl << "int max_chunk_duration: " << value->max_chunk_duration
<< std::endl;
os << begl << "int max_chunk_size: " << value->max_chunk_size << std::endl;
os << begl << "int use_wallclock_as_timestamps: "
<< value->use_wallclock_as_timestamps << std::endl;
os << begl << "int avio_flags: " << value->avio_flags << std::endl;
os << begl << "AVDurationEstimationMethod duration_estimation_method: "
<< value->duration_estimation_method;
os << begl << "int64_t skip_initial_bytes: " << value->skip_initial_bytes
<< std::endl;
os << begl << "TODO(dalesat): more" << std::endl;
return os << outdent;
}
} // namespace media
} // namespace mojo