annotate libaf/af_lavcac3enc.c @ 35467:364387ae95f4

Fix bug with stop button and playlist. Although the current file was stopped and its information still displayed, play would skip to next file in list. Now, the file stopped can be resumed.
author ib
date Sun, 02 Dec 2012 15:56:19 +0000
parents 4e7cc799cf54
children d206960484fe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
1 /*
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
2 * audio filter for runtime AC-3 encoding with libavcodec.
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
3 *
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
4 * Copyright (C) 2007 Ulion <ulion A gmail P com>
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
5 *
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
6 * This file is part of MPlayer.
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
7 *
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
8 * MPlayer is free software; you can redistribute it and/or modify
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
11 * (at your option) any later version.
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
12 *
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
13 * MPlayer is distributed in the hope that it will be useful,
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
16 * GNU General Public License for more details.
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
17 *
26740
b3a38b361fef Use standard license headers with standard formatting.
diego
parents: 26120
diff changeset
18 * You should have received a copy of the GNU General Public License along
b3a38b361fef Use standard license headers with standard formatting.
diego
parents: 26120
diff changeset
19 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
b3a38b361fef Use standard license headers with standard formatting.
diego
parents: 26120
diff changeset
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
21 */
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
22
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
23 #include <stdio.h>
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
24 #include <stdlib.h>
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
25 #include <string.h>
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
26 #include <inttypes.h>
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
27
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
28 #include "config.h"
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
29 #include "af.h"
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
30 #include "help_mp.h"
34174
a93891202051 Add missing mp_msg.h #includes, remove some unnecessary ones.
diego
parents: 33871
diff changeset
31 #include "mp_msg.h"
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
32 #include "reorder_ch.h"
33871
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents: 33198
diff changeset
33 #include "av_helpers.h"
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
34
26120
24ba95d88181 Add directory names to libavcodec #includes.
diego
parents: 25962
diff changeset
35 #include "libavcodec/avcodec.h"
30243
05f085c36d5b Let the format filter do the AC3 endianness conversion instead of duplicating
reimar
parents: 30241
diff changeset
36 #include "libavutil/intreadwrite.h"
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
37
34652
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
38 #define AC3_MAX_CHANNELS 6
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
39 #define AC3_FRAME_SIZE 1536
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
40 #define AC3_MAX_CODED_FRAME_SIZE 3840
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
41 //#define AC3_BIT_RATES_COUNT 19
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
42
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
43 static const int ac3_bit_rates[] = {
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
44 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000,
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
45 192000, 224000, 256000, 320000, 384000, 448000, 512000, 576000, 640000
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
46 };
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
47
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
48 // Data for specific instances of this filter
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
49 typedef struct af_ac3enc_s {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
50 struct AVCodec *lavc_acodec;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
51 struct AVCodecContext *lavc_actx;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
52 int add_iec61937_header;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
53 int bit_rate;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
54 char *pending_data;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
55 int pending_len;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
56 int expect_len;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
57 int min_channel_num;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
58 } af_ac3enc_t;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
59
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
60 // Initialization and runtime control
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
61 static int control(struct af_instance_s *af, int cmd, void *arg)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
62 {
34260
07a21268eb84 Remove pointless casts.
reimar
parents: 34174
diff changeset
63 af_ac3enc_t *s = af->setup;
07a21268eb84 Remove pointless casts.
reimar
parents: 34174
diff changeset
64 af_data_t *data = arg;
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
65 int i, bit_rate, test_output_res;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
66 static const int default_bit_rate[AC3_MAX_CHANNELS+1] = \
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
67 {0, 96000, 192000, 256000, 384000, 448000, 448000};
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
68
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
69 switch (cmd){
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
70 case AF_CONTROL_REINIT:
30241
02b9c1a452e1 Add support for distinguishing between little- and big-endian SPDIF AC3
reimar
parents: 29491
diff changeset
71 if (AF_FORMAT_IS_AC3(data->format) || data->nch < s->min_channel_num)
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
72 return AF_DETACH;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
73
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
74 s->pending_len = 0;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
75 s->expect_len = AC3_FRAME_SIZE * data->nch * data->bps;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
76 if (s->add_iec61937_header)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
77 af->mul = (double)AC3_FRAME_SIZE * 2 * 2 / s->expect_len;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
78 else
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
79 af->mul = (double)AC3_MAX_CODED_FRAME_SIZE / s->expect_len;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
80
29049
8c706ce21c6f Remove af_msg special-casing API in libaf.
bircoph
parents: 26740
diff changeset
81 mp_msg(MSGT_AFILTER, MSGL_DBG2, "af_lavcac3enc reinit: %d, %d, %f, %d.\n",
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
82 data->nch, data->rate, af->mul, s->expect_len);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
83
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
84 af->data->format = AF_FORMAT_S16_NE;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
85 if (data->rate == 48000 || data->rate == 44100 || data->rate == 32000)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
86 af->data->rate = data->rate;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
87 else
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
88 af->data->rate = 48000;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
89 if (data->nch > AC3_MAX_CHANNELS)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
90 af->data->nch = AC3_MAX_CHANNELS;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
91 else
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
92 af->data->nch = data->nch;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
93 af->data->bps = 2;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
94 test_output_res = af_test_output(af, data);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
95
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
96 bit_rate = s->bit_rate ? s->bit_rate : default_bit_rate[af->data->nch];
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
97
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
98 if (s->lavc_actx->channels != af->data->nch ||
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
99 s->lavc_actx->sample_rate != af->data->rate ||
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
100 s->lavc_actx->bit_rate != bit_rate) {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
101
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
102 if (s->lavc_actx->codec)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
103 avcodec_close(s->lavc_actx);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
104
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
105 // Put sample parameters
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
106 s->lavc_actx->channels = af->data->nch;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
107 s->lavc_actx->sample_rate = af->data->rate;
33109
01b19cf2649c Fix segfault in lavcac3enc audio filter.
iive
parents: 32696
diff changeset
108 s->lavc_actx->sample_fmt = AV_SAMPLE_FMT_S16;
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
109 s->lavc_actx->bit_rate = bit_rate;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
110
34566
f3d53cd55376 Update deprecated avcodec_alloc_context()/avcodec_open() API calls
siretart
parents: 34260
diff changeset
111 if(avcodec_open2(s->lavc_actx, s->lavc_acodec, NULL) < 0) {
33198
1f418f605d13 Do not use a deprecated audio encoder.
cehoyos
parents: 33109
diff changeset
112 mp_msg(MSGT_AFILTER, MSGL_ERR, MSGTR_CouldntOpenCodec, "ac3", bit_rate);
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
113 return AF_ERROR;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
114 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
115 }
30243
05f085c36d5b Let the format filter do the AC3 endianness conversion instead of duplicating
reimar
parents: 30241
diff changeset
116 af->data->format = AF_FORMAT_AC3_BE;
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
117 af->data->nch = 2;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
118 return test_output_res;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
119 case AF_CONTROL_COMMAND_LINE:
29049
8c706ce21c6f Remove af_msg special-casing API in libaf.
bircoph
parents: 26740
diff changeset
120 mp_msg(MSGT_AFILTER, MSGL_DBG2, "af_lavcac3enc cmdline: %s.\n", (char*)arg);
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
121 s->bit_rate = 0;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
122 s->min_channel_num = 0;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
123 s->add_iec61937_header = 0;
34260
07a21268eb84 Remove pointless casts.
reimar
parents: 34174
diff changeset
124 sscanf(arg,"%d:%d:%d", &s->add_iec61937_header, &s->bit_rate,
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
125 &s->min_channel_num);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
126 if (s->bit_rate < 1000)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
127 s->bit_rate *= 1000;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
128 if (s->bit_rate) {
34652
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
129 for (i = 0; i < FF_ARRAY_ELEMS(ac3_bit_rates); ++i)
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
130 if (ac3_bit_rates[i] == s->bit_rate)
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
131 break;
34652
4e7cc799cf54 lavcac3enc: make the filter buildable with shared FFmpeg
diego
parents: 34566
diff changeset
132 if (i >= FF_ARRAY_ELEMS(ac3_bit_rates)) {
29049
8c706ce21c6f Remove af_msg special-casing API in libaf.
bircoph
parents: 26740
diff changeset
133 mp_msg(MSGT_AFILTER, MSGL_WARN, "af_lavcac3enc unable set unsupported "
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
134 "bitrate %d, use default bitrate (check manpage to see "
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
135 "supported bitrates).\n", s->bit_rate);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
136 s->bit_rate = 0;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
137 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
138 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
139 if (s->min_channel_num == 0)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
140 s->min_channel_num = 5;
29049
8c706ce21c6f Remove af_msg special-casing API in libaf.
bircoph
parents: 26740
diff changeset
141 mp_msg(MSGT_AFILTER, MSGL_V, "af_lavcac3enc config spdif:%d, bitrate:%d, "
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
142 "minchnum:%d.\n", s->add_iec61937_header, s->bit_rate,
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
143 s->min_channel_num);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
144 return AF_OK;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
145 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
146 return AF_UNKNOWN;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
147 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
148
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
149 // Deallocate memory
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
150 static void uninit(struct af_instance_s* af)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
151 {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
152 if (af->data)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
153 free(af->data->audio);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
154 free(af->data);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
155 if (af->setup) {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
156 af_ac3enc_t *s = af->setup;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
157 af->setup = NULL;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
158 if(s->lavc_actx) {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
159 if (s->lavc_actx->codec)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
160 avcodec_close(s->lavc_actx);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
161 free(s->lavc_actx);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
162 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
163 free(s->pending_data);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
164 free(s);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
165 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
166 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
167
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
168 // Filter data through filter
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
169 static af_data_t* play(struct af_instance_s* af, af_data_t* data)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
170 {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
171 af_ac3enc_t *s = af->setup;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
172 af_data_t *c = data; // Current working data
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
173 af_data_t *l;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
174 int len, left, outsize = 0, destsize;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
175 char *buf, *src, *dest;
25642
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
176 int max_output_len;
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
177 int frame_num = (data->len + s->pending_len) / s->expect_len;
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
178
25642
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
179 if (s->add_iec61937_header)
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
180 max_output_len = AC3_FRAME_SIZE * 2 * 2 * frame_num;
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
181 else
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
182 max_output_len = AC3_MAX_CODED_FRAME_SIZE * frame_num;
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
183
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
184 if (af->data->len < max_output_len) {
29049
8c706ce21c6f Remove af_msg special-casing API in libaf.
bircoph
parents: 26740
diff changeset
185 mp_msg(MSGT_AFILTER, MSGL_V, "[libaf] Reallocating memory in module %s, "
25642
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
186 "old len = %i, new len = %i\n", af->info->name, af->data->len,
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
187 max_output_len);
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
188 free(af->data->audio);
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
189 af->data->audio = malloc(max_output_len);
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
190 if (!af->data->audio) {
29049
8c706ce21c6f Remove af_msg special-casing API in libaf.
bircoph
parents: 26740
diff changeset
191 mp_msg(MSGT_AFILTER, MSGL_FATAL, "[libaf] Could not allocate memory \n");
25642
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
192 return NULL;
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
193 }
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
194 af->data->len = max_output_len;
0c10c8859be8 Fix buffer overflow bug by calculate the buffer size accurately.
ulion
parents: 25357
diff changeset
195 }
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
196
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
197 l = af->data; // Local data
34260
07a21268eb84 Remove pointless casts.
reimar
parents: 34174
diff changeset
198 buf = l->audio;
07a21268eb84 Remove pointless casts.
reimar
parents: 34174
diff changeset
199 src = c->audio;
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
200 left = c->len;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
201
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
202
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
203 while (left > 0) {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
204 if (left + s->pending_len < s->expect_len) {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
205 memcpy(s->pending_data + s->pending_len, src, left);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
206 src += left;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
207 s->pending_len += left;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
208 left = 0;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
209 break;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
210 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
211
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
212 dest = s->add_iec61937_header ? buf + 8 : buf;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
213 destsize = (char *)l->audio + l->len - buf;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
214
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
215 if (s->pending_len) {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
216 int needs = s->expect_len - s->pending_len;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
217 if (needs > 0) {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
218 memcpy(s->pending_data + s->pending_len, src, needs);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
219 src += needs;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
220 left -= needs;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
221 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
222
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
223 if (c->nch >= 5)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
224 reorder_channel_nch(s->pending_data,
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
225 AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT,
29491
99eda963d27a Fix incorrect channel ordering for lavc audio codecs (specifically ffac3,
tack
parents: 29401
diff changeset
226 AF_CHANNEL_LAYOUT_LAVC_DEFAULT,
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
227 c->nch,
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
228 s->expect_len / 2, 2);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
229
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
230 len = avcodec_encode_audio(s->lavc_actx, dest, destsize,
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
231 (void *)s->pending_data);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
232 s->pending_len = 0;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
233 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
234 else {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
235 if (c->nch >= 5)
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
236 reorder_channel_nch(src,
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
237 AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT,
29491
99eda963d27a Fix incorrect channel ordering for lavc audio codecs (specifically ffac3,
tack
parents: 29401
diff changeset
238 AF_CHANNEL_LAYOUT_LAVC_DEFAULT,
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
239 c->nch,
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
240 s->expect_len / 2, 2);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
241 len = avcodec_encode_audio(s->lavc_actx,dest,destsize,(void *)src);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
242 src += s->expect_len;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
243 left -= s->expect_len;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
244 }
29049
8c706ce21c6f Remove af_msg special-casing API in libaf.
bircoph
parents: 26740
diff changeset
245 mp_msg(MSGT_AFILTER, MSGL_DBG2, "avcodec_encode_audio got %d, pending %d.\n",
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
246 len, s->pending_len);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
247
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
248 if (s->add_iec61937_header) {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
249 int bsmod = dest[5] & 0x7;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
250
30243
05f085c36d5b Let the format filter do the AC3 endianness conversion instead of duplicating
reimar
parents: 30241
diff changeset
251 AV_WB16(buf, 0xF872); // iec 61937 syncword 1
05f085c36d5b Let the format filter do the AC3 endianness conversion instead of duplicating
reimar
parents: 30241
diff changeset
252 AV_WB16(buf + 2, 0x4E1F); // iec 61937 syncword 2
05f085c36d5b Let the format filter do the AC3 endianness conversion instead of duplicating
reimar
parents: 30241
diff changeset
253 buf[4] = bsmod; // bsmod
05f085c36d5b Let the format filter do the AC3 endianness conversion instead of duplicating
reimar
parents: 30241
diff changeset
254 buf[5] = 0x01; // data-type ac3
05f085c36d5b Let the format filter do the AC3 endianness conversion instead of duplicating
reimar
parents: 30241
diff changeset
255 AV_WB16(buf + 6, len << 3); // number of bits in payload
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
256
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
257 memset(buf + 8 + len, 0, AC3_FRAME_SIZE * 2 * 2 - 8 - len);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
258 len = AC3_FRAME_SIZE * 2 * 2;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
259 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
260
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
261 outsize += len;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
262 buf += len;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
263 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
264 c->audio = l->audio;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
265 c->nch = 2;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
266 c->bps = 2;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
267 c->len = outsize;
29049
8c706ce21c6f Remove af_msg special-casing API in libaf.
bircoph
parents: 26740
diff changeset
268 mp_msg(MSGT_AFILTER, MSGL_DBG2, "play return size %d, pending %d\n",
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
269 outsize, s->pending_len);
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
270 return c;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
271 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
272
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
273 static int af_open(af_instance_t* af){
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
274
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
275 af_ac3enc_t *s = calloc(1,sizeof(af_ac3enc_t));
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
276 int pending_space = 2 * AC3_MAX_CHANNELS * AC3_FRAME_SIZE;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
277 s->pending_data = calloc(pending_space, sizeof(char));
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
278
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
279 af->control=control;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
280 af->uninit=uninit;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
281 af->play=play;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
282 af->mul=1;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
283 af->data=calloc(1,sizeof(af_data_t));
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
284 af->setup=s;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
285
31960
1ba5eef167aa Refactor more instances of avcodec_initialized handling into init_avcodec().
diego
parents: 30243
diff changeset
286 init_avcodec();
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
287
32695
5f69ed383ff1 Fix -af lavcac3enc after float ac3 encoder was made default in libavcodec.
cehoyos
parents: 31960
diff changeset
288 s->lavc_acodec = avcodec_find_encoder_by_name("ac3_fixed");
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
289 if (!s->lavc_acodec) {
32695
5f69ed383ff1 Fix -af lavcac3enc after float ac3 encoder was made default in libavcodec.
cehoyos
parents: 31960
diff changeset
290 mp_msg(MSGT_AFILTER, MSGL_ERR, MSGTR_LavcAudioCodecNotFound, "ac3_fixed");
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
291 return AF_ERROR;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
292 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
293
34566
f3d53cd55376 Update deprecated avcodec_alloc_context()/avcodec_open() API calls
siretart
parents: 34260
diff changeset
294 s->lavc_actx = avcodec_alloc_context3(NULL);
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
295 if (!s->lavc_actx) {
29049
8c706ce21c6f Remove af_msg special-casing API in libaf.
bircoph
parents: 26740
diff changeset
296 mp_msg(MSGT_AFILTER, MSGL_ERR, MSGTR_CouldntAllocateLavcContext);
25357
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
297 return AF_ERROR;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
298 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
299
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
300 return AF_OK;
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
301 }
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
302
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
303 af_info_t af_info_lavcac3enc = {
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
304 "runtime encode to ac3 using libavcodec",
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
305 "lavcac3enc",
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
306 "Ulion",
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
307 "",
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
308 AF_FLAGS_REENTRANT,
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
309 af_open
b265c001e64a Add new audio filter for encoding multi-channel audio into ac3 at runtime.
ulion
parents:
diff changeset
310 };