mirror of
https://github.com/rofafor/vdr-plugin-femon.git
synced 2023-10-10 13:36:53 +02:00
Added preliminary support for LATM.
This commit is contained in:
parent
3235c67256
commit
f37f428670
3
HISTORY
3
HISTORY
@ -396,8 +396,9 @@ VDR Plugin 'femon' Revision History
|
||||
- Added a setup option to downscale the OSD size.
|
||||
- Updated Estonian translation (Thanks to Arthur Konovalov).
|
||||
|
||||
2010-xx-xx: Version 1.7.8
|
||||
2010-06-23: Version 1.7.8
|
||||
|
||||
- Fixed device switching.
|
||||
- Added preliminary support for LATM.
|
||||
- Updated Italian translation (Thanks to Diego Pierotto).
|
||||
- Fixed a crash in femon service (Thanks to Wolfgang Astleitner).
|
||||
|
4
Makefile
4
Makefile
@ -63,7 +63,7 @@ all-redirect: all
|
||||
|
||||
### The object files (add further files here):
|
||||
|
||||
OBJS = femon.o femonosd.o femonreceiver.o femoncfg.o femontools.o femonmpeg.o femonac3.o femonaac.o femonh264.o femonsymbol.o
|
||||
OBJS = femon.o femonosd.o femonreceiver.o femoncfg.o femontools.o femonmpeg.o femonac3.o femonaac.o femonlatm.o femonh264.o femonsymbol.o
|
||||
|
||||
### The main target:
|
||||
|
||||
@ -95,7 +95,7 @@ I18Npot = $(PODIR)/$(PLUGIN).pot
|
||||
msgfmt -c -o $@ $<
|
||||
|
||||
$(I18Npot): $(wildcard *.c)
|
||||
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='Rolf Ahrenberg' -o $@ $^
|
||||
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='<see README>' -o $@ $^
|
||||
|
||||
%.po: $(I18Npot)
|
||||
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
|
||||
|
@ -17,7 +17,8 @@ enum eAudioCodec {
|
||||
AUDIO_CODEC_MPEG2_I,
|
||||
AUDIO_CODEC_MPEG2_II,
|
||||
AUDIO_CODEC_MPEG2_III,
|
||||
AUDIO_CODEC_HEAAC
|
||||
AUDIO_CODEC_HEAAC,
|
||||
AUDIO_CODEC_LATM
|
||||
};
|
||||
|
||||
enum eAudioChannelMode {
|
||||
|
112
femonlatm.c
Normal file
112
femonlatm.c
Normal file
@ -0,0 +1,112 @@
|
||||
/*
|
||||
* Frontend Status Monitor plugin for the Video Disk Recorder
|
||||
*
|
||||
* See the README file for copyright information and how to reach the author.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "femontools.h"
|
||||
#include "femonlatm.h"
|
||||
|
||||
unsigned int cFemonLATM::s_Bitrates[3][16] =
|
||||
{
|
||||
{0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, -1}, // MPEG-2 Layer I
|
||||
{0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1}, // MPEG-2 Layer II/III
|
||||
{0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1} // MPEG-2 Layer II/III
|
||||
};
|
||||
|
||||
unsigned int cFemonLATM::s_Samplerates[4] =
|
||||
{
|
||||
22050, 24000, 16000, -1
|
||||
};
|
||||
|
||||
cFemonLATM::cFemonLATM(cFemonAudioIf *audiohandler)
|
||||
: m_AudioHandler(audiohandler)
|
||||
{
|
||||
}
|
||||
|
||||
cFemonLATM::~cFemonLATM()
|
||||
{
|
||||
}
|
||||
|
||||
bool cFemonLATM::processAudio(const uint8_t *buf, int len)
|
||||
{
|
||||
cBitStream bs(buf, len * 8);
|
||||
|
||||
if (!m_AudioHandler)
|
||||
return false;
|
||||
|
||||
// skip PES header
|
||||
if (!PesLongEnough(len))
|
||||
return false;
|
||||
bs.skipBits(8 * PesPayloadOffset(buf));
|
||||
|
||||
// MPEG audio detection
|
||||
if (bs.getBits(12) != 0x56E) // syncword
|
||||
return false;
|
||||
|
||||
if (bs.getBit() == 1) // id: MPEG-1=1, extension to lower sampling frequences=0
|
||||
return false;
|
||||
int layer = 3 - bs.getBits(2); // layer: I=11, II=10, III=01
|
||||
bs.skipBit(); // protection bit
|
||||
int bit_rate_index = bs.getBits(4); // bitrate index
|
||||
int sampling_frequency = bs.getBits(2); // sampling frequency
|
||||
bs.skipBit(); // padding bit
|
||||
bs.skipBit(); // private pid
|
||||
int mode = bs.getBits(2); // mode
|
||||
|
||||
m_AudioHandler->SetAudioCodec(AUDIO_CODEC_LATM);
|
||||
|
||||
switch (mode) {
|
||||
case 0:
|
||||
m_AudioHandler->SetAudioChannel(AUDIO_CHANNEL_MODE_STEREO);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
m_AudioHandler->SetAudioChannel(AUDIO_CHANNEL_MODE_JOINT_STEREO);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
m_AudioHandler->SetAudioChannel(AUDIO_CHANNEL_MODE_DUAL);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
m_AudioHandler->SetAudioChannel(AUDIO_CHANNEL_MODE_SINGLE);
|
||||
break;
|
||||
|
||||
default:
|
||||
m_AudioHandler->SetAudioChannel(AUDIO_CHANNEL_MODE_INVALID);
|
||||
break;
|
||||
}
|
||||
|
||||
if (layer == 3) {
|
||||
m_AudioHandler->SetAudioBitrate(AUDIO_BITRATE_FREE);
|
||||
}
|
||||
else {
|
||||
switch (bit_rate_index) {
|
||||
case 0:
|
||||
m_AudioHandler->SetAudioBitrate(AUDIO_BITRATE_FREE);
|
||||
break;
|
||||
|
||||
case 0xF:
|
||||
m_AudioHandler->SetAudioBitrate(AUDIO_BITRATE_RESERVED);
|
||||
break;
|
||||
|
||||
default:
|
||||
m_AudioHandler->SetAudioBitrate(1000 * s_Bitrates[layer][bit_rate_index]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (sampling_frequency) {
|
||||
case 3:
|
||||
m_AudioHandler->SetAudioSamplingFrequency(AUDIO_SAMPLING_FREQUENCY_RESERVED);
|
||||
break;
|
||||
|
||||
default:
|
||||
m_AudioHandler->SetAudioSamplingFrequency(s_Samplerates[sampling_frequency]);
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
27
femonlatm.h
Normal file
27
femonlatm.h
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Frontend Status Monitor plugin for the Video Disk Recorder
|
||||
*
|
||||
* See the README file for copyright information and how to reach the author.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __FEMONLATM_H
|
||||
#define __FEMONLATM_H
|
||||
|
||||
#include "femonaudio.h"
|
||||
|
||||
class cFemonLATM {
|
||||
private:
|
||||
cFemonAudioIf *m_AudioHandler;
|
||||
|
||||
static unsigned int s_Bitrates[3][16];
|
||||
static unsigned int s_Samplerates[4];
|
||||
|
||||
public:
|
||||
cFemonLATM(cFemonAudioIf *audiohandler);
|
||||
virtual ~cFemonLATM();
|
||||
|
||||
bool processAudio(const uint8_t *buf, int len);
|
||||
};
|
||||
|
||||
#endif //__FEMONLATM_H
|
@ -18,6 +18,7 @@ cFemonReceiver::cFemonReceiver(int Vtype, int Vpid, int Apid, int Dpid)
|
||||
m_DetectH264(this),
|
||||
m_DetectMPEG(this, this),
|
||||
m_DetectAAC(this),
|
||||
m_DetectLATM(this),
|
||||
m_DetectAC3(this),
|
||||
m_VideoBuffer(KILOBYTE(512), TS_SIZE, false, "Femon video"),
|
||||
m_VideoType(Vtype),
|
||||
@ -144,7 +145,7 @@ void cFemonReceiver::Action(void)
|
||||
while (Data = m_VideoBuffer.Get(Length)) {
|
||||
if (!m_Active || (Length < TS_SIZE))
|
||||
break;
|
||||
Length = TS_SIZE;
|
||||
Length = TS_SIZE;
|
||||
if (*Data != TS_SYNC_BYTE) {
|
||||
for (int i = 1; i < Length; ++i) {
|
||||
if (Data[i] == TS_SYNC_BYTE) {
|
||||
@ -181,7 +182,7 @@ void cFemonReceiver::Action(void)
|
||||
while (Data = m_AudioBuffer.Get(Length)) {
|
||||
if (!m_Active || (Length < TS_SIZE))
|
||||
break;
|
||||
Length = TS_SIZE;
|
||||
Length = TS_SIZE;
|
||||
if (*Data != TS_SYNC_BYTE) {
|
||||
for (int i = 1; i < Length; ++i) {
|
||||
if (Data[i] == TS_SYNC_BYTE) {
|
||||
@ -194,7 +195,7 @@ void cFemonReceiver::Action(void)
|
||||
}
|
||||
processed = true;
|
||||
if (const uint8_t *p = m_AudioAssembler.GetPes(len)) {
|
||||
if (m_DetectAAC.processAudio(p, len) || m_DetectMPEG.processAudio(p, len))
|
||||
if (m_DetectAAC.processAudio(p, len) || m_DetectLATM.processAudio(p, len) || m_DetectMPEG.processAudio(p, len))
|
||||
m_AudioValid = true;
|
||||
m_AudioAssembler.Reset();
|
||||
}
|
||||
@ -206,7 +207,7 @@ void cFemonReceiver::Action(void)
|
||||
while (Data = m_AC3Buffer.Get(Length)) {
|
||||
if (!m_Active || (Length < TS_SIZE))
|
||||
break;
|
||||
Length = TS_SIZE;
|
||||
Length = TS_SIZE;
|
||||
if (*Data != TS_SYNC_BYTE) {
|
||||
for (int i = 1; i < Length; ++i) {
|
||||
if (Data[i] == TS_SYNC_BYTE) {
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "femonh264.h"
|
||||
#include "femonmpeg.h"
|
||||
#include "femonaac.h"
|
||||
#include "femonlatm.h"
|
||||
#include "femonac3.h"
|
||||
#include "femonaudio.h"
|
||||
#include "femonvideo.h"
|
||||
@ -28,6 +29,7 @@ private:
|
||||
cFemonH264 m_DetectH264;
|
||||
cFemonMPEG m_DetectMPEG;
|
||||
cFemonAAC m_DetectAAC;
|
||||
cFemonLATM m_DetectLATM;
|
||||
cFemonAC3 m_DetectAC3;
|
||||
|
||||
cRingBufferLinear m_VideoBuffer;
|
||||
|
@ -294,6 +294,7 @@ cString getAudioCodec(int value)
|
||||
case AUDIO_CODEC_MPEG2_II: return cString::sprintf("%s", tr("MPEG-2 Layer II"));
|
||||
case AUDIO_CODEC_MPEG2_III: return cString::sprintf("%s", tr("MPEG-2 Layer III"));
|
||||
case AUDIO_CODEC_HEAAC: return cString::sprintf("%s", tr("HE-AAC"));
|
||||
case AUDIO_CODEC_LATM: return cString::sprintf("%s", tr("LATM"));
|
||||
default: break;
|
||||
}
|
||||
return cString::sprintf("---");
|
||||
|
@ -7,9 +7,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: femon 1.7.7\n"
|
||||
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
|
||||
"POT-Creation-Date: 2010-02-25 20:31+0200\n"
|
||||
"Project-Id-Version: femon 1.7.8\n"
|
||||
"Report-Msgid-Bugs-To: <see README>\n"
|
||||
"POT-Creation-Date: 2010-06-23 12:14+0300\n"
|
||||
"PO-Revision-Date: 2007-08-12 23:22+0300\n"
|
||||
"Last-Translator: Christian Wieninger\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@ -266,6 +266,9 @@ msgstr ""
|
||||
msgid "HE-AAC"
|
||||
msgstr ""
|
||||
|
||||
msgid "LATM"
|
||||
msgstr ""
|
||||
|
||||
msgid "stereo"
|
||||
msgstr ""
|
||||
|
||||
|
@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: femon 1.7.7\n"
|
||||
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
|
||||
"POT-Creation-Date: 2010-02-25 20:31+0200\n"
|
||||
"Project-Id-Version: femon 1.7.8\n"
|
||||
"Report-Msgid-Bugs-To: <see README>\n"
|
||||
"POT-Creation-Date: 2010-06-23 12:14+0300\n"
|
||||
"PO-Revision-Date: 2007-08-12 23:22+0300\n"
|
||||
"Last-Translator: Luis Palacios\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@ -264,6 +264,9 @@ msgstr ""
|
||||
msgid "HE-AAC"
|
||||
msgstr ""
|
||||
|
||||
msgid "LATM"
|
||||
msgstr ""
|
||||
|
||||
msgid "stereo"
|
||||
msgstr ""
|
||||
|
||||
|
@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: femon 1.7.7\n"
|
||||
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
|
||||
"POT-Creation-Date: 2010-02-25 20:31+0200\n"
|
||||
"Project-Id-Version: femon 1.7.8\n"
|
||||
"Report-Msgid-Bugs-To: <see README>\n"
|
||||
"POT-Creation-Date: 2010-06-23 12:14+0300\n"
|
||||
"PO-Revision-Date: 2007-08-12 23:22+0300\n"
|
||||
"Last-Translator: Arthur Konovalov\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@ -264,6 +264,9 @@ msgstr "MPEG-2 Layer III"
|
||||
msgid "HE-AAC"
|
||||
msgstr "HE-AAC"
|
||||
|
||||
msgid "LATM"
|
||||
msgstr "LATM"
|
||||
|
||||
msgid "stereo"
|
||||
msgstr "stereo"
|
||||
|
||||
|
@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: femon 1.7.7\n"
|
||||
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
|
||||
"POT-Creation-Date: 2010-02-25 20:31+0200\n"
|
||||
"Project-Id-Version: femon 1.7.8\n"
|
||||
"Report-Msgid-Bugs-To: <see README>\n"
|
||||
"POT-Creation-Date: 2010-06-23 12:14+0300\n"
|
||||
"PO-Revision-Date: 2007-08-12 23:22+0300\n"
|
||||
"Last-Translator: Rolf Ahrenberg\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@ -264,6 +264,9 @@ msgstr "MPEG-2 kerros III"
|
||||
msgid "HE-AAC"
|
||||
msgstr "HE-AAC"
|
||||
|
||||
msgid "LATM"
|
||||
msgstr "LATM"
|
||||
|
||||
msgid "stereo"
|
||||
msgstr "stereo"
|
||||
|
||||
|
@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: femon 1.7.7\n"
|
||||
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
|
||||
"POT-Creation-Date: 2010-02-25 20:31+0200\n"
|
||||
"Project-Id-Version: femon 1.7.8\n"
|
||||
"Report-Msgid-Bugs-To: <see README>\n"
|
||||
"POT-Creation-Date: 2010-06-23 12:14+0300\n"
|
||||
"PO-Revision-Date: 2008-01-26 09:59+0100\n"
|
||||
"Last-Translator: NIVAL Michaël <mnival@club-internet.fr>\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@ -264,6 +264,9 @@ msgstr ""
|
||||
msgid "HE-AAC"
|
||||
msgstr ""
|
||||
|
||||
msgid "LATM"
|
||||
msgstr ""
|
||||
|
||||
msgid "stereo"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/it_IT.po
10
po/it_IT.po
@ -6,9 +6,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: femon 1.7.7\n"
|
||||
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
|
||||
"POT-Creation-Date: 2010-02-25 20:31+0200\n"
|
||||
"Project-Id-Version: femon 1.7.8\n"
|
||||
"Report-Msgid-Bugs-To: <see README>\n"
|
||||
"POT-Creation-Date: 2010-06-23 12:14+0300\n"
|
||||
"PO-Revision-Date: 2010-03-29 00:24+0100\n"
|
||||
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@ -268,6 +268,9 @@ msgstr "MPEG-2 Layer III"
|
||||
msgid "HE-AAC"
|
||||
msgstr "HE-AAC"
|
||||
|
||||
msgid "LATM"
|
||||
msgstr "LATM"
|
||||
|
||||
msgid "stereo"
|
||||
msgstr "stereo"
|
||||
|
||||
@ -381,4 +384,3 @@ msgstr "Mbit/s"
|
||||
|
||||
msgid "kbit/s"
|
||||
msgstr "kbit/s"
|
||||
|
||||
|
@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: femon 1.7.7\n"
|
||||
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
|
||||
"POT-Creation-Date: 2010-02-25 20:31+0200\n"
|
||||
"Project-Id-Version: femon 1.7.8\n"
|
||||
"Report-Msgid-Bugs-To: <see README>\n"
|
||||
"POT-Creation-Date: 2010-06-23 12:14+0300\n"
|
||||
"PO-Revision-Date: 2007-08-12 23:22+0300\n"
|
||||
"Last-Translator: Valdemaras Pipiras\n"
|
||||
"Language-Team: <varas@ambernet.lt>\n"
|
||||
@ -264,6 +264,9 @@ msgstr "MPEG-2 Layer III"
|
||||
msgid "HE-AAC"
|
||||
msgstr "HE-AAC"
|
||||
|
||||
msgid "LATM"
|
||||
msgstr "LATM"
|
||||
|
||||
msgid "stereo"
|
||||
msgstr "stereo"
|
||||
|
||||
|
@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: femon 1.7.7\n"
|
||||
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
|
||||
"POT-Creation-Date: 2010-02-25 20:31+0200\n"
|
||||
"Project-Id-Version: femon 1.7.8\n"
|
||||
"Report-Msgid-Bugs-To: <see README>\n"
|
||||
"POT-Creation-Date: 2010-06-23 12:14+0300\n"
|
||||
"PO-Revision-Date: 2007-08-12 23:22+0300\n"
|
||||
"Last-Translator: Vyacheslav Dikonov\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@ -264,6 +264,9 @@ msgstr ""
|
||||
msgid "HE-AAC"
|
||||
msgstr ""
|
||||
|
||||
msgid "LATM"
|
||||
msgstr ""
|
||||
|
||||
msgid "stereo"
|
||||
msgstr ""
|
||||
|
||||
|
@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: femon 1.7.7\n"
|
||||
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
|
||||
"POT-Creation-Date: 2010-02-25 20:31+0200\n"
|
||||
"Project-Id-Version: femon 1.7.8\n"
|
||||
"Report-Msgid-Bugs-To: <see README>\n"
|
||||
"POT-Creation-Date: 2010-06-23 12:14+0300\n"
|
||||
"PO-Revision-Date: 2009-09-21 21:36+0800\n"
|
||||
"Last-Translator: NanFeng <nfgx@21cn.com>\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@ -264,6 +264,9 @@ msgstr "MPEG-2 Layer III"
|
||||
msgid "HE-AAC"
|
||||
msgstr "HE-AAC"
|
||||
|
||||
msgid "LATM"
|
||||
msgstr "LATM"
|
||||
|
||||
msgid "stereo"
|
||||
msgstr "立体声"
|
||||
|
||||
|
@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: femon 1.7.7\n"
|
||||
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
|
||||
"POT-Creation-Date: 2010-02-25 20:31+0200\n"
|
||||
"Project-Id-Version: femon 1.7.8\n"
|
||||
"Report-Msgid-Bugs-To: <see README>\n"
|
||||
"POT-Creation-Date: 2010-06-23 12:14+0300\n"
|
||||
"PO-Revision-Date: 2009-09-21 21:36+0800\n"
|
||||
"Last-Translator: NanFeng <nfgx@21cn.com>\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@ -264,6 +264,9 @@ msgstr "MPEG-2 Layer III"
|
||||
msgid "HE-AAC"
|
||||
msgstr "HE-AAC"
|
||||
|
||||
msgid "LATM"
|
||||
msgstr "LATM"
|
||||
|
||||
msgid "stereo"
|
||||
msgstr "立體聲"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user