예제 #1
0
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);
  }
}
예제 #2
0
static void
es_insert_text(ext_subtitles_t *es, const char *text,
	       int64_t start, int64_t stop, int tags)
{
  video_overlay_t *vo;
  vo = video_overlay_render_cleartext(text, start, stop, tags, 0);
  if(vo != NULL)
    TAILQ_INSERT_TAIL(&es->es_entries, vo, vo_link);
}
예제 #3
0
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
  }
}