10 #include "libaf/af_format.h"
16 static int bind_pcm(audio_encoder_t
*encoder
, muxer_stream_t
*mux_a
)
19 mux_a
->h
.dwRate
=encoder
->params
.sample_rate
;
20 mux_a
->wf
=malloc(sizeof(WAVEFORMATEX
));
21 mux_a
->wf
->wFormatTag
=0x1; // PCM
22 mux_a
->wf
->nChannels
=encoder
->params
.channels
;
23 mux_a
->h
.dwSampleSize
=2*mux_a
->wf
->nChannels
;
24 mux_a
->wf
->nBlockAlign
=mux_a
->h
.dwSampleSize
;
25 mux_a
->wf
->nSamplesPerSec
=mux_a
->h
.dwRate
;
26 mux_a
->wf
->nAvgBytesPerSec
=mux_a
->h
.dwSampleSize
*mux_a
->wf
->nSamplesPerSec
;
27 mux_a
->wf
->wBitsPerSample
=16;
28 mux_a
->wf
->cbSize
=0; // FIXME for l3codeca.acm
30 encoder
->input_format
= (mux_a
->wf
->wBitsPerSample
==8) ? AF_FORMAT_U8
: AF_FORMAT_S16_LE
;
31 encoder
->min_buffer_size
= 16384;
32 encoder
->max_buffer_size
= mux_a
->wf
->nAvgBytesPerSec
;
37 static int encode_pcm(audio_encoder_t
*encoder
, uint8_t *dest
, void *src
, int nsamples
, int max_size
)
39 max_size
= min(nsamples
, max_size
);
40 memcpy(dest
, src
, max_size
);
44 static int set_decoded_len(audio_encoder_t
*encoder
, int len
)
49 static int close_pcm(audio_encoder_t
*encoder
)
54 static int get_frame_size(audio_encoder_t
*encoder
)
59 int mpae_init_pcm(audio_encoder_t
*encoder
)
61 encoder
->params
.samples_per_frame
= encoder
->params
.sample_rate
;
62 encoder
->params
.bitrate
= encoder
->params
.sample_rate
* encoder
->params
.channels
* 2 * 8;
64 encoder
->decode_buffer_size
= encoder
->params
.bitrate
/ 8;
65 encoder
->bind
= bind_pcm
;
66 encoder
->get_frame_size
= get_frame_size
;
67 encoder
->set_decoded_len
= set_decoded_len
;
68 encoder
->encode
= encode_pcm
;
69 encoder
->close
= close_pcm
;