mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 23:35:03 +01:00
update libltc to v1.1.4-4-gb034a23 (endianess issue)
This commit is contained in:
parent
6982213198
commit
48579d42b0
4 changed files with 45 additions and 17 deletions
|
|
@ -32,7 +32,9 @@ static int addvalues(LTCEncoder *e, int n) {
|
||||||
const ltcsnd_sample_t tgtval = e->state ? e->enc_hi : e->enc_lo;
|
const ltcsnd_sample_t tgtval = e->state ? e->enc_hi : e->enc_lo;
|
||||||
|
|
||||||
if (e->offset + n >= e->bufsize) {
|
if (e->offset + n >= e->bufsize) {
|
||||||
|
#if 0
|
||||||
fprintf(stderr, "libltc: buffer overflow: %d/%lu\n", (int) e->offset, (unsigned long) e->bufsize);
|
fprintf(stderr, "libltc: buffer overflow: %d/%lu\n", (int) e->offset, (unsigned long) e->bufsize);
|
||||||
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,24 +65,31 @@ void ltc_decoder_write(LTCDecoder *d, ltcsnd_sample_t *buf, size_t size, ltc_off
|
||||||
decode_ltc(d, buf, size, posinfo);
|
decode_ltc(d, buf, size, posinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define LTC_CONVERSION_BUF_SIZE 1024
|
||||||
|
|
||||||
#define LTCWRITE_TEMPLATE(FN, FORMAT, CONV) \
|
#define LTCWRITE_TEMPLATE(FN, FORMAT, CONV) \
|
||||||
void ltc_decoder_write_ ## FN (LTCDecoder *d, FORMAT *buf, size_t size, ltc_off_t posinfo) { \
|
void ltc_decoder_write_ ## FN (LTCDecoder *d, FORMAT *buf, size_t size, ltc_off_t posinfo) { \
|
||||||
ltcsnd_sample_t tmp[1024]; \
|
ltcsnd_sample_t tmp[LTC_CONVERSION_BUF_SIZE]; \
|
||||||
size_t remain = size; \
|
size_t copyStart = 0; \
|
||||||
while (remain > 0) { \
|
while (copyStart < size) { \
|
||||||
int c = (remain > 1024) ? 1024 : remain; \
|
|
||||||
int i; \
|
int i; \
|
||||||
for (i=0; i<c; i++) { \
|
int c = size - copyStart; \
|
||||||
|
c = (c > LTC_CONVERSION_BUF_SIZE) ? LTC_CONVERSION_BUF_SIZE : c; \
|
||||||
|
for (i=0; i < c; i++) { \
|
||||||
tmp[i] = CONV; \
|
tmp[i] = CONV; \
|
||||||
} \
|
} \
|
||||||
decode_ltc(d, tmp, c, posinfo + (ltc_off_t)c); \
|
decode_ltc(d, tmp, c, posinfo + (ltc_off_t)copyStart); \
|
||||||
remain -= c; \
|
copyStart += c; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
LTCWRITE_TEMPLATE(float, float, 128 + (buf[i] * 127.0))
|
LTCWRITE_TEMPLATE(float, float, 128 + (buf[copyStart+i] * 127.0))
|
||||||
LTCWRITE_TEMPLATE(s16, short, 128 + (buf[i] >> 8))
|
/* this relies on the compiler to use an arithemtic right-shift for signed values */
|
||||||
LTCWRITE_TEMPLATE(u16, short, (buf[i] >> 8))
|
LTCWRITE_TEMPLATE(s16, short, 128 + (buf[copyStart+i] >> 8))
|
||||||
|
/* this relies on the compiler to use a logical right-shift for unsigned values */
|
||||||
|
LTCWRITE_TEMPLATE(u16, unsigned short, (buf[copyStart+i] >> 8))
|
||||||
|
|
||||||
|
#undef LTC_CONVERSION_BUF_SIZE
|
||||||
|
|
||||||
int ltc_decoder_read(LTCDecoder* d, LTCFrameExt* frame) {
|
int ltc_decoder_read(LTCDecoder* d, LTCFrameExt* frame) {
|
||||||
if (!frame) return -1;
|
if (!frame) return -1;
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
@author Robin Gareus <robin@gareus.org>
|
@author Robin Gareus <robin@gareus.org>
|
||||||
@copyright
|
@copyright
|
||||||
|
|
||||||
Copyright (C) 2006-2012 Robin Gareus <robin@gareus.org>
|
Copyright (C) 2006-2014 Robin Gareus <robin@gareus.org>
|
||||||
|
|
||||||
Copyright (C) 2008-2009 Jan Weiß <jan@geheimwerk.de>
|
Copyright (C) 2008-2009 Jan Weiß <jan@geheimwerk.de>
|
||||||
|
|
||||||
|
|
@ -40,20 +40,39 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined _WIN32 && !defined(__LITTLE_ENDIAN__)
|
||||||
|
#define __LITTLE_ENDIAN__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __BIG_ENDIAN__
|
||||||
|
# define LTC_BIG_ENDIAN
|
||||||
|
#elif defined _BIG_ENDIAN
|
||||||
|
# define LTC_BIG_ENDIAN
|
||||||
|
#elif defined __BYTE_ORDER__
|
||||||
|
# if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
||||||
|
# define LTC_BIG_ENDIAN
|
||||||
|
# endif
|
||||||
|
#elif !defined __LITTLE_ENDIAN__
|
||||||
|
# include <endian.h> // machine/endian.h
|
||||||
|
# if (defined __BYTE_ORDER__ && defined __ORDER_BIG_ENDIAN__ && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
||||||
|
# define LTC_BIG_ENDIAN
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stddef.h> /* size_t */
|
#include <stddef.h> /* size_t */
|
||||||
|
|
||||||
#ifndef DOXYGEN_IGNORE
|
#ifndef DOXYGEN_IGNORE
|
||||||
/* libltc version */
|
/* libltc version */
|
||||||
#define LIBLTC_VERSION "1.1.1"
|
#define LIBLTC_VERSION "1.1.4"
|
||||||
#define LIBLTC_VERSION_MAJOR 1
|
#define LIBLTC_VERSION_MAJOR 1
|
||||||
#define LIBLTC_VERSION_MINOR 1
|
#define LIBLTC_VERSION_MINOR 1
|
||||||
#define LIBLTC_VERSION_MICRO 1
|
#define LIBLTC_VERSION_MICRO 4
|
||||||
|
|
||||||
/* interface revision number
|
/* interface revision number
|
||||||
* http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
* http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
||||||
*/
|
*/
|
||||||
#define LIBLTC_CUR 11
|
#define LIBLTC_CUR 11
|
||||||
#define LIBLTC_REV 1
|
#define LIBLTC_REV 3
|
||||||
#define LIBLTC_AGE 0
|
#define LIBLTC_AGE 0
|
||||||
#endif /* end DOXYGEN_IGNORE */
|
#endif /* end DOXYGEN_IGNORE */
|
||||||
|
|
||||||
|
|
@ -159,7 +178,7 @@ typedef long long int ltc_off_t;
|
||||||
* further information: http://www.philrees.co.uk/articles/timecode.htm
|
* further information: http://www.philrees.co.uk/articles/timecode.htm
|
||||||
* and http://www.barney-wol.net/time/timecode.html
|
* and http://www.barney-wol.net/time/timecode.html
|
||||||
*/
|
*/
|
||||||
#if (defined __BIG_ENDIAN__ && !defined DOXYGEN_IGNORE)
|
#if (defined LTC_BIG_ENDIAN && !defined DOXYGEN_IGNORE)
|
||||||
// Big Endian version, bytes are "upside down"
|
// Big Endian version, bytes are "upside down"
|
||||||
struct LTCFrame {
|
struct LTCFrame {
|
||||||
unsigned int user1:4;
|
unsigned int user1:4;
|
||||||
|
|
@ -449,7 +468,7 @@ void ltc_decoder_write_s16(LTCDecoder *d, short *buf, size_t size, ltc_off_t pos
|
||||||
* @param size number of samples to parse
|
* @param size number of samples to parse
|
||||||
* @param posinfo (optional, recommended) sample-offset in the audio-stream.
|
* @param posinfo (optional, recommended) sample-offset in the audio-stream.
|
||||||
*/
|
*/
|
||||||
void ltc_decoder_write_u16(LTCDecoder *d, short *buf, size_t size, ltc_off_t posinfo);
|
void ltc_decoder_write_u16(LTCDecoder *d, unsigned short *buf, size_t size, ltc_off_t posinfo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decoded LTC frames are placed in a queue. This function retrieves
|
* Decoded LTC frames are placed in a queue. This function retrieves
|
||||||
|
|
|
||||||
|
|
@ -216,7 +216,7 @@ void ltc_time_to_frame(LTCFrame* frame, SMPTETimecode* stime, enum LTC_TV_STANDA
|
||||||
void ltc_frame_reset(LTCFrame* frame) {
|
void ltc_frame_reset(LTCFrame* frame) {
|
||||||
memset(frame, 0, sizeof(LTCFrame));
|
memset(frame, 0, sizeof(LTCFrame));
|
||||||
// syncword = 0x3FFD
|
// syncword = 0x3FFD
|
||||||
#ifdef __BIG_ENDIAN__
|
#ifdef LTC_BIG_ENDIAN
|
||||||
// mirrored BE bit order: FCBF
|
// mirrored BE bit order: FCBF
|
||||||
frame->sync_word = 0xFCBF;
|
frame->sync_word = 0xFCBF;
|
||||||
#else
|
#else
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue