static void dump_stereo3d(void *ctx, AVPacketSideData *sd) { AVStereo3D *stereo; if (sd->size < sizeof(*stereo)) { av_log(ctx, AV_LOG_INFO, "invalid data"); return; } stereo = (AVStereo3D *)sd->data; av_log(ctx, AV_LOG_INFO, "%s", av_stereo3d_type_name(stereo->type)); if (stereo->flags & AV_STEREO3D_FLAG_INVERT) av_log(ctx, AV_LOG_INFO, " (inverted)"); }
static void show_stream(InputFile *ifile, InputStream *ist) { AVFormatContext *fmt_ctx = ifile->fmt_ctx; AVStream *stream = ist->st; AVCodecParameters *par; AVCodecContext *dec_ctx; const AVCodecDescriptor *codec_desc; const char *profile; char val_str[128]; AVRational display_aspect_ratio, *sar = NULL; const AVPixFmtDescriptor *desc; probe_object_header("stream"); probe_int("index", stream->index); par = stream->codecpar; dec_ctx = ist->dec_ctx; codec_desc = avcodec_descriptor_get(par->codec_id); if (codec_desc) { probe_str("codec_name", codec_desc->name); probe_str("codec_long_name", codec_desc->long_name); } else { probe_str("codec_name", "unknown"); } probe_str("codec_type", media_type_string(par->codec_type)); /* print AVI/FourCC tag */ av_get_codec_tag_string(val_str, sizeof(val_str), par->codec_tag); probe_str("codec_tag_string", val_str); probe_str("codec_tag", tag_string(val_str, sizeof(val_str), par->codec_tag)); /* print profile, if there is one */ profile = avcodec_profile_name(par->codec_id, par->profile); if (profile) probe_str("profile", profile); switch (par->codec_type) { case AVMEDIA_TYPE_VIDEO: probe_int("width", par->width); probe_int("height", par->height); if (dec_ctx) { probe_int("coded_width", dec_ctx->coded_width); probe_int("coded_height", dec_ctx->coded_height); probe_int("has_b_frames", dec_ctx->has_b_frames); } if (dec_ctx && dec_ctx->sample_aspect_ratio.num) sar = &dec_ctx->sample_aspect_ratio; else if (par->sample_aspect_ratio.num) sar = &par->sample_aspect_ratio; else if (stream->sample_aspect_ratio.num) sar = &stream->sample_aspect_ratio; if (sar) { probe_str("sample_aspect_ratio", rational_string(val_str, sizeof(val_str), ":", sar)); av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den, par->width * sar->num, par->height * sar->den, 1024*1024); probe_str("display_aspect_ratio", rational_string(val_str, sizeof(val_str), ":", &display_aspect_ratio)); } desc = av_pix_fmt_desc_get(par->format); probe_str("pix_fmt", desc ? desc->name : "unknown"); probe_int("level", par->level); probe_str("color_range", av_color_range_name (par->color_range)); probe_str("color_space", av_color_space_name (par->color_space)); probe_str("color_trc", av_color_transfer_name (par->color_trc)); probe_str("color_pri", av_color_primaries_name(par->color_primaries)); probe_str("chroma_loc", av_chroma_location_name (par->chroma_location)); break; case AVMEDIA_TYPE_AUDIO: probe_str("sample_rate", value_string(val_str, sizeof(val_str), par->sample_rate, unit_hertz_str)); probe_int("channels", par->channels); probe_int("bits_per_sample", av_get_bits_per_sample(par->codec_id)); break; } if (fmt_ctx->iformat->flags & AVFMT_SHOW_IDS) probe_int("id", stream->id); probe_str("avg_frame_rate", rational_string(val_str, sizeof(val_str), "/", &stream->avg_frame_rate)); if (par->bit_rate) probe_str("bit_rate", value_string(val_str, sizeof(val_str), par->bit_rate, unit_bit_per_second_str)); probe_str("time_base", rational_string(val_str, sizeof(val_str), "/", &stream->time_base)); probe_str("start_time", time_value_string(val_str, sizeof(val_str), stream->start_time, &stream->time_base)); probe_str("duration", time_value_string(val_str, sizeof(val_str), stream->duration, &stream->time_base)); if (stream->nb_frames) probe_int("nb_frames", stream->nb_frames); probe_dict(stream->metadata, "tags"); if (stream->nb_side_data) { int i, j; probe_object_header("sidedata"); for (i = 0; i < stream->nb_side_data; i++) { const AVPacketSideData* sd = &stream->side_data[i]; AVStereo3D *stereo; switch (sd->type) { case AV_PKT_DATA_DISPLAYMATRIX: probe_object_header("displaymatrix"); probe_array_header("matrix", 1); for (j = 0; j < 9; j++) probe_int(NULL, ((int32_t *)sd->data)[j]); probe_array_footer("matrix", 1); probe_int("rotation", av_display_rotation_get((int32_t *)sd->data)); probe_object_footer("displaymatrix"); break; case AV_PKT_DATA_STEREO3D: stereo = (AVStereo3D *)sd->data; probe_object_header("stereo3d"); probe_str("type", av_stereo3d_type_name(stereo->type)); probe_int("inverted", !!(stereo->flags & AV_STEREO3D_FLAG_INVERT)); probe_object_footer("stereo3d"); break; } } probe_object_footer("sidedata"); } probe_object_footer("stream"); }