Exemplo n.º 1
0
static void
emit_frame(video_decoder_t *vd, vdec_pic_t *vp)
{
  vd->vd_estimated_duration = vp->fi.fi_duration; // For bitrate calculations

  if(vp->fi.fi_pts == AV_NOPTS_VALUE && vd->vd_nextpts != AV_NOPTS_VALUE)
    vp->fi.fi_pts = vd->vd_nextpts;

  if(vp->fi.fi_pts != AV_NOPTS_VALUE)
    vd->vd_nextpts = vp->fi.fi_pts + vp->fi.fi_duration;

#if VDEC_DETAILED_DEBUG
  static int64_t lastpts;
  TRACE(TRACE_DEBUG, "VDEC DPY", 
        "Displaying 0x%llx (%lld) d:%lld dur=%d %d x %d", vp->order,
	vp->fi.fi_pts, vp->fi.fi_pts - lastpts, vp->fi.fi_duration,
        vp->fi.fi_width, vp->fi.fi_height);
  lastpts = vp->fi.fi_pts;
#endif

  vp->fi.fi_type = 'RSX';

  if(video_deliver_frame(vd, &vp->fi) == -1)
    // Frame not accepted, free it
    rsx_free(vp->vp_offset[0], vp->vp_size);

#if VDEC_DETAILED_DEBUG
  TRACE(TRACE_DEBUG, "VDEC DPY", "Frame delivered");
#endif
}
Exemplo n.º 2
0
/**
 * yuv420 only
 */
static void
release_picture(vdec_pic_t *vp)
{
  rsx_free(vp->vp_offset, vp->vp_size);
  LIST_REMOVE(vp, link);
  free(vp);
}
Exemplo n.º 3
0
/**
 * gv_surface_mutex must be held
 */
static void
surface_reset(glw_video_t *gv, glw_video_surface_t *gvs)
{
  glw_root_t *gr = gv->w.glw_root;
  int i;

  for(i = 0; i < 3; i++) {
    if(gvs->gvs_offset[i]) {
      rsx_free(gr, gvs->gvs_offset[i], gvs->gvs_size[i]);
      gvs->gvs_offset[i] = 0;
    }
  }
}
Exemplo n.º 4
0
/**
 * gv_surface_mutex must be held
 */
static void
surface_reset(glw_video_t *gv, glw_video_surface_t *gvs)
{
  int i;
  
  for(i = 0; i < GLW_VIDEO_MAX_SURFACES; i++) 
    if(gv->gv_surfaces[i].gvs_offset == gvs->gvs_offset &&
       gvs != &gv->gv_surfaces[i])
      return;  // Memory is shared

  if(gvs->gvs_offset) {
    rsx_free(gvs->gvs_offset, gvs->gvs_size);
    gvs->gvs_offset = 0;
    gvs->gvs_size = 0;
  }
}