summaryrefslogtreecommitdiff
path: root/dlna/profiles/mpa.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dlna/profiles/mpa.cpp')
-rw-r--r--dlna/profiles/mpa.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/dlna/profiles/mpa.cpp b/dlna/profiles/mpa.cpp
new file mode 100644
index 0000000..09ba77b
--- /dev/null
+++ b/dlna/profiles/mpa.cpp
@@ -0,0 +1,121 @@
+/*
+ * File: profiles_mp3.cpp
+ * Author: savop
+ *
+ * Created on 7. Dezember 2009, 13:08
+ */
+
+#include "profiles/mpa.h"
+#include "profiles/profile_data.h"
+#include "avdetector.h"
+
+DLNAProfile DLNA_PROFILE_MP3 = { "MP3" , "audio/mpeg" };
+DLNAProfile DLNA_PROFILE_MP3X = { "MP3X" , "audio/mpeg" };
+
+AcceptedBitrates DLNA_BITRATES_MPEG1_L1_DVB = { true, { Kbps(32), Kbps(448) }};
+AcceptedBitrates DLNA_BITRATES_MPEG1_L2_DVB = { true, { Kbps(32), Kbps(384) }};
+AcceptedBitrates DLNA_BITRATES_MPEG1_L3_VBR = { true, { Kbps(32), Kbps(320) }};
+AcceptedBitrates DLNA_BITRATES_MPEG1_L3_CBR = { false, { Kbps(32), Kbps(40),
+ Kbps(48), Kbps(56),
+ Kbps(64), Kbps(80),
+ Kbps(96), Kbps(112),
+ Kbps(128), Kbps(160),
+ Kbps(192), Kbps(224),
+ Kbps(256), Kbps(320)}};
+AcceptedBitrates DLNA_BITRATES_MPEG1_L3X_VBR = { true, { Kbps(8), Kbps(320) }};
+AcceptedBitrates DLNA_BITRATES_MPEG1_L3X_CBR = { false, { Kbps(8), Kbps(16), Kbps(24),
+ Kbps(32), Kbps(40),
+ Kbps(48), Kbps(56),
+ Kbps(64), Kbps(80),
+ Kbps(96), Kbps(112),
+ Kbps(128), Kbps(160),
+ Kbps(192), Kbps(224),
+ Kbps(256), Kbps(320)}};
+AcceptedBitrates DLNA_BITRATES_MPEG1_L2 = { true, { Kbps(32), Kbps(384) }};
+
+AcceptedSamplingRates DLNA_SAMPLINGRATES_MPEG1_L1_DVB = {{ KHz(16), KHz(22.05), KHz(24),
+ KHz(32), KHz(44.1), KHz(48) }};
+AcceptedSamplingRates DLNA_SAMPLINGRATES_MPEG1_L2 = {{ KHz(32), KHz(44.1), KHz(48) }};
+AcceptedSamplingRates DLNA_SAMPLINGRATES_MPEG1_L2_DVB = {{ KHz(16), KHz(22.05), KHz(24),
+ KHz(32), KHz(44.1), KHz(48) }};
+AcceptedSamplingRates DLNA_SAMPLINGRATES_MPEG1_L3 = {{ KHz(32), KHz(44.1), KHz(48) }};
+AcceptedSamplingRates DLNA_SAMPLINGRATES_MPEG1_L3X = {{ KHz(16), KHz(22.05), KHz(24),
+ KHz(32), KHz(44.1), KHz(48) }};
+
+AcceptedAudioChannels DLNA_AUDIOCHANNELS_MPEG1_L1_DVB = { 6, { CHANNEL_LAYOUT_10, CHANNEL_LAYOUT_20,
+ CHANNEL_LAYOUT_21, CHANNEL_LAYOUT_22,
+ CHANNEL_LAYOUT_30, CHANNEL_LAYOUT_31,
+ CHANNEL_LAYOUT_32, }, false };
+AcceptedAudioChannels DLNA_AUDIOCHANNELS_MPEG1_L2_DVB = { 6, { CHANNEL_LAYOUT_10, CHANNEL_LAYOUT_20,
+ CHANNEL_LAYOUT_21, CHANNEL_LAYOUT_22,
+ CHANNEL_LAYOUT_30, CHANNEL_LAYOUT_31,
+ CHANNEL_LAYOUT_32, }, false };
+
+AcceptedAudioChannels DLNA_AUDIOCHANNELS_MPEG1_L2 = { 2, { CHANNEL_LAYOUT_10, CHANNEL_LAYOUT_20 }, false };
+AcceptedAudioChannels DLNA_AUDIOCHANNELS_MPEG1_L3 = { 2, { CHANNEL_LAYOUT_10, CHANNEL_LAYOUT_20 }, false };
+AcceptedAudioChannels DLNA_AUDIOCHANNELS_MPEG1_L3X = { 2, { CHANNEL_LAYOUT_10, CHANNEL_LAYOUT_20 }, false };
+
+AudioPortionProfile cMPEGAudioProfiler::probeAudioProfile(AVFormatContext* FormatCtx){
+ AVCodecContext* AudioCodec = cCodecToolKit::getFirstCodecContext(FormatCtx, CODEC_TYPE_AUDIO);
+
+ if(AudioCodec->codec_id == CODEC_ID_MP1){
+ if(cCodecToolKit::matchesAcceptedBitrates(DLNA_BITRATES_MPEG1_L1_DVB, AudioCodec) &&
+ cCodecToolKit::matchesAcceptedSamplingRates(DLNA_SAMPLINGRATES_MPEG1_L1_DVB, AudioCodec) &&
+ cCodecToolKit::matchesAcceptedAudioChannels(DLNA_AUDIOCHANNELS_MPEG1_L1_DVB, AudioCodec)){
+ return DLNA_APP_MPEG1_L1;
+ }
+ else {
+ return DLNA_APP_UNKNOWN;
+ }
+ }
+ else if(AudioCodec->codec_id == CODEC_ID_MP2){
+ if(cCodecToolKit::matchesAcceptedBitrates(DLNA_BITRATES_MPEG1_L2, AudioCodec) &&
+ cCodecToolKit::matchesAcceptedSamplingRates(DLNA_SAMPLINGRATES_MPEG1_L2, AudioCodec) &&
+ cCodecToolKit::matchesAcceptedAudioChannels(DLNA_AUDIOCHANNELS_MPEG1_L2, AudioCodec)){
+ return DLNA_APP_MPEG1_L2;
+ }
+ else if(cCodecToolKit::matchesAcceptedBitrates(DLNA_BITRATES_MPEG1_L2_DVB, AudioCodec) &&
+ cCodecToolKit::matchesAcceptedSamplingRates(DLNA_SAMPLINGRATES_MPEG1_L2_DVB, AudioCodec) &&
+ cCodecToolKit::matchesAcceptedAudioChannels(DLNA_AUDIOCHANNELS_MPEG1_L2_DVB, AudioCodec)){
+ return DLNA_APP_MPEG1_L2;
+ }
+ else {
+ return DLNA_APP_UNKNOWN;
+ }
+ }
+ else if(AudioCodec->codec_id == CODEC_ID_MP3){
+ if((cCodecToolKit::matchesAcceptedBitrates(DLNA_BITRATES_MPEG1_L3_VBR, AudioCodec) ||
+ cCodecToolKit::matchesAcceptedBitrates(DLNA_BITRATES_MPEG1_L3_CBR, AudioCodec)) &&
+ cCodecToolKit::matchesAcceptedSamplingRates(DLNA_SAMPLINGRATES_MPEG1_L3, AudioCodec) &&
+ cCodecToolKit::matchesAcceptedAudioChannels(DLNA_AUDIOCHANNELS_MPEG1_L3, AudioCodec)){
+ return DLNA_APP_MPEG1_L3;
+ }
+ else if((cCodecToolKit::matchesAcceptedBitrates(DLNA_BITRATES_MPEG1_L3X_VBR, AudioCodec) ||
+ cCodecToolKit::matchesAcceptedBitrates(DLNA_BITRATES_MPEG1_L3X_CBR, AudioCodec)) &&
+ cCodecToolKit::matchesAcceptedSamplingRates(DLNA_SAMPLINGRATES_MPEG1_L3X, AudioCodec) &&
+ cCodecToolKit::matchesAcceptedAudioChannels(DLNA_AUDIOCHANNELS_MPEG1_L3X, AudioCodec)){
+ return DLNA_APP_MPEG1_L3X;
+ }
+ else {
+ return DLNA_APP_UNKNOWN;
+ }
+ }
+ else {
+ return DLNA_APP_UNKNOWN;
+ }
+}
+
+DLNAProfile* cMPEGAudioProfiler::probeDLNAProfile(AVFormatContext* FormatCtx){
+ AudioPortionProfile Profile = MPEGAudioProfiler.probeAudioProfile(FormatCtx);
+ if(Profile == DLNA_APP_MPEG1_L3){
+ return &DLNA_PROFILE_MP3;
+ }
+ else if(Profile == DLNA_APP_MPEG1_L3X){
+ return &DLNA_PROFILE_MP3X;
+ }
+ else {
+ return NULL;
+ }
+}
+
+cMPEGAudioProfiler MPEGAudioProfiler; \ No newline at end of file