[FFmpeg-devel] [PATCH 13/13] lavc: remove the remaining deprecated cruft
Anton Khirnov
anton
Thu Feb 3 16:35:44 CET 2011
---
libavcodec/Makefile | 1 -
libavcodec/avcodec.h | 102 +----------------------------------------------
libavcodec/dsputil.h | 8 ----
libavcodec/imgconvert.c | 52 ------------------------
libavcodec/imgconvert.h | 44 --------------------
libavcodec/opt.c | 65 ------------------------------
libavcodec/options.c | 3 -
libavcodec/rawdec.c | 1 -
libavcodec/utils.c | 28 -------------
libavcodec/xvmc.h | 20 ---------
10 files changed, 1 insertions(+), 323 deletions(-)
delete mode 100644 libavcodec/imgconvert.h
delete mode 100644 libavcodec/opt.c
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 0266984..b6d31a3 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -15,7 +15,6 @@ OBJS = allcodecs.o \
fmtconvert.o \
imgconvert.o \
jrevdct.o \
- opt.o \
options.o \
parser.o \
raw.o \
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index ced825a..b8d9720 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -53,11 +53,7 @@
#define FF_API_PALETTE_CONTROL (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
-#if LIBAVCODEC_VERSION_MAJOR < 53
-# define FF_INTERNALC_MEM_TYPE unsigned int
-#else
-# define FF_INTERNALC_MEM_TYPE size_t
-#endif
+#define FF_INTERNALC_MEM_TYPE size_t
/**
* Identify the syntax and semantics of the bitstream.
@@ -137,9 +133,6 @@ enum CodecID {
CODEC_ID_QDRAW,
CODEC_ID_VIXL,
CODEC_ID_QPEG,
-#if LIBAVCODEC_VERSION_MAJOR < 53
- CODEC_ID_XVID,
-#endif
CODEC_ID_PNG,
CODEC_ID_PPM,
CODEC_ID_PBM,
@@ -381,18 +374,6 @@ enum CodecID {
CODEC_ID_FFMETADATA=0x21000, ///< Dummy codec for streams containing only metadata information.
};
-#if LIBAVCODEC_VERSION_MAJOR < 53
-#define CodecType AVMediaType
-
-#define CODEC_TYPE_UNKNOWN AVMEDIA_TYPE_UNKNOWN
-#define CODEC_TYPE_VIDEO AVMEDIA_TYPE_VIDEO
-#define CODEC_TYPE_AUDIO AVMEDIA_TYPE_AUDIO
-#define CODEC_TYPE_DATA AVMEDIA_TYPE_DATA
-#define CODEC_TYPE_SUBTITLE AVMEDIA_TYPE_SUBTITLE
-#define CODEC_TYPE_ATTACHMENT AVMEDIA_TYPE_ATTACHMENT
-#define CODEC_TYPE_NB AVMEDIA_TYPE_NB
-#endif
-
/* in bytes */
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
@@ -1012,9 +993,6 @@ typedef struct AVPacket {
int64_t convergence_duration;
} AVPacket;
#define AV_PKT_FLAG_KEY 0x0001
-#if LIBAVCODEC_VERSION_MAJOR < 53
-#define PKT_FLAG_KEY AV_PKT_FLAG_KEY
-#endif
/**
* Audio Video Frame.
@@ -1183,9 +1161,6 @@ typedef struct AVCodecContext {
*/
int frame_size;
int frame_number; ///< audio or video frame number
-#if LIBAVCODEC_VERSION_MAJOR < 53
- int real_pict_num; ///< Returns the real picture number of previous encoded frame.
-#endif
/**
* Number of frames the decoded output will be delayed relative to
@@ -3120,23 +3095,6 @@ void avcodec_get_chroma_sub_sample(enum PixelFormat pix_fmt, int *h_shift, int *
const char *avcodec_get_pix_fmt_name(enum PixelFormat pix_fmt);
void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
-#if LIBAVCODEC_VERSION_MAJOR < 53
-/**
- * Return the pixel format corresponding to the name name.
- *
- * If there is no pixel format with name name, then look for a
- * pixel format with the name corresponding to the native endian
- * format of name.
- * For example in a little-endian system, first look for "gray16",
- * then for "gray16le".
- *
- * Finally if no pixel format has been found, return PIX_FMT_NONE.
- *
- * @deprecated Deprecated in favor of av_get_pix_fmt().
- */
-attribute_deprecated enum PixelFormat avcodec_get_pix_fmt(const char* name);
-#endif
-
/**
* Return a value representing the fourCC code associated to the
* pixel format pix_fmt, or 0 if no associated fourCC code can be
@@ -3205,14 +3163,6 @@ int avcodec_get_pix_fmt_loss(enum PixelFormat dst_pix_fmt, enum PixelFormat src_
enum PixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum PixelFormat src_pix_fmt,
int has_alpha, int *loss_ptr);
-#if LIBAVCODEC_VERSION_MAJOR < 53
-/**
- * @deprecated Use av_get_pix_fmt_string() instead.
- */
-attribute_deprecated
-void avcodec_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt);
-#endif
-
#define FF_ALPHA_TRANSP 0x0001 /* image has some totally transparent pixels */
#define FF_ALPHA_SEMI_TRANSP 0x0002 /* image has some transparent pixels */
@@ -3260,13 +3210,6 @@ const char *avcodec_license(void);
*/
void avcodec_init(void);
-#if LIBAVCODEC_VERSION_MAJOR < 53
-/**
- * @deprecated Deprecated in favor of avcodec_register().
- */
-attribute_deprecated void register_avcodec(AVCodec *codec);
-#endif
-
/**
* Register the codec codec and initialize libavcodec.
*
@@ -3411,14 +3354,6 @@ void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
int linesize_align[4]);
-#if LIBAVCODEC_VERSION_MAJOR < 53
-/**
- * @deprecated Deprecated in favor of av_check_image_size().
- */
-attribute_deprecated
-int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h);
-#endif
-
enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt);
int avcodec_thread_init(AVCodecContext *s, int thread_count);
@@ -3799,15 +3734,6 @@ AVCodecParser *av_parser_next(AVCodecParser *c);
void av_register_codec_parser(AVCodecParser *parser);
AVCodecParserContext *av_parser_init(int codec_id);
-#if LIBAVCODEC_VERSION_MAJOR < 53
-attribute_deprecated
-int av_parser_parse(AVCodecParserContext *s,
- AVCodecContext *avctx,
- uint8_t **poutbuf, int *poutbuf_size,
- const uint8_t *buf, int buf_size,
- int64_t pts, int64_t dts);
-#endif
-
/**
* Parse a packet.
*
@@ -3902,16 +3828,6 @@ void *av_fast_realloc(void *ptr, unsigned int *size, FF_INTERNALC_MEM_TYPE min_s
*/
void av_fast_malloc(void *ptr, unsigned int *size, FF_INTERNALC_MEM_TYPE min_size);
-#if LIBAVCODEC_VERSION_MAJOR < 53
-/**
- * @deprecated Deprecated in favor of av_image_copy().
- */
-attribute_deprecated
-void av_picture_data_copy(uint8_t *dst_data[4], int dst_linesize[4],
- uint8_t *src_data[4], int src_linesize[4],
- enum PixelFormat pix_fmt, int width, int height);
-#endif
-
/**
* Copy image src to dst. Wraps av_picture_data_copy() above.
*/
@@ -3939,22 +3855,6 @@ int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width,
*/
unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
-#if LIBAVCODEC_VERSION_MAJOR < 53
-/**
- * Parse str and put in width_ptr and height_ptr the detected values.
- *
- * @deprecated Deprecated in favor of av_parse_video_size().
- */
-attribute_deprecated int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str);
-
-/**
- * Parse str and store the detected values in *frame_rate.
- *
- * @deprecated Deprecated in favor of av_parse_video_rate().
- */
-attribute_deprecated int av_parse_video_frame_rate(AVRational *frame_rate, const char *str);
-#endif
-
/**
* Logs a generic warning message about a missing feature. This function is
* intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h
index c811186..f373c15 100644
--- a/libavcodec/dsputil.h
+++ b/libavcodec/dsputil.h
@@ -104,14 +104,6 @@ void ff_bink_idct_put_c(uint8_t *dest, int linesize, DCTELEM *block);
void ff_ea_idct_put_c(uint8_t *dest, int linesize, DCTELEM *block);
/* 1/2^n downscaling functions from imgconvert.c */
-#if LIBAVCODEC_VERSION_MAJOR < 53
-/**
- * @deprecated Use av_image_copy_plane() instead.
- */
-attribute_deprecated
-void ff_img_copy_plane(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height);
-#endif
-
void ff_shrink22(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height);
void ff_shrink44(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height);
void ff_shrink88(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height);
diff --git a/libavcodec/imgconvert.c b/libavcodec/imgconvert.c
index 6b0c049..c98505b 100644
--- a/libavcodec/imgconvert.c
+++ b/libavcodec/imgconvert.c
@@ -33,7 +33,6 @@
#include "avcodec.h"
#include "dsputil.h"
#include "internal.h"
-#include "imgconvert.h"
#include "libavutil/colorspace.h"
#include "libavutil/pixdesc.h"
#include "libavcore/imgutils.h"
@@ -426,40 +425,11 @@ const char *avcodec_get_pix_fmt_name(enum PixelFormat pix_fmt)
return av_pix_fmt_descriptors[pix_fmt].name;
}
-#if LIBAVCODEC_VERSION_MAJOR < 53
-enum PixelFormat avcodec_get_pix_fmt(const char *name)
-{
- return av_get_pix_fmt(name);
-}
-
-void avcodec_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt)
-{
- av_get_pix_fmt_string(buf, buf_size, pix_fmt);
-}
-#endif
-
int ff_is_hwaccel_pix_fmt(enum PixelFormat pix_fmt)
{
return av_pix_fmt_descriptors[pix_fmt].flags & PIX_FMT_HWACCEL;
}
-#if LIBAVCODEC_VERSION_MAJOR < 53
-int ff_set_systematic_pal(uint32_t pal[256], enum PixelFormat pix_fmt){
- return ff_set_systematic_pal2(pal, pix_fmt);
-}
-
-int ff_fill_linesize(AVPicture *picture, enum PixelFormat pix_fmt, int width)
-{
- return av_image_fill_linesizes(picture->linesize, pix_fmt, width);
-}
-
-int ff_fill_pointer(AVPicture *picture, uint8_t *ptr, enum PixelFormat pix_fmt,
- int height)
-{
- return av_image_fill_pointers(picture->data, pix_fmt, height, ptr, picture->linesize);
-}
-#endif
-
int avpicture_fill(AVPicture *picture, uint8_t *ptr,
enum PixelFormat pix_fmt, int width, int height)
{
@@ -694,28 +664,6 @@ enum PixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum PixelForma
return dst_pix_fmt;
}
-#if LIBAVCODEC_VERSION_MAJOR < 53
-void ff_img_copy_plane(uint8_t *dst, int dst_wrap,
- const uint8_t *src, int src_wrap,
- int width, int height)
-{
- av_image_copy_plane(dst, dst_wrap, src, src_wrap, width, height);
-}
-
-int ff_get_plane_bytewidth(enum PixelFormat pix_fmt, int width, int plane)
-{
- return av_image_get_linesize(pix_fmt, width, plane);
-}
-
-void av_picture_data_copy(uint8_t *dst_data[4], int dst_linesize[4],
- uint8_t *src_data[4], int src_linesize[4],
- enum PixelFormat pix_fmt, int width, int height)
-{
- av_image_copy(dst_data, dst_linesize, src_data, src_linesize,
- pix_fmt, width, height);
-}
-#endif
-
void av_picture_copy(AVPicture *dst, const AVPicture *src,
enum PixelFormat pix_fmt, int width, int height)
{
diff --git a/libavcodec/imgconvert.h b/libavcodec/imgconvert.h
deleted file mode 100644
index 64da317..0000000
--- a/libavcodec/imgconvert.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Misc image conversion routines
- * most functionality is exported to the public API, see avcodec.h
- *
- * Copyright (c) 2008 Vitor Sessak
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_IMGCONVERT_H
-#define AVCODEC_IMGCONVERT_H
-
-#include <stdint.h>
-#include "avcodec.h"
-
-#if LIBAVCODEC_VERSION_MAJOR < 53
-attribute_deprecated
-int ff_fill_linesize(AVPicture *picture, enum PixelFormat pix_fmt, int width);
-
-attribute_deprecated
-int ff_fill_pointer(AVPicture *picture, uint8_t *ptr, enum PixelFormat pix_fmt, int height);
-
-attribute_deprecated
-int ff_get_plane_bytewidth(enum PixelFormat pix_fmt, int width, int plane);
-
-attribute_deprecated
-int ff_set_systematic_pal(uint32_t pal[256], enum PixelFormat pix_fmt);
-#endif
-
-#endif /* AVCODEC_IMGCONVERT_H */
diff --git a/libavcodec/opt.c b/libavcodec/opt.c
deleted file mode 100644
index 296d9c2..0000000
--- a/libavcodec/opt.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * AVOptions ABI compatibility wrapper
- * Copyright (c) 2010 Michael Niedermayer <michaelni at gmx.at>
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "avcodec.h"
-
-#if LIBAVCODEC_VERSION_MAJOR < 53 && CONFIG_SHARED && HAVE_SYMVER
-
-FF_SYMVER(const AVOption *, av_find_opt, (void *obj, const char *name, const char *unit, int mask, int flags), "LIBAVCODEC_52"){
- return av_find_opt(obj, name, unit, mask, flags);
-}
-FF_SYMVER(int, av_set_string3, (void *obj, const char *name, const char *val, int alloc, const AVOption **o_out), "LIBAVCODEC_52"){
- return av_set_string3(obj, name, val, alloc, o_out);
-}
-FF_SYMVER(const AVOption *, av_set_double, (void *obj, const char *name, double n), "LIBAVCODEC_52"){
- return av_set_double(obj, name, n);
-}
-FF_SYMVER(const AVOption *, av_set_q, (void *obj, const char *name, AVRational n), "LIBAVCODEC_52"){
- return av_set_q(obj, name, n);
-}
-FF_SYMVER(const AVOption *, av_set_int, (void *obj, const char *name, int64_t n), "LIBAVCODEC_52"){
- return av_set_int(obj, name, n);
-}
-FF_SYMVER(double, av_get_double, (void *obj, const char *name, const AVOption **o_out), "LIBAVCODEC_52"){
- return av_get_double(obj, name, o_out);
-}
-FF_SYMVER(AVRational, av_get_q, (void *obj, const char *name, const AVOption **o_out), "LIBAVCODEC_52"){
- return av_get_q(obj, name, o_out);
-}
-FF_SYMVER(int64_t, av_get_int, (void *obj, const char *name, const AVOption **o_out), "LIBAVCODEC_52"){
- return av_get_int(obj, name, o_out);
-}
-FF_SYMVER(const char *, av_get_string, (void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len), "LIBAVCODEC_52"){
- return av_get_string(obj, name, o_out, buf, buf_len);
-}
-FF_SYMVER(const AVOption *, av_next_option, (void *obj, const AVOption *last), "LIBAVCODEC_52"){
- return av_next_option(obj, last);
-}
-FF_SYMVER(int, av_opt_show2, (void *obj, void *av_log_obj, int req_flags, int rej_flags), "LIBAVCODEC_52"){
- return av_opt_show2(obj, av_log_obj, req_flags, rej_flags);
-}
-FF_SYMVER(void, av_opt_set_defaults, (void *s), "LIBAVCODEC_52"){
- return av_opt_set_defaults(s);
-}
-FF_SYMVER(void, av_opt_set_defaults2, (void *s, int mask, int flags), "LIBAVCODEC_52"){
- return av_opt_set_defaults2(s, mask, flags);
-}
-#endif
diff --git a/libavcodec/options.c b/libavcodec/options.c
index e469b44..39f6117 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -111,9 +111,6 @@ static const AVOption options[]={
{"cutoff", "set cutoff bandwidth", OFFSET(cutoff), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, A|E},
{"frame_size", NULL, OFFSET(frame_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, A|E},
{"frame_number", NULL, OFFSET(frame_number), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX},
-#if LIBAVCODEC_VERSION_MAJOR < 53
-{"real_pict_num", NULL, OFFSET(real_pict_num), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX},
-#endif
{"delay", NULL, OFFSET(delay), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX},
{"qcomp", "video quantizer scale compression (VBR)", OFFSET(qcompress), FF_OPT_TYPE_FLOAT, 0.5, -FLT_MAX, FLT_MAX, V|E},
{"qblur", "video quantizer scale blur (VBR)", OFFSET(qblur), FF_OPT_TYPE_FLOAT, 0.5, 0, FLT_MAX, V|E},
diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
index 29cc5e4..bc5a154 100644
--- a/libavcodec/rawdec.c
+++ b/libavcodec/rawdec.c
@@ -25,7 +25,6 @@
*/
#include "avcodec.h"
-#include "imgconvert.h"
#include "raw.h"
#include "libavutil/intreadwrite.h"
#include "libavcore/imgutils.h"
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index e304b74..e5dd6b5 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -36,7 +36,6 @@
#include "avcodec.h"
#include "dsputil.h"
#include "libavutil/opt.h"
-#include "imgconvert.h"
#include "audioconvert.h"
#include "internal.h"
#include <stdlib.h>
@@ -94,13 +93,6 @@ void avcodec_register(AVCodec *codec)
codec->next = NULL;
}
-#if LIBAVCODEC_VERSION_MAJOR < 53
-void register_avcodec(AVCodec *codec)
-{
- avcodec_register(codec);
-}
-#endif
-
unsigned avcodec_get_edge_width(void)
{
return EDGE_WIDTH;
@@ -220,12 +212,6 @@ void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height){
*width=FFALIGN(*width, align);
}
-#if LIBAVCODEC_VERSION_MAJOR < 53
-int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h){
- return av_image_check_size(w, h, 0, av_log_ctx);
-}
-#endif
-
int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){
int i;
int w= s->width;
@@ -1087,20 +1073,6 @@ unsigned int av_xiphlacing(unsigned char *s, unsigned int v)
return n;
}
-#if LIBAVCODEC_VERSION_MAJOR < 53
-#include "libavcore/parseutils.h"
-
-int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str)
-{
- return av_parse_video_size(width_ptr, height_ptr, str);
-}
-
-int av_parse_video_frame_rate(AVRational *frame_rate, const char *arg)
-{
- return av_parse_video_rate(frame_rate, arg);
-}
-#endif
-
int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b){
int i;
for(i=0; i<size && !(tab[i][0]==a && tab[i][1]==b); i++);
diff --git a/libavcodec/xvmc.h b/libavcodec/xvmc.h
index 29c010b..f021fad 100644
--- a/libavcodec/xvmc.h
+++ b/libavcodec/xvmc.h
@@ -25,11 +25,6 @@
#include "avcodec.h"
-#if LIBAVCODEC_VERSION_MAJOR < 53
-#define AV_XVMC_STATE_DISPLAY_PENDING 1 /** the surface should be shown, the video driver manipulates this */
-#define AV_XVMC_STATE_PREDICTION 2 /** the surface is needed for prediction, the codec manipulates this */
-#define AV_XVMC_STATE_OSD_SOURCE 4 /** the surface is needed for subpicture rendering */
-#endif
#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct
the number is 1337 speak for the letters IDCT MCo (motion compensation) */
@@ -152,21 +147,6 @@ struct xvmc_pix_fmt {
*/
int next_free_data_block_num;
-/** extensions may be placed here */
-#if LIBAVCODEC_VERSION_MAJOR < 53
-//@{
- /** State flags used to work around limitations in the MPlayer video system.
- 0 - Surface is not used.
- 1 - Surface is still held in application to be displayed or is
- still visible.
- 2 - Surface is still held in libavcodec buffer for prediction.
- */
- int state;
-
- /** pointer to the surface where the subpicture is rendered */
- void* p_osd_target_surface_render;
-//}@
-#endif
};
#endif /* AVCODEC_XVMC_H */
--
1.7.2.3
More information about the ffmpeg-devel
mailing list