From: Marth64 <marth64@proxyid.net> To: ffmpeg-devel@ffmpeg.org Cc: Marth64 <marth64@proxyid.net> Subject: [FFmpeg-devel] [PATCH 3/7] avformat/dvdvideodec: Combine libdvdread and libdvdnav log callbacks Date: Sun, 28 Jul 2024 02:34:41 -0500 Message-ID: <20240728073445.725161-4-marth64@proxyid.net> (raw) In-Reply-To: <20240728073445.725161-1-marth64@proxyid.net> The methods are effectively the same but reference different public enums, so roll them up into a macro. Signed-off-by: Marth64 <marth64@proxyid.net> --- libavformat/dvdvideodec.c | 64 +++++++++++++++------------------------ 1 file changed, 24 insertions(+), 40 deletions(-) diff --git a/libavformat/dvdvideodec.c b/libavformat/dvdvideodec.c index e8301b1173..f6373d8ade 100644 --- a/libavformat/dvdvideodec.c +++ b/libavformat/dvdvideodec.c @@ -173,40 +173,28 @@ typedef struct DVDVideoDemuxContext { int subdemux_reset; /* signal that subdemuxer should be reset */ } DVDVideoDemuxContext; -static void dvdvideo_libdvdread_log(void *opaque, dvd_logger_level_t level, - const char *msg, va_list msg_va) -{ - AVFormatContext *s = opaque; - char msg_buf[DVDVIDEO_LIBDVDX_LOG_BUFFER_SIZE]; - int lavu_level = AV_LOG_DEBUG; - - vsnprintf(msg_buf, sizeof(msg_buf), msg, msg_va); - - if (level == DVD_LOGGER_LEVEL_ERROR) - lavu_level = AV_LOG_ERROR; - else if (level == DVD_LOGGER_LEVEL_WARN) - lavu_level = AV_LOG_WARNING; - - av_log(s, lavu_level, "libdvdread: %s\n", msg_buf); -} - -static void dvdvideo_libdvdnav_log(void *opaque, dvdnav_logger_level_t level, - const char *msg, va_list msg_va) -{ - AVFormatContext *s = opaque; - char msg_buf[DVDVIDEO_LIBDVDX_LOG_BUFFER_SIZE]; - int lavu_level = AV_LOG_DEBUG; - - vsnprintf(msg_buf, sizeof(msg_buf), msg, msg_va); - - if (level == DVDNAV_LOGGER_LEVEL_ERROR) - lavu_level = AV_LOG_ERROR; - /* some discs have invalid language codes set for menus, which throws noisy warnings */ - else if (level == DVDNAV_LOGGER_LEVEL_WARN && !av_strstart(msg, "Language", NULL)) - lavu_level = AV_LOG_WARNING; - - av_log(s, lavu_level, "libdvdnav: %s\n", msg_buf); -} +#define LIBDVDX_LOG_CALLBACK(X, CB_TYPE, LEVEL_TYPE, LEVEL_PREFIX) \ + static void dvdvideo_##X##_log(void *o, LEVEL_TYPE level, const char *msg, va_list msg_va) \ + { \ + AVFormatContext *s = o; \ + char msg_buf[DVDVIDEO_LIBDVDX_LOG_BUFFER_SIZE]; \ + int lavu_level = AV_LOG_DEBUG; \ + \ + vsnprintf(msg_buf, sizeof(msg_buf), msg, msg_va); \ + \ + if (level == LEVEL_PREFIX##_ERROR) \ + lavu_level = AV_LOG_ERROR; \ + else if (level == LEVEL_PREFIX##_WARN && \ + !av_strstart(msg, "Language", NULL)) /* muffle menus with invalid language */ \ + lavu_level = AV_LOG_WARNING; \ + \ + av_log(s, lavu_level, #X": %s\n", msg_buf); \ + } \ + \ + static const CB_TYPE dvdvideo_##X##_log_cb = (CB_TYPE) { .pf_log = dvdvideo_##X##_log }; \ + +LIBDVDX_LOG_CALLBACK(libdvdread, dvd_logger_cb, dvd_logger_level_t, DVD_LOGGER_LEVEL) +LIBDVDX_LOG_CALLBACK(libdvdnav, dvdnav_logger_cb, dvdnav_logger_level_t, DVDNAV_LOGGER_LEVEL) static void dvdvideo_ifo_close(AVFormatContext *s) { @@ -226,11 +214,9 @@ static int dvdvideo_ifo_open(AVFormatContext *s) { DVDVideoDemuxContext *c = s->priv_data; - dvd_logger_cb dvdread_log_cb; title_info_t title_info; - dvdread_log_cb = (dvd_logger_cb) { .pf_log = dvdvideo_libdvdread_log }; - c->dvdread = DVDOpen2(s, &dvdread_log_cb, s->url); + c->dvdread = DVDOpen2(s, &dvdvideo_libdvdread_log_cb, s->url); if (!c->dvdread) { av_log(s, AV_LOG_ERROR, "Unable to open the DVD-Video structure\n"); @@ -516,15 +502,13 @@ static int dvdvideo_play_open(AVFormatContext *s, DVDVideoPlaybackState *state) { DVDVideoDemuxContext *c = s->priv_data; - dvdnav_logger_cb dvdnav_log_cb; dvdnav_status_t dvdnav_open_status; int32_t disc_region_mask; int32_t player_region_mask; int cur_title, cur_pgcn, cur_pgn; pgc_t *pgc; - dvdnav_log_cb = (dvdnav_logger_cb) { .pf_log = dvdvideo_libdvdnav_log }; - dvdnav_open_status = dvdnav_open2(&state->dvdnav, s, &dvdnav_log_cb, s->url); + dvdnav_open_status = dvdnav_open2(&state->dvdnav, s, &dvdvideo_libdvdnav_log_cb, s->url); if (!state->dvdnav || dvdnav_open_status != DVDNAV_STATUS_OK || -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2024-07-28 7:35 UTC|newest] Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-07-28 7:34 [FFmpeg-devel] [PATCH 0/7] avformat/dvdvideodec: Bug fixes, seeking support, and menu chapters Marth64 2024-07-28 7:34 ` [FFmpeg-devel] [PATCH 1/7] avformat/dvdvideodec: Fix racy PTS calculation and frame drops Marth64 2024-07-28 15:34 ` Marth64 2024-07-28 7:34 ` [FFmpeg-devel] [PATCH 2/7] avformat/dvdvideodec: Implement seeking Marth64 2024-07-28 15:20 ` Sean McGovern 2024-07-28 15:30 ` Marth64 2024-07-28 7:34 ` Marth64 [this message] 2024-07-28 7:34 ` [FFmpeg-devel] [PATCH 4/7] avformat/dvdvideodec: Chapter markers and trimming for menus Marth64 2024-07-28 7:34 ` [FFmpeg-devel] [PATCH 5/7] avformat/dvdvideodec: Remove unused headers Marth64 2024-07-28 7:34 ` [FFmpeg-devel] [PATCH 6/7] avformat/dvdvideodec: Simplify/clarify logs, comments, and class name Marth64 2024-07-28 7:34 ` [FFmpeg-devel] [PATCH 7/7] doc/demuxers: update dvdvideodec documentation Marth64
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20240728073445.725161-4-marth64@proxyid.net \ --to=marth64@proxyid.net \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git