annotate libmpcodecs/ae_pcm.c @ 16506:1e42b8be5b7f

add back_ptr add info_frames require sync_point after headers require info packets to be between headers and frames (or you could say they are headers now) add userdata stream type
author michael
date Sat, 17 Sep 2005 19:27:39 +0000
parents c2979462805a
children 6ff3379a0862
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
1 #include <stdio.h>
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
2 #include <stdlib.h>
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
3 #include <inttypes.h>
15238
2cc48c37a7eb FreeBSD fix
nexus
parents: 15234
diff changeset
4 #include <unistd.h>
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
5 #include <string.h>
15240
6d6792c02b6f macosx compilation fix
nicodvb
parents: 15238
diff changeset
6 #include <sys/types.h>
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
7 #include "m_option.h"
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
8 #include "../mp_msg.h"
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
9 #include "aviheader.h"
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
10 #include "../libaf/af_format.h"
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
11 #include "ms_hdr.h"
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
12 #include "muxer.h"
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
13 #include "ae_pcm.h"
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
14
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
15
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
16 static int bind_pcm(audio_encoder_t *encoder, muxer_stream_t *mux_a)
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
17 {
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
18 mux_a->h.dwScale=1;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
19 mux_a->h.dwRate=encoder->params.sample_rate;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
20 mux_a->wf=malloc(sizeof(WAVEFORMATEX));
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
21 mux_a->wf->wFormatTag=0x1; // PCM
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
22 mux_a->wf->nChannels=encoder->params.channels;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
23 mux_a->h.dwSampleSize=2*mux_a->wf->nChannels;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
24 mux_a->wf->nBlockAlign=mux_a->h.dwSampleSize;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
25 mux_a->wf->nSamplesPerSec=mux_a->h.dwRate;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
26 mux_a->wf->nAvgBytesPerSec=mux_a->h.dwSampleSize*mux_a->wf->nSamplesPerSec;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
27 mux_a->wf->wBitsPerSample=16;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
28 mux_a->wf->cbSize=0; // FIXME for l3codeca.acm
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
29
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
30 encoder->input_format = (mux_a->wf->wBitsPerSample==8) ? AF_FORMAT_U8 : AF_FORMAT_S16_LE;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
31 encoder->min_buffer_size = 16384;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
32 encoder->max_buffer_size = mux_a->wf->nAvgBytesPerSec;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
33
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
34 return 1;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
35 }
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
36
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
37 static int encode_pcm(audio_encoder_t *encoder, uint8_t *dest, void *src, int nsamples, int max_size)
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
38 {
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
39 max_size = min(nsamples, max_size);
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
40 memcpy(dest, src, max_size);
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
41 return max_size;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
42 }
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
43
15258
c2979462805a fixed wrong function pointers definitions
nicodvb
parents: 15240
diff changeset
44 static int set_decoded_len(audio_encoder_t *encoder, int len)
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
45 {
15258
c2979462805a fixed wrong function pointers definitions
nicodvb
parents: 15240
diff changeset
46 return len;
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
47 }
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
48
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
49 static int close_pcm(audio_encoder_t *encoder)
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
50 {
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
51 return 1;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
52 }
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
53
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
54 static int get_frame_size(audio_encoder_t *encoder)
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
55 {
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
56 return 0;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
57 }
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
58
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
59 int mpae_init_pcm(audio_encoder_t *encoder)
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
60 {
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
61 encoder->params.samples_per_frame = encoder->params.sample_rate;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
62 encoder->params.bitrate = encoder->params.sample_rate * encoder->params.channels * 2 * 8;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
63
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
64 encoder->decode_buffer_size = encoder->params.bitrate / 8;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
65 encoder->bind = bind_pcm;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
66 encoder->get_frame_size = get_frame_size;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
67 encoder->set_decoded_len = set_decoded_len;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
68 encoder->encode = encode_pcm;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
69 encoder->close = close_pcm;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
70
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
71 return 1;
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
72 }
e84a6ae9d51e audio encoding reworked
nicodvb
parents:
diff changeset
73