On Sun, Jan 28, 2018 at 9:40 PM Ray Tiley <rayti...@gmail.com> wrote:
> This changes how NTSC VANC is extracted from the buffer. In NTSC the vanc > data interleved between the uyvy and not just the luma as in > high definition resolutions. > > In my testing this allows a decklink card encoding valid NTSC closed > captions to pass the caption data to the x264 encoder. > > Updated with rewviews from Devon Heitmueller and Marton Balint. > > Signed-off-by: Ray Tiley <rayti...@gmail.com> > --- > libavdevice/decklink_dec.cpp | 30 +++++++++++++++++++++++++++++- > 1 file changed, 29 insertions(+), 1 deletion(-) > > diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp > index 94dae26..c7811eb 100644 > --- a/libavdevice/decklink_dec.cpp > +++ b/libavdevice/decklink_dec.cpp > @@ -149,6 +149,30 @@ static void extract_luma_from_v210(uint16_t *dst, > const uint8_t *src, int width) > } > } > > +static void unpack_v210(uint16_t *dst, const uint8_t *src, int width) > +{ > + int i; > + for (i = 0; i < width / 6; i++) { > + *dst++ = src[0] + ((src[1] & 3) << 8); > + *dst++ = (src[1] >> 2) + ((src[2] & 15) << 6); > + *dst++ = (src[2] >> 4) + ((src[3] & 63) << 4); > + > + *dst++ = src[4] + ((src[5] & 3) << 8); > + *dst++ = (src[5] >> 2) + ((src[6] & 15) << 6); > + *dst++ = (src[6] >> 4) + ((src[7] & 63) << 4); > + > + *dst++ = src[8] + ((src[9] & 3) << 8); > + *dst++ = (src[9] >> 2) + ((src[10] & 15) << 6); > + *dst++ = (src[10] >> 4) + ((src[11] & 63) << 4); > + > + *dst++ = src[12] + ((src[13] & 3) << 8); > + *dst++ = (src[13] >> 2) + ((src[14] & 15) << 6); > + *dst++ = (src[14] >> 4) + ((src[15] & 63) << 4); > + > + src += 16; > + } > +} > + > static uint8_t calc_parity_and_line_offset(int line) > { > uint8_t ret = (line < 313) << 5; > @@ -741,7 +765,11 @@ HRESULT > decklink_input_callback::VideoInputFrameArrived( > uint8_t *buf; > if (vanc->GetBufferForVerticalBlankingLine(i, > (void**)&buf) == S_OK) { > uint16_t luma_vanc[MAX_WIDTH_VANC]; > - extract_luma_from_v210(luma_vanc, buf, > videoFrame->GetWidth()); > + if (ctx->bmd_mode == bmdModeNTSC) { > + unpack_v210(luma_vanc, buf, > videoFrame->GetWidth()); > + } else { > + extract_luma_from_v210(luma_vanc, buf, > videoFrame->GetWidth()); > + } > txt_buf = get_metadata(avctx, luma_vanc, > videoFrame->GetWidth(), > txt_buf, > sizeof(txt_buf0) - (txt_buf - txt_buf0), &pkt); > } > -- > 2.7.4 > > Anything else I need to do for this patch? Thanks -ray _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel