You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	Add asrc_anullsrc - null audio source.
Based on a patch by "S.N. Hemanth Meenakshisundaram" smeenaks!ucsd!edu. Originally committed as revision 25188 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		| @@ -14,6 +14,40 @@ Pass the audio source unchanged to the output. | |||||||
|  |  | ||||||
| @c man end AUDIO FILTERS | @c man end AUDIO FILTERS | ||||||
|  |  | ||||||
|  | @chapter Audio Sources | ||||||
|  | @c man begin AUDIO SOURCES | ||||||
|  |  | ||||||
|  | Below is a description of the currently available audio sources. | ||||||
|  |  | ||||||
|  | @section anullsrc | ||||||
|  |  | ||||||
|  | Null audio source, never return audio frames. It is mainly useful as a | ||||||
|  | template and to be employed in analysis / debugging tools. | ||||||
|  |  | ||||||
|  | It accepts as optional parameter a string of the form | ||||||
|  | @var{sample_rate}:@var{channel_layout}. | ||||||
|  |  | ||||||
|  | @var{sample_rate} specify the sample rate, and defaults to 44100. | ||||||
|  |  | ||||||
|  | @var{channel_layout} specify the channel layout, and can be either an | ||||||
|  | integer or a string representing a channel layout. The default value | ||||||
|  | of @var{channel_layout} is 3, which corresponds to CH_LAYOUT_STEREO. | ||||||
|  |  | ||||||
|  | Check the channel_layout_map definition in | ||||||
|  | @file{libavcodec/audioconvert.c} for the correspondance between string | ||||||
|  | and channel layout values. | ||||||
|  |  | ||||||
|  | Follow some examples: | ||||||
|  | @example | ||||||
|  | #  set the sample rate to 48000 Hz and the channel layout to CH_LAYOUT_MONO. | ||||||
|  | anullsrc=48000:4 | ||||||
|  |  | ||||||
|  | # same as | ||||||
|  | anullsrc=48000:mono | ||||||
|  | @end example | ||||||
|  |  | ||||||
|  | @c man end AUDIO SOURCES | ||||||
|  |  | ||||||
| @chapter Video Filters | @chapter Video Filters | ||||||
| @c man begin VIDEO FILTERS | @c man begin VIDEO FILTERS | ||||||
|  |  | ||||||
|   | |||||||
| @@ -16,6 +16,8 @@ OBJS = allfilters.o                                                     \ | |||||||
|  |  | ||||||
| OBJS-$(CONFIG_ANULL_FILTER)                  += af_anull.o | OBJS-$(CONFIG_ANULL_FILTER)                  += af_anull.o | ||||||
|  |  | ||||||
|  | OBJS-$(CONFIG_ANULLSRC_FILTER)               += asrc_anullsrc.o | ||||||
|  |  | ||||||
| OBJS-$(CONFIG_ASPECT_FILTER)                 += vf_aspect.o | OBJS-$(CONFIG_ASPECT_FILTER)                 += vf_aspect.o | ||||||
| OBJS-$(CONFIG_CROP_FILTER)                   += vf_crop.o | OBJS-$(CONFIG_CROP_FILTER)                   += vf_crop.o | ||||||
| OBJS-$(CONFIG_FIFO_FILTER)                   += vf_fifo.o | OBJS-$(CONFIG_FIFO_FILTER)                   += vf_fifo.o | ||||||
|   | |||||||
| @@ -36,6 +36,8 @@ void avfilter_register_all(void) | |||||||
|  |  | ||||||
|     REGISTER_FILTER (ANULL,       anull,       af); |     REGISTER_FILTER (ANULL,       anull,       af); | ||||||
|  |  | ||||||
|  |     REGISTER_FILTER (ANULLSRC,    anullsrc,    asrc); | ||||||
|  |  | ||||||
|     REGISTER_FILTER (ASPECT,      aspect,      vf); |     REGISTER_FILTER (ASPECT,      aspect,      vf); | ||||||
|     REGISTER_FILTER (CROP,        crop,        vf); |     REGISTER_FILTER (CROP,        crop,        vf); | ||||||
|     REGISTER_FILTER (FIFO,        fifo,        vf); |     REGISTER_FILTER (FIFO,        fifo,        vf); | ||||||
|   | |||||||
							
								
								
									
										96
									
								
								libavfilter/asrc_anullsrc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								libavfilter/asrc_anullsrc.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | |||||||
|  | /* | ||||||
|  |  * 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 | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @file | ||||||
|  |  * null audio source | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include "avfilter.h" | ||||||
|  | #include "libavcodec/audioconvert.h" | ||||||
|  |  | ||||||
|  | typedef struct { | ||||||
|  |     int64_t channel_layout; | ||||||
|  |     int64_t sample_rate; | ||||||
|  | } ANullContext; | ||||||
|  |  | ||||||
|  | static int init(AVFilterContext *ctx, const char *args, void *opaque) | ||||||
|  | { | ||||||
|  |     ANullContext *priv = ctx->priv; | ||||||
|  |     char channel_layout_str[128] = ""; | ||||||
|  |  | ||||||
|  |     priv->sample_rate = 44100; | ||||||
|  |     priv->channel_layout = CH_LAYOUT_STEREO; | ||||||
|  |  | ||||||
|  |     if (args) | ||||||
|  |         sscanf(args, "%"PRId64":%s", &priv->sample_rate, channel_layout_str); | ||||||
|  |  | ||||||
|  |     if (priv->sample_rate < 0) { | ||||||
|  |         av_log(ctx, AV_LOG_ERROR, "Invalid negative sample rate: %"PRId64"\n", priv->sample_rate); | ||||||
|  |         return AVERROR(EINVAL); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (*channel_layout_str) | ||||||
|  |         if (!(priv->channel_layout = avcodec_get_channel_layout(channel_layout_str)) | ||||||
|  |             && sscanf(channel_layout_str, "%"PRId64, &priv->channel_layout) != 1) { | ||||||
|  |             av_log(ctx, AV_LOG_ERROR, "Invalid value '%s' for channel layout\n", | ||||||
|  |                    channel_layout_str); | ||||||
|  |             return AVERROR(EINVAL); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int config_props(AVFilterLink *outlink) | ||||||
|  | { | ||||||
|  |     ANullContext *priv = outlink->src->priv; | ||||||
|  |     char buf[128]; | ||||||
|  |     int chans_nb; | ||||||
|  |  | ||||||
|  |     outlink->sample_rate = priv->sample_rate; | ||||||
|  |     outlink->channel_layout = priv->channel_layout; | ||||||
|  |  | ||||||
|  |     chans_nb = avcodec_channel_layout_num_channels(priv->channel_layout); | ||||||
|  |     avcodec_get_channel_layout_string(buf, sizeof(buf), chans_nb, priv->channel_layout); | ||||||
|  |     av_log(outlink->src, AV_LOG_INFO, | ||||||
|  |            "sample_rate:%"PRId64 " channel_layout:%"PRId64 " channel_layout_description:'%s'\n", | ||||||
|  |            priv->sample_rate, priv->channel_layout, buf); | ||||||
|  |  | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int request_frame(AVFilterLink *link) | ||||||
|  | { | ||||||
|  |     return -1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | AVFilter avfilter_asrc_anullsrc = { | ||||||
|  |     .name        = "anullsrc", | ||||||
|  |     .description = NULL_IF_CONFIG_SMALL("Null audio source, never return audio frames."), | ||||||
|  |  | ||||||
|  |     .init        = init, | ||||||
|  |     .priv_size   = sizeof(ANullContext), | ||||||
|  |  | ||||||
|  |     .inputs      = (AVFilterPad[]) {{ .name = NULL}}, | ||||||
|  |  | ||||||
|  |     .outputs     = (AVFilterPad[]) {{ .name = "default", | ||||||
|  |                                       .type = AVMEDIA_TYPE_AUDIO, | ||||||
|  |                                       .config_props = config_props, | ||||||
|  |                                       .request_frame = request_frame, }, | ||||||
|  |                                     { .name = NULL}}, | ||||||
|  | }; | ||||||
| @@ -25,7 +25,7 @@ | |||||||
| #include "libavutil/avutil.h" | #include "libavutil/avutil.h" | ||||||
|  |  | ||||||
| #define LIBAVFILTER_VERSION_MAJOR  1 | #define LIBAVFILTER_VERSION_MAJOR  1 | ||||||
| #define LIBAVFILTER_VERSION_MINOR 42 | #define LIBAVFILTER_VERSION_MINOR 43 | ||||||
| #define LIBAVFILTER_VERSION_MICRO  0 | #define LIBAVFILTER_VERSION_MICRO  0 | ||||||
|  |  | ||||||
| #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user