void video_overlay_decode(video_decoder_t *vd, media_buf_t *mb) { media_codec_t *cw = mb->mb_cw; if(cw == NULL) { int offset = 0; char *str; if(mb->mb_codecid == CODEC_ID_MOV_TEXT) { if(mb->mb_size < 2) return; offset = 2; } str = malloc(mb->mb_size + 1 - offset); memcpy(str, mb->mb_data + offset, mb->mb_size - offset); str[mb->mb_size - offset] = 0; video_overlay_render_cleartext(vd, str, mb->mb_pts, mb->mb_duration ? mb->mb_pts + mb->mb_duration : AV_NOPTS_VALUE, 0); } else { video_subtitles_lavc(vd, mb, cw->codec_ctx); } }
void video_overlay_decode(media_pipe_t *mp, media_buf_t *mb) { media_codec_t *mc = mb->mb_cw; if(mc == NULL) { int offset = 0; char *str; if(mb->mb_codecid == AV_CODEC_ID_MOV_TEXT) { if(mb->mb_size < 2) return; offset = 2; } str = malloc(mb->mb_size + 1 - offset); memcpy(str, mb->mb_data + offset, mb->mb_size - offset); str[mb->mb_size - offset] = 0; video_overlay_t *vo; vo = video_overlay_render_cleartext(str, mb->mb_pts, mb->mb_duration ? mb->mb_pts + mb->mb_duration : PTS_UNSET, TEXT_PARSE_HTML_TAGS | TEXT_PARSE_HTML_ENTITIES | TEXT_PARSE_SLOPPY_TAGS, mb->mb_font_context); if(vo != NULL) video_overlay_enqueue(mp, vo); free(str); } else { if(mc->decode) mc->decode(mc, NULL, NULL, mb, 0); #if ENABLE_LIBAV else video_subtitles_lavc(mp, mb, mc->ctx); #endif } }