rawdec: add sample_rate/channels private options.
This commit is contained in:
		
							parent
							
								
									2ea8faf39f
								
							
						
					
					
						commit
						5b3865fc5f
					
				| @ -50,7 +50,7 @@ static int raw_read_packet(AVFormatContext *s, AVPacket *pkt) | ||||
| AVInputFormat ff_pcm_ ## name ## _demuxer = {\ | ||||
|     #name,\ | ||||
|     NULL_IF_CONFIG_SMALL(long_name),\ | ||||
|     0,\ | ||||
|     sizeof(RawAudioDemuxerContext),\ | ||||
|     NULL,\ | ||||
|     ff_raw_read_header,\ | ||||
|     raw_read_packet,\ | ||||
| @ -59,6 +59,7 @@ AVInputFormat ff_pcm_ ## name ## _demuxer = {\ | ||||
|     .flags= AVFMT_GENERIC_INDEX,\ | ||||
|     .extensions = ext,\ | ||||
|     .value = codec,\ | ||||
|     .priv_class = &ff_rawaudio_demuxer_class,\ | ||||
| }; | ||||
| 
 | ||||
| PCMDEF(f64be, "PCM 64 bit floating-point big-endian format", | ||||
|  | ||||
| @ -23,6 +23,7 @@ | ||||
| #include "avformat.h" | ||||
| #include "avio_internal.h" | ||||
| #include "rawdec.h" | ||||
| #include "libavutil/opt.h" | ||||
| 
 | ||||
| /* raw input */ | ||||
| int ff_raw_read_header(AVFormatContext *s, AVFormatParameters *ap) | ||||
| @ -43,15 +44,26 @@ int ff_raw_read_header(AVFormatContext *s, AVFormatParameters *ap) | ||||
|         st->codec->codec_id = id; | ||||
| 
 | ||||
|         switch(st->codec->codec_type) { | ||||
|         case AVMEDIA_TYPE_AUDIO: | ||||
|             st->codec->sample_rate = ap->sample_rate; | ||||
|             if(ap->channels) st->codec->channels = ap->channels; | ||||
|             else             st->codec->channels = 1; | ||||
|         case AVMEDIA_TYPE_AUDIO: { | ||||
|             RawAudioDemuxerContext *s1 = s->priv_data; | ||||
| 
 | ||||
|             if (ap->sample_rate) | ||||
|                 st->codec->sample_rate = ap->sample_rate; | ||||
|             if (ap->channels) | ||||
|                 st->codec->channels    = ap->channels; | ||||
|             else st->codec->channels   = 1; | ||||
| 
 | ||||
|             if (s1->sample_rate) | ||||
|                 st->codec->sample_rate = s1->sample_rate; | ||||
|             if (s1->channels) | ||||
|                 st->codec->channels    = s1->channels; | ||||
| 
 | ||||
|             st->codec->bits_per_coded_sample = av_get_bits_per_sample(st->codec->codec_id); | ||||
|             assert(st->codec->bits_per_coded_sample > 0); | ||||
|             st->codec->block_align = st->codec->bits_per_coded_sample*st->codec->channels/8; | ||||
|             av_set_pts_info(st, 64, 1, st->codec->sample_rate); | ||||
|             break; | ||||
|             } | ||||
|         case AVMEDIA_TYPE_VIDEO: | ||||
|             if(ap->time_base.num) | ||||
|                 av_set_pts_info(st, 64, ap->time_base.num, ap->time_base.den); | ||||
| @ -138,17 +150,31 @@ int ff_raw_video_read_header(AVFormatContext *s, | ||||
| 
 | ||||
| /* Note: Do not forget to add new entries to the Makefile as well. */ | ||||
| 
 | ||||
| static const AVOption audio_options[] = { | ||||
|     { "sample_rate", "", offsetof(RawAudioDemuxerContext, sample_rate), FF_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, | ||||
|     { "channels",    "", offsetof(RawAudioDemuxerContext, channels),    FF_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, | ||||
|     { NULL }, | ||||
| }; | ||||
| 
 | ||||
| const AVClass ff_rawaudio_demuxer_class = { | ||||
|     .class_name     = "rawaudio demuxer", | ||||
|     .item_name      = av_default_item_name, | ||||
|     .option         = audio_options, | ||||
|     .version        = LIBAVUTIL_VERSION_INT, | ||||
| }; | ||||
| 
 | ||||
| #if CONFIG_G722_DEMUXER | ||||
| AVInputFormat ff_g722_demuxer = { | ||||
|     "g722", | ||||
|     NULL_IF_CONFIG_SMALL("raw G.722"), | ||||
|     0, | ||||
|     sizeof(RawAudioDemuxerContext), | ||||
|     NULL, | ||||
|     ff_raw_read_header, | ||||
|     ff_raw_read_partial_packet, | ||||
|     .flags= AVFMT_GENERIC_INDEX, | ||||
|     .extensions = "g722,722", | ||||
|     .value = CODEC_ID_ADPCM_G722, | ||||
|     .priv_class = &ff_rawaudio_demuxer_class, | ||||
| }; | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -23,6 +23,15 @@ | ||||
| #define AVFORMAT_RAWDEC_H | ||||
| 
 | ||||
| #include "avformat.h" | ||||
| #include "libavutil/log.h" | ||||
| 
 | ||||
| typedef struct RawAudioDemuxerContext { | ||||
|     AVClass *class; | ||||
|     int sample_rate; | ||||
|     int channels; | ||||
| } RawAudioDemuxerContext; | ||||
| 
 | ||||
| extern const AVClass ff_rawaudio_demuxer_class; | ||||
| 
 | ||||
| int ff_raw_read_header(AVFormatContext *s, AVFormatParameters *ap); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user