summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>2011-10-10 14:50:09 +0100
committerEdward Hervey <edward.hervey@collabora.co.uk>2011-10-31 11:14:03 +0100
commit13d1ff40f08a27b43861fdda1de95f5bc259430f (patch)
tree73f390fc2e1f0069ad20cff8d6a2864202a311b5
parentde5557ef849d9e9d6d6fcd80249281e0e0273fcd (diff)
ffmpegcodecmap: Always restrict audio codec in the unfixed cases
If the context isn't fixed yet or if it doesn't exist then always restrict the caps. Also restrict the maximum channels for G726 and G722 to 1 channel
-rw-r--r--ext/ffmpeg/gstffmpegcodecmap.c129
1 files changed, 63 insertions, 66 deletions
diff --git a/ext/ffmpeg/gstffmpegcodecmap.c b/ext/ffmpeg/gstffmpegcodecmap.c
index 89bda3d..61f8290 100644
--- a/ext/ffmpeg/gstffmpegcodecmap.c
+++ b/ext/ffmpeg/gstffmpegcodecmap.c
@@ -373,79 +373,76 @@ gst_ff_aud_caps_new (AVCodecContext * context, enum CodecID codec_id,
const gint *rates = NULL;
gint n_rates = 0;
- if (context) {
- /* so we must be after restricted caps in this particular case */
- switch (codec_id) {
- case CODEC_ID_MP2:
- {
- const static gint l_rates[] =
- { 48000, 44100, 32000, 24000, 22050, 16000 };
- n_rates = G_N_ELEMENTS (l_rates);
- rates = l_rates;
- break;
- }
- case CODEC_ID_EAC3:
- case CODEC_ID_AC3:
- {
- const static gint l_rates[] = { 48000, 44100, 32000 };
- n_rates = G_N_ELEMENTS (l_rates);
- rates = l_rates;
- break;
- }
- case CODEC_ID_ADPCM_SWF:
- {
- const static gint l_rates[] = { 11025, 22050, 44100 };
- n_rates = G_N_ELEMENTS (l_rates);
- rates = l_rates;
- break;
- }
- case CODEC_ID_ROQ_DPCM:
- {
- const static gint l_rates[] = { 22050 };
- n_rates = G_N_ELEMENTS (l_rates);
- rates = l_rates;
- break;
- }
- case CODEC_ID_ADPCM_G726:
- maxchannels = 1;
- break;
- case CODEC_ID_AMR_NB:
- {
- const static gint l_rates[] = { 8000 };
- maxchannels = 1;
- n_rates = G_N_ELEMENTS (l_rates);
- rates = l_rates;
- break;
- }
- case CODEC_ID_AMR_WB:
- {
- const static gint l_rates[] = { 16000 };
- maxchannels = 1;
- n_rates = G_N_ELEMENTS (l_rates);
- rates = l_rates;
- break;
- }
- default:
- break;
+ /* so we must be after restricted caps in this case */
+ switch (codec_id) {
+ case CODEC_ID_AAC:
+ case CODEC_ID_AAC_LATM:
+ case CODEC_ID_DTS:
+ maxchannels = 6;
+ break;
+ case CODEC_ID_MP2:
+ {
+ const static gint l_rates[] =
+ { 48000, 44100, 32000, 24000, 22050, 16000 };
+ n_rates = G_N_ELEMENTS (l_rates);
+ rates = l_rates;
+ break;
}
-
- /* TODO: handle context->channel_layouts here to set
- * the list of channel layouts supported by the encoder.
- * Unfortunately no encoder uses this yet....
- */
+ case CODEC_ID_EAC3:
+ case CODEC_ID_AC3:
+ {
+ const static gint l_rates[] = { 48000, 44100, 32000 };
+ maxchannels = 6;
+ n_rates = G_N_ELEMENTS (l_rates);
+ rates = l_rates;
+ break;
+ }
+ case CODEC_ID_ADPCM_G722:
+ case CODEC_ID_ADPCM_G726:
+ maxchannels = 1;
+ break;
+ case CODEC_ID_ADPCM_SWF:
+ {
+ const static gint l_rates[] = { 11025, 22050, 44100 };
+ n_rates = G_N_ELEMENTS (l_rates);
+ rates = l_rates;
+ break;
+ }
+ case CODEC_ID_ROQ_DPCM:
+ {
+ const static gint l_rates[] = { 22050 };
+ n_rates = G_N_ELEMENTS (l_rates);
+ rates = l_rates;
+ break;
+ }
+ case CODEC_ID_AMR_NB:
+ {
+ const static gint l_rates[] = { 8000 };
+ maxchannels = 1;
+ n_rates = G_N_ELEMENTS (l_rates);
+ rates = l_rates;
+ break;
+ }
+ case CODEC_ID_AMR_WB:
+ {
+ const static gint l_rates[] = { 16000 };
+ maxchannels = 1;
+ n_rates = G_N_ELEMENTS (l_rates);
+ rates = l_rates;
+ break;
+ }
+ default:
+ break;
}
+ /* TODO: handle context->channel_layouts here to set
+ * the list of channel layouts supported by the encoder.
+ * Unfortunately no encoder uses this yet....
+ */
/* regardless of encode/decode, open up channels if applicable */
/* Until decoders/encoders expose the maximum number of channels
* they support, we whitelist them here. */
switch (codec_id) {
- case CODEC_ID_AC3:
- case CODEC_ID_EAC3:
- case CODEC_ID_AAC:
- case CODEC_ID_AAC_LATM:
- case CODEC_ID_DTS:
- maxchannels = 6;
- break;
case CODEC_ID_WMAPRO:
case CODEC_ID_TRUEHD:
maxchannels = 8;