summaryrefslogtreecommitdiffstats
path: root/ext/dts
diff options
context:
space:
mode:
Diffstat (limited to 'ext/dts')
-rw-r--r--ext/dts/gstdtsdec.c100
-rw-r--r--ext/dts/gstdtsdec.h4
2 files changed, 70 insertions, 34 deletions
diff --git a/ext/dts/gstdtsdec.c b/ext/dts/gstdtsdec.c
index 1ab80b01..58748e6c 100644
--- a/ext/dts/gstdtsdec.c
+++ b/ext/dts/gstdtsdec.c
@@ -33,8 +33,40 @@
#include <gst/gst.h>
#include <gst/audio/multichannel.h>
+#ifndef DTS_OLD
+#include <dca.h>
+#else
#include <dts.h>
+typedef struct dts_state_s dca_state_t;
+#define DCA_MONO DTS_MONO
+#define DCA_CHANNEL DTS_CHANNEL
+#define DCA_STEREO DTS_STEREO
+#define DCA_STEREO_SUMDIFF DTS_STEREO_SUMDIFF
+#define DCA_STEREO_TOTAL DTS_STEREO_TOTAL
+#define DCA_3F DTS_3F
+#define DCA_2F1R DTS_2F1R
+#define DCA_3F1R DTS_3F1R
+#define DCA_2F2R DTS_2F2R
+#define DCA_3F2R DTS_3F2R
+#define DCA_4F2R DTS_4F2R
+#define DCA_DOLBY DTS_DOLBY
+#define DCA_CHANNEL_MAX DTS_CHANNEL_MAX
+#define DCA_CHANNEL_BITS DTS_CHANNEL_BITS
+#define DCA_CHANNEL_MASK DTS_CHANNEL_MASK
+#define DCA_LFE DTS_LFE
+#define DCA_ADJUST_LEVEL DTS_ADJUST_LEVEL
+
+#define dca_init dts_init
+#define dca_syncinfo dts_syncinfo
+#define dca_frame dts_frame
+#define dca_dynrng dts_dynrng
+#define dca_blocks_num dts_blocks_num
+#define dca_block dts_block
+#define dca_samples dts_samples
+#define dca_free dts_free
+#endif
+
#include "gstdtsdec.h"
#include <liboil/liboil.h>
@@ -180,24 +212,24 @@ gst_dtsdec_channels (uint32_t flags, GstAudioChannelPosition ** pos)
return 0;
}
- switch (flags & DTS_CHANNEL_MASK) {
- case DTS_MONO:
+ switch (flags & DCA_CHANNEL_MASK) {
+ case DCA_MONO:
chans = 1;
if (tpos)
tpos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_MONO;
break;
- /* case DTS_CHANNEL: */
- case DTS_STEREO:
- case DTS_STEREO_SUMDIFF:
- case DTS_STEREO_TOTAL:
- case DTS_DOLBY:
+ /* case DCA_CHANNEL: */
+ case DCA_STEREO:
+ case DCA_STEREO_SUMDIFF:
+ case DCA_STEREO_TOTAL:
+ case DCA_DOLBY:
chans = 2;
if (tpos) {
tpos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
tpos[1] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
}
break;
- case DTS_3F:
+ case DCA_3F:
chans = 3;
if (tpos) {
tpos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
@@ -205,7 +237,7 @@ gst_dtsdec_channels (uint32_t flags, GstAudioChannelPosition ** pos)
tpos[2] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
}
break;
- case DTS_2F1R:
+ case DCA_2F1R:
chans = 3;
if (tpos) {
tpos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
@@ -213,7 +245,7 @@ gst_dtsdec_channels (uint32_t flags, GstAudioChannelPosition ** pos)
tpos[2] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
}
break;
- case DTS_3F1R:
+ case DCA_3F1R:
chans = 4;
if (tpos) {
tpos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
@@ -222,7 +254,7 @@ gst_dtsdec_channels (uint32_t flags, GstAudioChannelPosition ** pos)
tpos[3] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
}
break;
- case DTS_2F2R:
+ case DCA_2F2R:
chans = 4;
if (tpos) {
tpos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
@@ -231,7 +263,7 @@ gst_dtsdec_channels (uint32_t flags, GstAudioChannelPosition ** pos)
tpos[3] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
}
break;
- case DTS_3F2R:
+ case DCA_3F2R:
chans = 5;
if (tpos) {
tpos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
@@ -241,7 +273,7 @@ gst_dtsdec_channels (uint32_t flags, GstAudioChannelPosition ** pos)
tpos[4] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
}
break;
- case DTS_4F2R:
+ case DCA_4F2R:
chans = 6;
if (tpos) {
tpos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER;
@@ -256,7 +288,7 @@ gst_dtsdec_channels (uint32_t flags, GstAudioChannelPosition ** pos)
g_warning ("dtsdec: invalid flags 0x%x", flags);
return 0;
}
- if (flags & DTS_LFE) {
+ if (flags & DCA_LFE) {
if (tpos) {
tpos[chans] = GST_AUDIO_CHANNEL_POSITION_LFE;
}
@@ -397,7 +429,7 @@ gst_dtsdec_handle_frame (GstDtsDec * dts, guint8 * data,
gst_dtsdec_update_streaminfo (dts);
}
- if (dts->request_channels == DTS_CHANNEL) {
+ if (dts->request_channels == DCA_CHANNEL) {
GstCaps *caps;
caps = gst_pad_get_allowed_caps (dts->srcpad);
@@ -406,12 +438,12 @@ gst_dtsdec_handle_frame (GstDtsDec * dts, guint8 * data,
GstStructure *structure = gst_caps_get_structure (copy, 0);
gint channels;
const int dts_channels[6] = {
- DTS_MONO,
- DTS_STEREO,
- DTS_STEREO | DTS_LFE,
- DTS_2F2R,
- DTS_2F2R | DTS_LFE,
- DTS_3F2R | DTS_LFE,
+ DCA_MONO,
+ DCA_STEREO,
+ DCA_STEREO | DCA_LFE,
+ DCA_2F2R,
+ DCA_2F2R | DCA_LFE,
+ DCA_3F2R | DCA_LFE,
};
/* Prefer the original number of channels, but fixate to something
@@ -429,7 +461,7 @@ gst_dtsdec_handle_frame (GstDtsDec * dts, guint8 * data,
} else if (flags) {
dts->request_channels = dts->stream_channels;
} else {
- dts->request_channels = DTS_3F2R | DTS_LFE;
+ dts->request_channels = DCA_3F2R | DCA_LFE;
}
if (caps)
@@ -437,15 +469,15 @@ gst_dtsdec_handle_frame (GstDtsDec * dts, guint8 * data,
}
/* process */
- flags = dts->request_channels | DTS_ADJUST_LEVEL;
+ flags = dts->request_channels | DCA_ADJUST_LEVEL;
dts->level = 1;
- if (dts_frame (dts->state, data, &flags, &dts->level, dts->bias)) {
+ if (dca_frame (dts->state, data, &flags, &dts->level, dts->bias)) {
GST_WARNING ("dts_frame error");
return GST_FLOW_OK;
}
- channels = flags & (DTS_CHANNEL_MASK | DTS_LFE);
+ channels = flags & (DCA_CHANNEL_MASK | DCA_LFE);
if (dts->using_channels != channels) {
need_renegotiation = TRUE;
@@ -462,18 +494,18 @@ gst_dtsdec_handle_frame (GstDtsDec * dts, guint8 * data,
}
if (dts->dynamic_range_compression == FALSE) {
- dts_dynrng (dts->state, NULL, NULL);
+ dca_dynrng (dts->state, NULL, NULL);
}
/* handle decoded data, one block is 256 samples */
- num_blocks = dts_blocks_num (dts->state);
+ num_blocks = dca_blocks_num (dts->state);
for (i = 0; i < num_blocks; i++) {
- if (dts_block (dts->state)) {
+ if (dca_block (dts->state)) {
GST_WARNING ("dts_block error %d", i);
continue;
}
- samples = dts_samples (dts->state);
+ samples = dca_samples (dts->state);
num_c = gst_dtsdec_channels (dts->using_channels, NULL);
result = gst_pad_alloc_buffer_and_set_caps (dts->srcpad, 0,
@@ -526,7 +558,7 @@ gst_dtsdec_chain_raw (GstPad * pad, GstBuffer * buf)
size = GST_BUFFER_SIZE (buf);
length = 0;
while (size >= 7) {
- length = dts_syncinfo (dts->state, data, &flags,
+ length = dca_syncinfo (dts->state, data, &flags,
&sample_rate, &bit_rate, &frame_length);
if (length == 0) {
/* shift window to re-find sync */
@@ -647,16 +679,16 @@ gst_dtsdec_change_state (GstElement * element, GstStateChange transition)
GstDtsDecClass *klass;
klass = GST_DTSDEC_CLASS (G_OBJECT_GET_CLASS (dts));
- dts->state = dts_init (klass->dts_cpuflags);
+ dts->state = dca_init (klass->dts_cpuflags);
break;
}
case GST_STATE_CHANGE_READY_TO_PAUSED:
- dts->samples = dts_samples (dts->state);
+ dts->samples = dca_samples (dts->state);
dts->bit_rate = -1;
dts->sample_rate = -1;
dts->stream_channels = 0;
/* FIXME force stereo for now */
- dts->request_channels = DTS_CHANNEL;
+ dts->request_channels = DCA_CHANNEL;
dts->using_channels = 0;
dts->level = 1;
dts->bias = 0;
@@ -681,7 +713,7 @@ gst_dtsdec_change_state (GstElement * element, GstStateChange transition)
}
break;
case GST_STATE_CHANGE_READY_TO_NULL:
- dts_free (dts->state);
+ dca_free (dts->state);
dts->state = NULL;
break;
default:
diff --git a/ext/dts/gstdtsdec.h b/ext/dts/gstdtsdec.h
index ad91f02c..f0b9e4c0 100644
--- a/ext/dts/gstdtsdec.h
+++ b/ext/dts/gstdtsdec.h
@@ -58,7 +58,11 @@ struct _GstDtsDec {
sample_t bias;
gboolean dynamic_range_compression;
sample_t *samples;
+#ifndef DTS_OLD
+ dca_state_t *state;
+#else
dts_state_t *state;
+#endif
gboolean dvdmode;
/* Data left over from the previous buffer */