From patchwork Wed Jun 1 19:22:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Scott Theisen X-Patchwork-Id: 36035 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6914:b0:82:6b11:2509 with SMTP id q20csp3617324pzj; Wed, 1 Jun 2022 12:22:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw2O/iHCZMTZzTSrGmVN+od4Wek1hjvznwWPdaoJsQVbeg0zSNWT7ldcbtdeusjmiVdpwMI X-Received: by 2002:a17:907:1b0d:b0:6ff:22a1:d58a with SMTP id mp13-20020a1709071b0d00b006ff22a1d58amr994208ejc.293.1654111357382; Wed, 01 Jun 2022 12:22:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654111357; cv=none; d=google.com; s=arc-20160816; b=caf+B2E9Fakn9vacOr7gTF3pNfPGuG2Lg3/D1KB3LvQfcF5z2IasIdyWTM5/tFn5S9 3+5TeOwlUJ3z4GWBW7RRCg7286TyA6thAcT53yDXrNIwMVtEoXCMvZMMWuuTc0pVYVn4 B7Ai3vacWRj3Kp3WeTwgjYDZKpfxLCTm2zY2oZw8WHaM3MjOPepg6bndd+2asqga8zAV bDTcqaKQuO66PeqVvQr5QCNGr2Rum2t3ECYRCVgipDluXXv7RBDlvPMI/tbaGRZ7+s7b ZJNlWlx8U81J9xH+ZaijIYEnVZHBq6HB+F75+mxhuQkm10Upe9YhgyzLN8Cx1WjLNDQW vfug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=9fO5oLljftLz2ll9mqU3P9miWCc2dBQE57ddPBDAh6g=; b=tZHLmfVkkTWHro1WmYIPR3Lu57wrjmGHk50HCcn7WiSR1SNRVNmvt17+NaKcg05ors abLWTYM2H10RMToWnhsO2aDBpOU3ZuYLVJbM6IVrt/ceFiZE9AvZWawfF5u4YIueVU5T q7NeTTHToMBzkoBO8Ynk15iGZwgu3uwNp8Oo+/7DfpLoHAfsySU/MR5Wrc8b0cTmYqJ5 PZLKtVd9kD86X3kzjQSeFiQmhoiZbO7czYRksNnR12TQQmFT++t2zhr0EhdjJGs8zP+7 CstHfz0noT+zIe1QzMA8NZKgIu5a9w5IV5WuXUknuBPZXXO6HMLLmL2rwOZzacmzjpk9 YvRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=edYOupyq; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id g10-20020a50ee0a000000b0042de92db2b7si2444844eds.625.2022.06.01.12.22.31; Wed, 01 Jun 2022 12:22:37 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=edYOupyq; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D77E768B7E0; Wed, 1 Jun 2022 22:22:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C072668B7DF for ; Wed, 1 Jun 2022 22:22:21 +0300 (EEST) Received: by mail-qt1-f178.google.com with SMTP id k6so1924974qtq.3 for ; Wed, 01 Jun 2022 12:22:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KrzSBPE2/Xc4UZ6wjcRq4/TtiIp56ILa/QQBP72lYZ4=; b=edYOupyqLsFauJCIBiOHN7gruaiPGBRTB8FtcuhFlmei6p0uYahOl40YlAjDJzoA73 U3iC46UgBnpxaiYgvVlMlYrmmwOYH4xZ4m6vpyzxrbMawmdJoeW1OYw/U7lFvJRnhrFu pd4WUpv0hXsb0o66pvUiUG7eSYEwm02utxH+HxsLegVP4AZ3HFbjACCGpFdvWACmXOwa 0mLeg19aL+YzSNxVlPf5kJWByI1HIHhFAJGAWfaCAgupass4DPb4HSjmu1e2WyzbV1ms GJMiU2sdAK9VsG24go5dfHluGHOcyXYWnfN64nGEM/GnUGwtfDw8Dah77TIcgLZehjZW ECDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KrzSBPE2/Xc4UZ6wjcRq4/TtiIp56ILa/QQBP72lYZ4=; b=RJjCX1eAcHYW6wL52o5E+YhQa60ltGurB8P8aR/C0VXCbnrMlCLOZ7ELNjEQCtRlvk LUkvVTlhjKhBTifOLvEFLKtZlANxFY81XId1ykHXbe5FmtQP+4N09MN7K7P6jIDN11ah 01IMFOQZgG+t7d8CZ2dqIjl77K/c98RdZSGuemNfvMfSYCAQbUZRE8WvR58yqhpEjZi/ ULYv96cXMzJxn125oqgq/woDvA9LHtq+8WjcANns6Mq57mbP+jU+f+ZO1uVofdnoVVIV 9DX4qEN096Z1yae7ftOVzgnymrw4omYI7wm7KQaB2lBy8MsRdQDk3ZFW4VIcE4088erB 2OqQ== X-Gm-Message-State: AOAM530k7ko4fb7IeKjZqiickaRfbnL4eHJ3W1qX4lRhJW8Red8Shrtq d5ZR6Ucgfvwl+cnG4sICTs6daS/oMp4= X-Received: by 2002:ac8:5f95:0:b0:302:da28:a49f with SMTP id j21-20020ac85f95000000b00302da28a49fmr1060237qta.171.1654111339786; Wed, 01 Jun 2022 12:22:19 -0700 (PDT) Received: from scott-desktop.. (pool-71-114-78-126.washdc.fios.verizon.net. [71.114.78.126]) by smtp.gmail.com with ESMTPSA id j8-20020ac84408000000b0030134c82933sm1500404qtn.94.2022.06.01.12.22.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jun 2022 12:22:19 -0700 (PDT) From: Scott Theisen To: ffmpeg-devel@ffmpeg.org Date: Wed, 1 Jun 2022 15:22:13 -0400 Message-Id: <20220601192213.91535-1-scott.the.elm@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220201223058.31090-1-scott.the.elm@gmail.com> References: <20220201223058.31090-1-scott.the.elm@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] av_get_media_type_string(): replace with av_media_type_get_string() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Scott Theisen Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: AILsDoWGQi6a printf %s with a NULL pointer is undefined behavior. Not returning a NULL pointer makes for a nicer function for API users, including in FFmpeg, since then you don't have to check it, instead you can just print it. 32/44 uses in FFmpeg did not check for NULL. This also matches behavior with avcodec_get_name() which never returns NULL, instead it returns "unknown_codec". In libavcodec/codec_desc.c, avcodec_get_type(AV_CODEC_ID_NONE) will return AVMEDIA_TYPE_UNKNOWN. The mpegts demuxer, for example, will set AV_CODEC_ID_NONE as the AVCodecID of a stream if it can't identify the codec. This is probably true of all demuxers. Therefore, AVMEDIA_TYPE_UNKNOWN is a valid value for the AVMediaType enum and this should be differentiated from invalid values by returning a different string for each case. --- doc/APIchanges | 3 +++ doc/examples/demuxing_decoding.c | 10 +++++----- doc/examples/extract_mvs.c | 4 ++-- fftools/ffmpeg.c | 14 +++++++------- fftools/ffmpeg_mux.c | 2 +- fftools/ffmpeg_opt.c | 2 +- fftools/ffplay.c | 4 ++-- fftools/ffprobe.c | 13 +++---------- fftools/opt_common.c | 7 +++---- libavcodec/avcodec.c | 2 +- libavcodec/tests/avcodec.c | 10 ++-------- libavdevice/dshow.c | 4 ++-- libavfilter/avfilter.c | 4 ++-- libavfilter/avfiltergraph.c | 4 ++-- libavfilter/src_movie.c | 6 +++--- libavformat/avienc.c | 2 +- libavformat/flvenc.c | 2 +- libavformat/framehash.c | 2 +- libavformat/mov.c | 2 +- libavformat/mpegenc.c | 2 +- libavformat/mpegts.c | 2 +- libavformat/mxfdec.c | 2 +- libavformat/segment.c | 2 +- libavformat/tee.c | 2 +- libavformat/uncodedframecrcenc.c | 4 +--- libavutil/avutil.h | 10 ++++++++++ libavutil/utils.c | 13 +++++++++++++ 27 files changed, 72 insertions(+), 62 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 337f1466d8..f3ed86b9b2 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,9 @@ libavutil: 2021-04-27 API changes, most recent first: +2022-06-XX - xxxxxxxxxxx - lavu 57.19.100 - avutil.h + Add av_media_type_get_string() which deprecates av_get_media_type_string(). + 2022-05-23 - xxxxxxxxx - lavu 57.25.100 - avutil.h Deprecate av_fopen_utf8() without replacement. diff --git a/doc/examples/demuxing_decoding.c b/doc/examples/demuxing_decoding.c index 999a78db0d..467eda8a51 100644 --- a/doc/examples/demuxing_decoding.c +++ b/doc/examples/demuxing_decoding.c @@ -155,7 +155,7 @@ static int open_codec_context(int *stream_idx, ret = av_find_best_stream(fmt_ctx, type, -1, -1, NULL, 0); if (ret < 0) { fprintf(stderr, "Could not find %s stream in input file '%s'\n", - av_get_media_type_string(type), src_filename); + av_media_type_get_string(type), src_filename); return ret; } else { stream_index = ret; @@ -165,7 +165,7 @@ static int open_codec_context(int *stream_idx, dec = avcodec_find_decoder(st->codecpar->codec_id); if (!dec) { fprintf(stderr, "Failed to find %s codec\n", - av_get_media_type_string(type)); + av_media_type_get_string(type)); return AVERROR(EINVAL); } @@ -173,21 +173,21 @@ static int open_codec_context(int *stream_idx, *dec_ctx = avcodec_alloc_context3(dec); if (!*dec_ctx) { fprintf(stderr, "Failed to allocate the %s codec context\n", - av_get_media_type_string(type)); + av_media_type_get_string(type)); return AVERROR(ENOMEM); } /* Copy codec parameters from input stream to output codec context */ if ((ret = avcodec_parameters_to_context(*dec_ctx, st->codecpar)) < 0) { fprintf(stderr, "Failed to copy %s codec parameters to decoder context\n", - av_get_media_type_string(type)); + av_media_type_get_string(type)); return ret; } /* Init the decoders */ if ((ret = avcodec_open2(*dec_ctx, dec, NULL)) < 0) { fprintf(stderr, "Failed to open %s codec\n", - av_get_media_type_string(type)); + av_media_type_get_string(type)); return ret; } *stream_idx = stream_index; diff --git a/doc/examples/extract_mvs.c b/doc/examples/extract_mvs.c index cc1311da91..2fb5517708 100644 --- a/doc/examples/extract_mvs.c +++ b/doc/examples/extract_mvs.c @@ -85,7 +85,7 @@ static int open_codec_context(AVFormatContext *fmt_ctx, enum AVMediaType type) ret = av_find_best_stream(fmt_ctx, type, -1, -1, &dec, 0); if (ret < 0) { fprintf(stderr, "Could not find %s stream in input file '%s'\n", - av_get_media_type_string(type), src_filename); + av_media_type_get_string(type), src_filename); return ret; } else { int stream_idx = ret; @@ -109,7 +109,7 @@ static int open_codec_context(AVFormatContext *fmt_ctx, enum AVMediaType type) av_dict_free(&opts); if (ret < 0) { fprintf(stderr, "Failed to open %s codec\n", - av_get_media_type_string(type)); + av_media_type_get_string(type)); return ret; } diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 5ed287c522..e5874dc218 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -894,7 +894,7 @@ static int encode_frame(OutputFile *of, OutputStream *ost, AVFrame *frame) { AVCodecContext *enc = ost->enc_ctx; AVPacket *pkt = ost->pkt; - const char *type_desc = av_get_media_type_string(enc->codec_type); + const char *type_desc = av_media_type_get_string(enc->codec_type); const char *action = frame ? "encode" : "flush"; int ret; @@ -1443,7 +1443,7 @@ static void print_final_stats(int64_t total_size) total_packets += ist->nb_packets; av_log(NULL, AV_LOG_VERBOSE, " Input stream #%d:%d (%s): ", - i, j, av_get_media_type_string(type)); + i, j, av_media_type_get_string(type)); av_log(NULL, AV_LOG_VERBOSE, "%"PRIu64" packets read (%"PRIu64" bytes); ", ist->nb_packets, ist->data_size); @@ -1477,7 +1477,7 @@ static void print_final_stats(int64_t total_size) total_packets += ost->packets_written; av_log(NULL, AV_LOG_VERBOSE, " Output stream #%d:%d (%s): ", - i, j, av_get_media_type_string(type)); + i, j, av_media_type_get_string(type)); if (ost->encoding_needed) { av_log(NULL, AV_LOG_VERBOSE, "%"PRIu64" frames encoded", ost->frames_encoded); @@ -3267,7 +3267,7 @@ static void report_new_stream(int input_index, AVPacket *pkt) return; av_log(file->ctx, AV_LOG_WARNING, "New %s stream %d:%d at pos:%"PRId64" and DTS:%ss\n", - av_get_media_type_string(st->codecpar->codec_type), + av_media_type_get_string(st->codecpar->codec_type), input_index, pkt->stream_index, pkt->pos, av_ts2timestr(pkt->dts, &st->time_base)); file->nb_streams_warn = pkt->stream_index + 1; @@ -4001,7 +4001,7 @@ static int process_input(int file_index) if (debug_ts) { av_log(NULL, AV_LOG_INFO, "demuxer -> ist_index:%d type:%s " "next_dts:%s next_dts_time:%s next_pts:%s next_pts_time:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s off:%s off_time:%s\n", - ifile->ist_index + pkt->stream_index, av_get_media_type_string(ist->dec_ctx->codec_type), + ifile->ist_index + pkt->stream_index, av_media_type_get_string(ist->dec_ctx->codec_type), av_ts2str(ist->next_dts), av_ts2timestr(ist->next_dts, &AV_TIME_BASE_Q), av_ts2str(ist->next_pts), av_ts2timestr(ist->next_pts, &AV_TIME_BASE_Q), av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &ist->st->time_base), @@ -4129,7 +4129,7 @@ static int process_input(int file_index) "timestamp discontinuity for stream #%d:%d " "(id=%d, type=%s): %"PRId64", new offset= %"PRId64"\n", ist->file_index, ist->st->index, ist->st->id, - av_get_media_type_string(ist->dec_ctx->codec_type), + av_media_type_get_string(ist->dec_ctx->codec_type), delta, ifile->ts_offset); pkt->dts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); if (pkt->pts != AV_NOPTS_VALUE) @@ -4158,7 +4158,7 @@ static int process_input(int file_index) if (debug_ts) { av_log(NULL, AV_LOG_INFO, "demuxer+ffmpeg -> ist_index:%d type:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s off:%s off_time:%s\n", - ifile->ist_index + pkt->stream_index, av_get_media_type_string(ist->dec_ctx->codec_type), + ifile->ist_index + pkt->stream_index, av_media_type_get_string(ist->dec_ctx->codec_type), av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &ist->st->time_base), av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &ist->st->time_base), av_ts2str(pkt->duration), av_ts2timestr(pkt->duration, &ist->st->time_base), diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c index 794d580635..eb0cd3a045 100644 --- a/fftools/ffmpeg_mux.c +++ b/fftools/ffmpeg_mux.c @@ -157,7 +157,7 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, if (debug_ts) { av_log(NULL, AV_LOG_INFO, "muxer <- type:%s " "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s size:%d\n", - av_get_media_type_string(ost->enc_ctx->codec_type), + av_media_type_get_string(ost->enc_ctx->codec_type), av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &ost->st->time_base), av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &ost->st->time_base), av_ts2str(pkt->duration), av_ts2timestr(pkt->duration, &ost->st->time_base), diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 2c1b3bd0dd..48c4f29d57 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1705,7 +1705,7 @@ static void check_streamcopy_filters(OptionsContext *o, AVFormatContext *oc, "Filtering and streamcopy cannot be used together.\n", ost->filters ? "Filtergraph" : "Filtergraph script", ost->filters ? ost->filters : ost->filters_script, - av_get_media_type_string(type), ost->file_index, ost->index); + av_media_type_get_string(type), ost->file_index, ost->index); exit_program(1); } } diff --git a/fftools/ffplay.c b/fftools/ffplay.c index 040afa0189..c44c5e4ea6 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -2860,7 +2860,7 @@ static int read_thread(void *arg) } for (i = 0; i < AVMEDIA_TYPE_NB; i++) { if (wanted_stream_spec[i] && st_index[i] == -1) { - av_log(NULL, AV_LOG_ERROR, "Stream specifier %s does not match any %s stream\n", wanted_stream_spec[i], av_get_media_type_string(i)); + av_log(NULL, AV_LOG_ERROR, "Stream specifier %s does not match any %s stream\n", wanted_stream_spec[i], av_media_type_get_string(i)); st_index[i] = INT_MAX; } } @@ -3191,7 +3191,7 @@ static void stream_cycle_channel(VideoState *is, int codec_type) if (p && stream_index != -1) stream_index = p->stream_index[stream_index]; av_log(NULL, AV_LOG_INFO, "Switch %s stream from #%d to #%d\n", - av_get_media_type_string(codec_type), + av_media_type_get_string(codec_type), old_index, stream_index); diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c index c51c82ff65..d5590be133 100644 --- a/fftools/ffprobe.c +++ b/fftools/ffprobe.c @@ -2404,15 +2404,12 @@ static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int p char val_str[128]; AVStream *st = ifile->streams[pkt->stream_index].st; AVBPrint pbuf; - const char *s; av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED); writer_print_section_header(w, SECTION_ID_PACKET); - s = av_get_media_type_string(st->codecpar->codec_type); - if (s) print_str ("codec_type", s); - else print_str_opt("codec_type", "unknown"); + print_str("codec_type", av_media_type_get_string(st->codecpar->codec_type)); print_int("stream_index", pkt->stream_index); print_ts ("pts", pkt->pts); print_time("pts_time", pkt->pts, &st->time_base); @@ -2487,9 +2484,7 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream, writer_print_section_header(w, SECTION_ID_FRAME); - s = av_get_media_type_string(stream->codecpar->codec_type); - if (s) print_str ("media_type", s); - else print_str_opt("media_type", "unknown"); + print_str("media_type", av_media_type_get_string(stream->codecpar->codec_type)); print_int("stream_index", stream->index); print_int("key_frame", frame->key_frame); print_ts ("pts", frame->pts); @@ -2890,9 +2885,7 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id print_str_opt("profile", "unknown"); } - s = av_get_media_type_string(par->codec_type); - if (s) print_str ("codec_type", s); - else print_str_opt("codec_type", "unknown"); + print_str("codec_type", av_media_type_get_string(par->codec_type)); /* print AVI/FourCC tag */ print_str("codec_tag_string", av_fourcc2str(par->codec_tag)); diff --git a/fftools/opt_common.c b/fftools/opt_common.c index ae5e28a5af..48bedb6440 100644 --- a/fftools/opt_common.c +++ b/fftools/opt_common.c @@ -522,7 +522,7 @@ static void show_help_filter(const char *name) count = avfilter_filter_pad_count(f, 0); for (i = 0; i < count; i++) { printf(" #%d: %s (%s)\n", i, avfilter_pad_get_name(f->inputs, i), - av_get_media_type_string(avfilter_pad_get_type(f->inputs, i))); + av_media_type_get_string(avfilter_pad_get_type(f->inputs, i))); } if (f->flags & AVFILTER_FLAG_DYNAMIC_INPUTS) printf(" dynamic (depending on the options)\n"); @@ -533,7 +533,7 @@ static void show_help_filter(const char *name) count = avfilter_filter_pad_count(f, 1); for (i = 0; i < count; i++) { printf(" #%d: %s (%s)\n", i, avfilter_pad_get_name(f->outputs, i), - av_get_media_type_string(avfilter_pad_get_type(f->outputs, i))); + av_media_type_get_string(avfilter_pad_get_type(f->outputs, i))); } if (f->flags & AVFILTER_FLAG_DYNAMIC_OUTPUTS) printf(" dynamic (depending on the options)\n"); @@ -1313,10 +1313,9 @@ static void print_device_list(const AVDeviceInfoList *device_list) device->device_name, device->device_description); if (device->nb_media_types > 0) { for (int j = 0; j < device->nb_media_types; ++j) { - const char* media_type = av_get_media_type_string(device->media_types[j]); if (j > 0) printf(", "); - printf("%s", media_type ? media_type : "unknown"); + printf("%s", av_media_type_get_string(device->media_types[j])); } } else { printf("none"); diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c index 5f6e71a39e..e02ac2e630 100644 --- a/libavcodec/avcodec.c +++ b/libavcodec/avcodec.c @@ -528,7 +528,7 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) if (!buf || buf_size <= 0) return; av_bprint_init_for_buffer(&bprint, buf, buf_size); - codec_type = av_get_media_type_string(enc->codec_type); + codec_type = av_media_type_get_string(enc->codec_type); codec_name = avcodec_get_name(enc->codec_id); profile = avcodec_profile_name(enc->codec_id, enc->profile); diff --git a/libavcodec/tests/avcodec.c b/libavcodec/tests/avcodec.c index 08b5fbede1..c10a90fa92 100644 --- a/libavcodec/tests/avcodec.c +++ b/libavcodec/tests/avcodec.c @@ -22,12 +22,6 @@ #include "libavcodec/codec_internal.h" #include "libavcodec/internal.h" -static const char *get_type_string(enum AVMediaType type) -{ - const char *ret = av_get_media_type_string(type); - return ret ? ret : "unknown"; -} - #define AV_LOG(...) av_log(NULL, AV_LOG_FATAL, __VA_ARGS__) #define ERR_INTERNAL(msg, ...) \ do { \ @@ -76,7 +70,7 @@ int main(void){ codec->type != AVMEDIA_TYPE_AUDIO && codec->type != AVMEDIA_TYPE_SUBTITLE) ERR_EXT("Codec %s has unsupported type %s\n", - get_type_string(codec->type)); + av_media_type_get_string(codec->type)); if (codec->type != AVMEDIA_TYPE_AUDIO) { if (codec->ch_layouts || codec->sample_fmts || codec->supported_samplerates) @@ -179,7 +173,7 @@ int main(void){ } else if (desc->type != codec->type) ERR_EXT("The type of AVCodec %s and its AVCodecDescriptor differ: " "%s vs %s\n", - get_type_string(codec->type), get_type_string(desc->type)); + av_media_type_get_string(codec->type), av_media_type_get_string(desc->type)); } return ret; } diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c index 5946a72cc2..7b36ea4bc9 100644 --- a/libavdevice/dshow.c +++ b/libavdevice/dshow.c @@ -577,10 +577,10 @@ dshow_cycle_devices(AVFormatContext *avctx, ICreateDevEnum *devenum, else { av_log(avctx, AV_LOG_INFO, "\"%s\"", friendly_name); if (nb_media_types > 0) { - const char* media_type = av_get_media_type_string(media_types[0]); + const char* media_type = av_media_type_get_string(media_types[0]); av_log(avctx, AV_LOG_INFO, " (%s", media_type ? media_type : "unknown"); for (int i = 1; i < nb_media_types; ++i) { - media_type = av_get_media_type_string(media_types[i]); + media_type = av_media_type_get_string(media_types[i]); av_log(avctx, AV_LOG_INFO, ", %s", media_type ? media_type : "unknown"); } av_log(avctx, AV_LOG_INFO, ")"); diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 965f5d0f63..b9be2eb6fe 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -153,8 +153,8 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad, if (src->output_pads[srcpad].type != dst->input_pads[dstpad].type) { av_log(src, AV_LOG_ERROR, "Media type mismatch between the '%s' filter output pad %d (%s) and the '%s' filter input pad %d (%s)\n", - src->name, srcpad, (char *)av_x_if_null(av_get_media_type_string(src->output_pads[srcpad].type), "?"), - dst->name, dstpad, (char *)av_x_if_null(av_get_media_type_string(dst-> input_pads[dstpad].type), "?")); + src->name, srcpad, av_media_type_get_string(src->output_pads[srcpad].type), + dst->name, dstpad, av_media_type_get_string(dst-> input_pads[dstpad].type)); return AVERROR(EINVAL); } diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c index b7dbfc063b..b466c5c55c 100644 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@ -218,7 +218,7 @@ static int graph_check_validity(AVFilterGraph *graph, void *log_ctx) pad = &filt->input_pads[j]; av_log(log_ctx, AV_LOG_ERROR, "Input pad \"%s\" with type %s of the filter instance \"%s\" of %s not connected to any source\n", - pad->name, av_get_media_type_string(pad->type), filt->name, filt->filter->name); + pad->name, av_media_type_get_string(pad->type), filt->name, filt->filter->name); return AVERROR(EINVAL); } } @@ -228,7 +228,7 @@ static int graph_check_validity(AVFilterGraph *graph, void *log_ctx) pad = &filt->output_pads[j]; av_log(log_ctx, AV_LOG_ERROR, "Output pad \"%s\" with type %s of the filter instance \"%s\" of %s not connected to any destination\n", - pad->name, av_get_media_type_string(pad->type), filt->name, filt->filter->name); + pad->name, av_media_type_get_string(pad->type), filt->name, filt->filter->name); return AVERROR(EINVAL); } } diff --git a/libavfilter/src_movie.c b/libavfilter/src_movie.c index 711854c23c..6484005921 100644 --- a/libavfilter/src_movie.c +++ b/libavfilter/src_movie.c @@ -115,7 +115,7 @@ static AVStream *find_stream(void *log, AVFormatContext *avf, const char *spec) ret = av_find_best_stream(avf, type, stream_id, -1, NULL, 0); if (ret < 0) { av_log(log, AV_LOG_ERROR, "No %s stream with index '%d' found\n", - av_get_media_type_string(type), stream_id); + av_media_type_get_string(type), stream_id); return NULL; } return avf->streams[ret]; @@ -150,7 +150,7 @@ static AVStream *find_stream(void *log, AVFormatContext *avf, const char *spec) found->codecpar->codec_type != AVMEDIA_TYPE_AUDIO) { av_log(log, AV_LOG_ERROR, "Stream specifier \"%s\" matched a %s stream," "currently unsupported by libavfilter\n", spec, - av_get_media_type_string(found->codecpar->codec_type)); + av_media_type_get_string(found->codecpar->codec_type)); return NULL; } return found; @@ -429,7 +429,7 @@ static char *describe_frame_to_str(char *dst, size_t dst_size, frame->nb_samples); break; default: - snprintf(dst, dst_size, "%s BUG", av_get_media_type_string(frame_type)); + snprintf(dst, dst_size, "%s BUG", av_media_type_get_string(frame_type)); break; } return dst; diff --git a/libavformat/avienc.c b/libavformat/avienc.c index 2264241d57..7a4e73807c 100644 --- a/libavformat/avienc.c +++ b/libavformat/avienc.c @@ -475,7 +475,7 @@ static int avi_write_header(AVFormatContext *s) default: av_log(s, AV_LOG_ERROR, "Invalid or not supported codec type '%s' found in the input\n", - (char *)av_x_if_null(av_get_media_type_string(par->codec_type), "?")); + av_media_type_get_string(par->codec_type)); return AVERROR(EINVAL); } ff_end_tag(pb, strf); diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c index 4e65ba4066..8324d51db6 100644 --- a/libavformat/flvenc.c +++ b/libavformat/flvenc.c @@ -669,7 +669,7 @@ static int flv_init(struct AVFormatContext *s) break; default: av_log(s, AV_LOG_ERROR, "Codec type '%s' for stream %d is not compatible with FLV\n", - av_get_media_type_string(par->codec_type), i); + av_media_type_get_string(par->codec_type), i); return AVERROR(EINVAL); } avpriv_set_pts_info(s->streams[i], 32, 1, 1000); /* 32 bit pts in ms */ diff --git a/libavformat/framehash.c b/libavformat/framehash.c index 654996e8e0..07c29da82c 100644 --- a/libavformat/framehash.c +++ b/libavformat/framehash.c @@ -33,7 +33,7 @@ int ff_framehash_write_header(AVFormatContext *s) AVCodecParameters *avctx = st->codecpar; char buf[256] = { 0 }; avio_printf(s->pb, "#tb %d: %d/%d\n", i, st->time_base.num, st->time_base.den); - avio_printf(s->pb, "#media_type %d: %s\n", i, av_get_media_type_string(avctx->codec_type)); + avio_printf(s->pb, "#media_type %d: %s\n", i, av_media_type_get_string(avctx->codec_type)); avio_printf(s->pb, "#codec_id %d: %s\n", i, avcodec_get_name(avctx->codec_id)); switch (avctx->codec_type) { case AVMEDIA_TYPE_AUDIO: { diff --git a/libavformat/mov.c b/libavformat/mov.c index d7be593a86..9514598718 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -7306,7 +7306,7 @@ static int mov_read_kind(MOVContext *c, AVIOContext *pb, MOVAtom atom) av_log(ctx, AV_LOG_TRACE, "%s stream %d KindBox(scheme: %s, value: %s)\n", - av_get_media_type_string(st->codecpar->codec_type), + av_media_type_get_string(st->codecpar->codec_type), st->index, scheme_buf.str, value_buf.str); diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c index 62692bfcd1..3e44663715 100644 --- a/libavformat/mpegenc.c +++ b/libavformat/mpegenc.c @@ -458,7 +458,7 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx) break; default: av_log(ctx, AV_LOG_ERROR, "Invalid media type %s for output stream #%d\n", - av_get_media_type_string(st->codecpar->codec_type), i); + av_media_type_get_string(st->codecpar->codec_type), i); return AVERROR(EINVAL); } stream->fifo = av_fifo_alloc2(16, 1, 0); diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 6e761c07f1..13292f8041 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -2258,7 +2258,7 @@ static AVStream *find_matching_stream(MpegTSContext *ts, int pid, unsigned int p if (found) { av_log(ts->stream, AV_LOG_VERBOSE, "re-using existing %s stream %d (pid=0x%x) for new pid=0x%x\n", - av_get_media_type_string(found->codecpar->codec_type), + av_media_type_get_string(found->codecpar->codec_type), found->index, found->id, pid); } diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 6a22c33995..0af77c681e 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -2418,7 +2418,7 @@ static int mxf_add_metadata_stream(MXFContext *mxf, MXFTrack *track) av_dict_set(&st->metadata, "track_name", track->name, 0); codec_ul = mxf_get_codec_ul(ff_mxf_data_definition_uls, &track->sequence->data_definition_ul); - av_dict_set(&st->metadata, "data_type", av_get_media_type_string(codec_ul->id), 0); + av_dict_set(&st->metadata, "data_type", av_media_type_get_string(codec_ul->id), 0); return 0; } diff --git a/libavformat/segment.c b/libavformat/segment.c index fa435d9f32..231d845ab3 100644 --- a/libavformat/segment.c +++ b/libavformat/segment.c @@ -738,7 +738,7 @@ static int seg_init(AVFormatContext *s) return ret; av_log(s, AV_LOG_VERBOSE, "Selected stream id:%d type:%s\n", seg->reference_stream_index, - av_get_media_type_string(s->streams[seg->reference_stream_index]->codecpar->codec_type)); + av_media_type_get_string(s->streams[seg->reference_stream_index]->codecpar->codec_type)); seg->oformat = av_guess_format(seg->format, s->url, NULL); diff --git a/libavformat/tee.c b/libavformat/tee.c index f1f2a9d2a5..3144ab4000 100644 --- a/libavformat/tee.c +++ b/libavformat/tee.c @@ -419,7 +419,7 @@ static void log_slave(TeeSlave *slave, void *log_ctx, int log_level) av_log(log_ctx, log_level, " stream:%d codec:%s type:%s", i, avcodec_get_name(st->codecpar->codec_id), - av_get_media_type_string(st->codecpar->codec_type)); + av_media_type_get_string(st->codecpar->codec_type)); bsf_name = bsf->filter->priv_class ? bsf->filter->priv_class->item_name(bsf) : bsf->filter->name; diff --git a/libavformat/uncodedframecrcenc.c b/libavformat/uncodedframecrcenc.c index 99990616d3..c6476a4c43 100644 --- a/libavformat/uncodedframecrcenc.c +++ b/libavformat/uncodedframecrcenc.c @@ -131,7 +131,6 @@ static int write_frame(struct AVFormatContext *s, int stream_index, AVBPrint bp; int ret = 0; enum AVMediaType type; - const char *type_name; if ((flags & AV_WRITE_UNCODED_FRAME_QUERY)) return 0; @@ -140,8 +139,7 @@ static int write_frame(struct AVFormatContext *s, int stream_index, av_bprintf(&bp, "%d, %10"PRId64"", stream_index, (*frame)->pts); type = s->streams[stream_index]->codecpar->codec_type; - type_name = av_get_media_type_string(type); - av_bprintf(&bp, ", %s", type_name ? type_name : "unknown"); + av_bprintf(&bp, ", %s", av_media_type_get_string(type)); switch (type) { case AVMEDIA_TYPE_VIDEO: video_frame_cksum(&bp, *frame); diff --git a/libavutil/avutil.h b/libavutil/avutil.h index 64b68bdbd3..542cfd111e 100644 --- a/libavutil/avutil.h +++ b/libavutil/avutil.h @@ -21,6 +21,8 @@ #ifndef AVUTIL_AVUTIL_H #define AVUTIL_AVUTIL_H +#include "attributes.h" + /** * @file * @ingroup lavu @@ -209,9 +211,17 @@ enum AVMediaType { /** * Return a string describing the media_type enum, NULL if media_type * is unknown. + * + * @deprecated Use av_media_type_get_string() instead. */ +attribute_deprecated const char *av_get_media_type_string(enum AVMediaType media_type); +/** + * Return a string describing the media_type enum, never NULL. + */ +const char *av_media_type_get_string(enum AVMediaType media_type); + /** * @defgroup lavu_const Constants * @{ diff --git a/libavutil/utils.c b/libavutil/utils.c index 94d247bbee..5e0be8361f 100644 --- a/libavutil/utils.c +++ b/libavutil/utils.c @@ -37,6 +37,19 @@ const char *av_get_media_type_string(enum AVMediaType media_type) } } +const char *av_media_type_get_string(enum AVMediaType media_type) +{ + switch (media_type) { + case AVMEDIA_TYPE_UNKNOWN: return "unknown"; + case AVMEDIA_TYPE_VIDEO: return "video"; + case AVMEDIA_TYPE_AUDIO: return "audio"; + case AVMEDIA_TYPE_DATA: return "data"; + case AVMEDIA_TYPE_SUBTITLE: return "subtitle"; + case AVMEDIA_TYPE_ATTACHMENT: return "attachment"; + default: return "invalid_media_type"; + } +} + char av_get_picture_type_char(enum AVPictureType pict_type) { switch (pict_type) {