/* * This file is part of Libav. * * Libav 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. * * Libav 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 Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVFILTER_FORMATS_H #define AVFILTER_FORMATS_H #include "avfilter.h" typedef struct AVFilterChannelLayouts { uint64_t *channel_layouts; ///< list of channel layouts int nb_channel_layouts; ///< number of channel layouts unsigned refcount; ///< number of references to this list struct AVFilterChannelLayouts ***refs; ///< references to this list } AVFilterChannelLayouts; /** * Return a channel layouts/samplerates list which contains the intersection of * the layouts/samplerates of a and b. Also, all the references of a, all the * references of b, and a and b themselves will be deallocated. * * If a and b do not share any common elements, neither is modified, and NULL * is returned. */ AVFilterChannelLayouts *ff_merge_channel_layouts(AVFilterChannelLayouts *a, AVFilterChannelLayouts *b); AVFilterFormats *ff_merge_samplerates(AVFilterFormats *a, AVFilterFormats *b); /** * Construct an empty AVFilterChannelLayouts/AVFilterFormats struct -- * representing any channel layout/sample rate. */ AVFilterChannelLayouts *ff_all_channel_layouts(void); AVFilterFormats *ff_all_samplerates(void); /** * A helper for query_formats() which sets all links to the same list of channel * layouts/sample rates. If there are no links hooked to this filter, the list * is freed. */ void ff_set_common_channel_layouts(AVFilterContext *ctx, AVFilterChannelLayouts *layouts); void ff_set_common_samplerates(AVFilterContext *ctx, AVFilterFormats *samplerates); int ff_add_channel_layout(AVFilterChannelLayouts **l, uint64_t channel_layout); /** * Add *ref as a new reference to f. */ void ff_channel_layouts_ref(AVFilterChannelLayouts *f, AVFilterChannelLayouts **ref); /** * Remove a reference to a channel layouts list. */ void ff_channel_layouts_unref(AVFilterChannelLayouts **ref); void ff_channel_layouts_changeref(AVFilterChannelLayouts **oldref, AVFilterChannelLayouts **newref); #endif // AVFILTER_FORMATS_H