view libmpcodecs/ae.c @ 15533:ddf15d233d58

Do not switch to audio tracks whose codec private data differs from the main audio track's as this will most likely result in messed up audio output. Patch by Michael Behrisch <list () behrisch ! de>
author mosu
date Sat, 21 May 2005 06:50:08 +0000
parents af245d15f502
children d9b74d27974d
line wrap: on
line source

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <inttypes.h>
#include <unistd.h>
#include <sys/types.h>
#include <math.h>
#include "aviheader.h"
#include "ms_hdr.h"
#include "muxer.h"
#include "ae.h"
#include "../config.h"

#ifdef HAVE_TOOLAME
#include "ae_toolame.h"
#endif

#ifdef HAVE_MP3LAME
#include "ae_lame.h"
#endif

#ifdef USE_LIBAVCODEC
#include "ae_lavc.h"
#endif

#ifdef HAVE_FAAC
#include "ae_faac.h"
#endif

#ifdef HAVE_TWOLAME
#include "ae_twolame.h"
#endif

audio_encoder_t *new_audio_encoder(muxer_stream_t *stream, audio_encoding_params_t *params)
{
	int ris;
	audio_encoder_t *encoder;
	if(! params)
		return NULL;
	
	encoder = (audio_encoder_t *) calloc(1, sizeof(audio_encoder_t));
	memcpy(&encoder->params, params, sizeof(audio_encoding_params_t));
	encoder->stream = stream;
	
	switch(stream->codec)
	{
		case ACODEC_PCM:
			ris = mpae_init_pcm(encoder);
			break;
#ifdef HAVE_TOOLAME
		case ACODEC_TOOLAME:
			ris = mpae_init_toolame(encoder);
			break;
#endif
#ifdef USE_LIBAVCODEC
		case ACODEC_LAVC:
			ris = mpae_init_lavc(encoder);
			break;
#endif
#ifdef HAVE_MP3LAME
		case ACODEC_VBRMP3:
			ris = mpae_init_lame(encoder);
			break;
#endif
#ifdef HAVE_FAAC
		case ACODEC_FAAC:
			ris = mpae_init_faac(encoder);
			break;
#endif
#ifdef HAVE_TWOLAME
		case ACODEC_TWOLAME:
			ris = mpae_init_twolame(encoder);
			break;
#endif
	}
	
	if(! ris)
	{
		free(encoder);
		return NULL;
	}
	encoder->bind(encoder, stream);
	encoder->decode_buffer = (int*)malloc(encoder->decode_buffer_size);
	if(! encoder->decode_buffer)
	{
		free(encoder);
		return NULL;
	}
	
	encoder->codec = stream->codec;
	return encoder;
}