Esempio n. 1
0
MPF_DECLARE(mpf_audio_stream_t*) mpf_encoder_create(mpf_audio_stream_t *sink, mpf_codec_t *codec, apr_pool_t *pool)
{
	apr_size_t frame_size;
	mpf_encoder_t *encoder;
	mpf_stream_capabilities_t *capabilities;
	if(!sink || !codec) {
		return NULL;
	}
	encoder = apr_palloc(pool,sizeof(mpf_encoder_t));
	capabilities = mpf_stream_capabilities_create(STREAM_DIRECTION_SEND,pool);
	encoder->base = mpf_audio_stream_create(encoder,&vtable,capabilities,pool);
	if(!encoder->base) {
		return NULL;
	}
	encoder->base->tx_descriptor = mpf_codec_lpcm_descriptor_create(
		sink->tx_descriptor->sampling_rate,
		sink->tx_descriptor->channel_count,
		pool);
	encoder->base->tx_event_descriptor = sink->tx_event_descriptor;
	
	encoder->sink = sink;
	encoder->codec = codec;

	frame_size = mpf_codec_frame_size_calculate(sink->tx_descriptor,codec->attribs);
	encoder->frame_out.codec_frame.size = frame_size;
	encoder->frame_out.codec_frame.buffer = apr_palloc(pool,frame_size);
	return encoder->base;
}
Esempio n. 2
0
/** Create sample file reader descriptor */
static mpf_audio_file_descriptor_t* mpf_file_reader_descriptor_create(mpf_suite_session_t *session)
{
	mpf_audio_file_descriptor_t *descriptor = apr_palloc(session->pool,sizeof(mpf_audio_file_descriptor_t));
	descriptor->mask = FILE_READER;
	descriptor->read_handle = fopen("demo.pcm","rb");
	descriptor->write_handle = NULL;
	descriptor->codec_descriptor = mpf_codec_lpcm_descriptor_create(8000,1,session->pool);
	return descriptor;
}
Esempio n. 3
0
/** Create sample file writer descriptor */
static mpf_audio_file_descriptor_t* mpf_file_writer_descriptor_create(mpf_suite_session_t *session)
{
	mpf_audio_file_descriptor_t *descriptor = apr_palloc(session->pool,sizeof(mpf_audio_file_descriptor_t));
	descriptor->mask = FILE_WRITER;
	descriptor->max_write_size = 500000; /* 500Kb */
	descriptor->write_handle = fopen("demo_out.pcm","wb");
	descriptor->read_handle = NULL;
	descriptor->codec_descriptor = mpf_codec_lpcm_descriptor_create(8000,1,session->pool);
	return descriptor;
}
Esempio n. 4
0
/** Create file reader descriptor */
static mpf_audio_file_descriptor_t* mpf_file_reader_descriptor_create(const mpf_suite_agent_t *agent, const mpf_suite_session_t *session)
{
	const char *file_path = apt_datadir_filepath_get(agent->dir_layout,"demo-8kHz.pcm",session->pool);
	mpf_audio_file_descriptor_t *descriptor = apr_palloc(session->pool,sizeof(mpf_audio_file_descriptor_t));
	descriptor->mask = FILE_READER;
	descriptor->read_handle = fopen(file_path,"rb");
	if(!descriptor->read_handle) {
		apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Open File [%s]",file_path);
	}
	descriptor->write_handle = NULL;
	descriptor->codec_descriptor = mpf_codec_lpcm_descriptor_create(8000,1,session->pool);
	return descriptor;
}
Esempio n. 5
0
/** Create file writer descriptor */
static mpf_audio_file_descriptor_t* mpf_file_writer_descriptor_create(const mpf_suite_agent_t *agent, const mpf_suite_session_t *session)
{
	const char *file_path = apt_vardir_filepath_get(agent->dir_layout,"output-8kHz.pcm",session->pool);
	mpf_audio_file_descriptor_t *descriptor = apr_palloc(session->pool,sizeof(mpf_audio_file_descriptor_t));
	descriptor->mask = FILE_WRITER;
	descriptor->max_write_size = 500000; /* ~500Kb */
	descriptor->write_handle = NULL;
	descriptor->read_handle = NULL;
	descriptor->codec_descriptor = mpf_codec_lpcm_descriptor_create(8000,1,session->pool);
	if(file_path) {
		apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Open File [%s] for Writing",file_path);
		descriptor->write_handle = fopen(file_path,"wb");
		if(!descriptor->write_handle) {
			apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Open File [%s] for Writing",file_path);
		}
	}
	return descriptor;
}
Esempio n. 6
0
/** Create codec descriptor by capabilities */
MPF_DECLARE(mpf_codec_descriptor_t*) mpf_codec_descriptor_create_by_capabilities(const mpf_codec_capabilities_t *capabilities, const mpf_codec_descriptor_t *peer, apr_pool_t *pool)
{
    mpf_codec_descriptor_t *descriptor;
    mpf_codec_attribs_t *attribs = NULL;
    if(capabilities && peer) {
        attribs = mpf_codec_capabilities_attribs_find(capabilities,peer);
    }

    if(!attribs) {
        return mpf_codec_lpcm_descriptor_create(8000,1,pool);
    }

    descriptor = mpf_codec_descriptor_create(pool);
    *descriptor = *peer;
    if(apt_string_compare(&peer->name,&attribs->name) == FALSE) {
        descriptor->payload_type = RTP_PT_UNKNOWN;
        descriptor->name = attribs->name;
    }
    return descriptor;
}