X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=ffprobe.c;h=ef3bcc63f6f24ef3597000a5e50d0831a03a72dc;hb=be524ffc16bf14cab0ad112b0dcb48d09a2a40ff;hp=46c232e1daf35ae7146e0ea2399c9fbe54224a0e;hpb=93cf43ec3febaddfb34522bbcc2f04038c8e6e9e;p=ffmpeg diff --git a/ffprobe.c b/ffprobe.c index 46c232e1daf..ef3bcc63f6f 100644 --- a/ffprobe.c +++ b/ffprobe.c @@ -66,6 +66,12 @@ static int do_show_data = 0; static int do_show_program_version = 0; static int do_show_library_versions = 0; +static int do_show_chapter_tags = 0; +static int do_show_format_tags = 0; +static int do_show_frame_tags = 0; +static int do_show_program_tags = 0; +static int do_show_stream_tags = 0; + static int show_value_unit = 0; static int use_value_prefix = 0; static int use_byte_value_binary_prefix = 0; @@ -1719,6 +1725,8 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream, print_time("pkt_pts_time", frame->pkt_pts, &stream->time_base); print_ts ("pkt_dts", frame->pkt_dts); print_time("pkt_dts_time", frame->pkt_dts, &stream->time_base); + print_ts ("best_effort_timestamp", av_frame_get_best_effort_timestamp(frame)); + print_time("best_effort_timestamp_time", av_frame_get_best_effort_timestamp(frame), &stream->time_base); print_duration_ts ("pkt_duration", av_frame_get_pkt_duration(frame)); print_duration_time("pkt_duration_time", av_frame_get_pkt_duration(frame), &stream->time_base); if (av_frame_get_pkt_pos (frame) != -1) print_fmt ("pkt_pos", "%"PRId64, av_frame_get_pkt_pos(frame)); @@ -1764,7 +1772,8 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream, print_str_opt("channel_layout", "unknown"); break; } - show_tags(w, av_frame_get_metadata(frame), SECTION_ID_FRAME_TAGS); + if (do_show_frame_tags) + show_tags(w, av_frame_get_metadata(frame), SECTION_ID_FRAME_TAGS); writer_print_section_footer(w); @@ -1780,7 +1789,6 @@ static av_always_inline int process_frame(WriterContext *w, AVSubtitle sub; int ret = 0, got_frame = 0; - avcodec_get_frame_defaults(frame); if (dec_ctx->codec) { switch (dec_ctx->codec_type) { case AVMEDIA_TYPE_VIDEO: @@ -1844,7 +1852,7 @@ static int read_interval_packets(WriterContext *w, AVFormatContext *fmt_ctx, const ReadInterval *interval, int64_t *cur_ts) { AVPacket pkt, pkt1; - AVFrame frame; + AVFrame *frame = NULL; int ret = 0, i = 0, frame_count = 0; int64_t start = -INT64_MAX, end = interval->end; int has_start = 0, has_end = interval->has_end && !interval->end_is_offset; @@ -1878,6 +1886,11 @@ static int read_interval_packets(WriterContext *w, AVFormatContext *fmt_ctx, } } + frame = av_frame_alloc(); + if (!frame) { + ret = AVERROR(ENOMEM); + goto end; + } while (!av_read_frame(fmt_ctx, &pkt)) { if (selected_streams[pkt.stream_index]) { AVRational tb = fmt_ctx->streams[pkt.stream_index]->time_base; @@ -1910,7 +1923,7 @@ static int read_interval_packets(WriterContext *w, AVFormatContext *fmt_ctx, } if (do_read_frames) { pkt1 = pkt; - while (pkt1.size && process_frame(w, fmt_ctx, &frame, &pkt1) > 0); + while (pkt1.size && process_frame(w, fmt_ctx, frame, &pkt1) > 0); } } av_free_packet(&pkt); @@ -1922,10 +1935,11 @@ static int read_interval_packets(WriterContext *w, AVFormatContext *fmt_ctx, for (i = 0; i < fmt_ctx->nb_streams; i++) { pkt.stream_index = i; if (do_read_frames) - while (process_frame(w, fmt_ctx, &frame, &pkt) > 0); + while (process_frame(w, fmt_ctx, frame, &pkt) > 0); } end: + av_frame_free(&frame); if (ret < 0) { av_log(NULL, AV_LOG_ERROR, "Could not read packets in interval "); log_read_interval(interval, NULL, AV_LOG_ERROR); @@ -2116,7 +2130,8 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id writer_print_section_footer(w); } - ret = show_tags(w, stream->metadata, in_program ? SECTION_ID_PROGRAM_STREAM_TAGS : SECTION_ID_STREAM_TAGS); + if (do_show_stream_tags) + ret = show_tags(w, stream->metadata, in_program ? SECTION_ID_PROGRAM_STREAM_TAGS : SECTION_ID_STREAM_TAGS); writer_print_section_footer(w); av_bprint_finalize(&pbuf, NULL); @@ -2155,7 +2170,8 @@ static int show_program(WriterContext *w, AVFormatContext *fmt_ctx, AVProgram *p print_time("start_time", program->start_time, &AV_TIME_BASE_Q); print_ts("end_pts", program->end_time); print_time("end_time", program->end_time, &AV_TIME_BASE_Q); - ret = show_tags(w, program->metadata, SECTION_ID_PROGRAM_TAGS); + if (do_show_program_tags) + ret = show_tags(w, program->metadata, SECTION_ID_PROGRAM_TAGS); if (ret < 0) goto end; @@ -2206,7 +2222,8 @@ static int show_chapters(WriterContext *w, AVFormatContext *fmt_ctx) print_time("start_time", chapter->start, &chapter->time_base); print_int("end", chapter->end); print_time("end_time", chapter->end, &chapter->time_base); - ret = show_tags(w, chapter->metadata, SECTION_ID_CHAPTER_TAGS); + if (do_show_chapter_tags) + ret = show_tags(w, chapter->metadata, SECTION_ID_CHAPTER_TAGS); writer_print_section_footer(w); } writer_print_section_footer(w); @@ -2236,7 +2253,8 @@ static int show_format(WriterContext *w, AVFormatContext *fmt_ctx) if (fmt_ctx->bit_rate > 0) print_val ("bit_rate", fmt_ctx->bit_rate, unit_bit_per_second_str); else print_str_opt("bit_rate", "N/A"); print_int("probe_score", av_format_get_probe_score(fmt_ctx)); - ret = show_tags(w, fmt_ctx->metadata, SECTION_ID_FORMAT_TAGS); + if (do_show_format_tags) + ret = show_tags(w, fmt_ctx->metadata, SECTION_ID_FORMAT_TAGS); writer_print_section_footer(w); fflush(stdout); @@ -2381,6 +2399,7 @@ static int probe_file(WriterContext *wctx, const char *filename) writer_print_section_footer(wctx); CHECK_END; } + if (do_show_programs) { ret = show_programs(wctx, fmt_ctx); CHECK_END; @@ -2894,6 +2913,12 @@ int main(int argc, char **argv) SET_DO_SHOW(STREAM_DISPOSITION, stream_disposition); SET_DO_SHOW(PROGRAM_STREAM_DISPOSITION, stream_disposition); + SET_DO_SHOW(CHAPTER_TAGS, chapter_tags); + SET_DO_SHOW(FORMAT_TAGS, format_tags); + SET_DO_SHOW(FRAME_TAGS, frame_tags); + SET_DO_SHOW(PROGRAM_TAGS, program_tags); + SET_DO_SHOW(STREAM_TAGS, stream_tags); + if (do_bitexact && (do_show_program_version || do_show_library_versions)) { av_log(NULL, AV_LOG_ERROR, "-bitexact and -show_program_version or -show_library_versions "