Browse Source

sout: sdi: refactor v210 conversion

pull/91/head
Francois Cartegnie 7 years ago
parent
commit
9d9d1d0afd
  1. 15
      modules/stream_out/sdi/Ancillary.cpp
  2. 12
      modules/stream_out/sdi/V210.cpp
  3. 2
      modules/stream_out/sdi/V210.hpp

15
modules/stream_out/sdi/Ancillary.cpp

@ -23,6 +23,7 @@
#endif
#include "Ancillary.hpp"
#include "V210.hpp"
#include <cassert>
using namespace sdi;
@ -92,12 +93,7 @@ void AFD::FillBuffer(uint8_t *p_buf, size_t i_buf)
afd[i] = 0x040;
/* convert to v210 and write into VANC */
for (size_t w = 0; w < s / 6 ; w++) {
put_le32(&p_buf, afd[w*6+0] << 10);
put_le32(&p_buf, afd[w*6+1] | (afd[w*6+2] << 20));
put_le32(&p_buf, afd[w*6+3] << 10);
put_le32(&p_buf, afd[w*6+4] | (afd[w*6+5] << 20));
}
V210::Convert(afd, s, p_buf);
}
Captions::Captions(const uint8_t *p, size_t s,
@ -213,12 +209,7 @@ void Captions::FillBuffer(uint8_t *p_buf, size_t i_buf)
cdp[i] = 0x040;
/* convert to v210 and write into VBI line 15 of VANC */
for (size_t w = 0; w < s / 6 ; w++) {
put_le32(&p_buf, cdp[w*6+0] << 10);
put_le32(&p_buf, cdp[w*6+1] | (cdp[w*6+2] << 20));
put_le32(&p_buf, cdp[w*6+3] << 10);
put_le32(&p_buf, cdp[w*6+4] | (cdp[w*6+5] << 20));
}
V210::Convert(cdp, s, p_buf);
delete[] cdp;
}

12
modules/stream_out/sdi/V210.cpp

@ -94,3 +94,15 @@ void V210::Convert(const picture_t *pic, unsigned dst_stride, void *frame_bytes)
v += pic->p[2].i_pitch / 2 - width / 2;
}
}
void V210::Convert(const uint16_t *src, size_t srccount, void *out)
{
uint8_t *dst = reinterpret_cast<uint8_t *>(out);
for (size_t i = 0; i < srccount / 6; i++)
{
put_le32(&dst, src[i*6+0] << 10);
put_le32(&dst, src[i*6+1] | (src[i*6+2] << 20));
put_le32(&dst, src[i*6+3] << 10);
put_le32(&dst, src[i*6+4] | (src[i*6+5] << 20));
}
}

2
modules/stream_out/sdi/V210.hpp

@ -29,7 +29,9 @@ namespace sdi
class V210
{
public:
static const int ALIGNMENT_U16 = 6;
static void Convert(const picture_t *, unsigned, void *);
static void Convert(const uint16_t *, size_t, void *);
};
}

Loading…
Cancel
Save