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 | ||||
|  | ||||
| @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 | ||||
| @c man begin VIDEO FILTERS | ||||
|  | ||||
|   | ||||
| @@ -16,6 +16,8 @@ OBJS = allfilters.o                                                     \ | ||||
|  | ||||
| OBJS-$(CONFIG_ANULL_FILTER)                  += af_anull.o | ||||
|  | ||||
| OBJS-$(CONFIG_ANULLSRC_FILTER)               += asrc_anullsrc.o | ||||
|  | ||||
| OBJS-$(CONFIG_ASPECT_FILTER)                 += vf_aspect.o | ||||
| OBJS-$(CONFIG_CROP_FILTER)                   += vf_crop.o | ||||
| OBJS-$(CONFIG_FIFO_FILTER)                   += vf_fifo.o | ||||
|   | ||||
| @@ -36,6 +36,8 @@ void avfilter_register_all(void) | ||||
|  | ||||
|     REGISTER_FILTER (ANULL,       anull,       af); | ||||
|  | ||||
|     REGISTER_FILTER (ANULLSRC,    anullsrc,    asrc); | ||||
|  | ||||
|     REGISTER_FILTER (ASPECT,      aspect,      vf); | ||||
|     REGISTER_FILTER (CROP,        crop,        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" | ||||
|  | ||||
| #define LIBAVFILTER_VERSION_MAJOR  1 | ||||
| #define LIBAVFILTER_VERSION_MINOR 42 | ||||
| #define LIBAVFILTER_VERSION_MINOR 43 | ||||
| #define LIBAVFILTER_VERSION_MICRO  0 | ||||
|  | ||||
| #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user