Exemplo n.º 1
0
static OMX_ERRORTYPE
release_all_buffers (oggdmux_prc_t * ap_prc, const OMX_U32 a_pid)
{
  assert (ap_prc);

  if ((a_pid == ARATELIA_OGG_DEMUXER_AUDIO_PORT_BASE_INDEX || a_pid == OMX_ALL)
      && (ap_prc->p_aud_hdr_))
    {
      void * p_krn = tiz_get_krn (handleOf (ap_prc));
      tiz_check_omx (tiz_krn_release_buffer (
        p_krn, ARATELIA_OGG_DEMUXER_AUDIO_PORT_BASE_INDEX, ap_prc->p_aud_hdr_));
      ap_prc->p_aud_hdr_ = NULL;
    }

  if ((a_pid == ARATELIA_OGG_DEMUXER_VIDEO_PORT_BASE_INDEX || a_pid == OMX_ALL)
      && (ap_prc->p_vid_hdr_))
    {
      void * p_krn = tiz_get_krn (handleOf (ap_prc));
      tiz_check_omx (tiz_krn_release_buffer (
        p_krn, ARATELIA_OGG_DEMUXER_VIDEO_PORT_BASE_INDEX, ap_prc->p_vid_hdr_));
      ap_prc->p_vid_hdr_ = NULL;
    }

  ap_prc->awaiting_buffers_ = true;

  return OMX_ErrorNone;
}
Exemplo n.º 2
0
static OMX_ERRORTYPE
webpd_proc_buffers_ready (const void *ap_obj)
{
  struct webpdprc *p_obj = (struct webpdprc *) ap_obj;
  const tiz_srv_t *p_parent = ap_obj;
  void *p_krn = tiz_get_krn (p_parent->p_hdl_);

  TIZ_LOG_CNAME (TIZ_TRACE,
                 TIZ_CNAME (p_parent->p_hdl_),
                 TIZ_CBUF (p_parent->p_hdl_), "Buffers ready...");

  while (1)
    {

      if (!p_obj->pinhdr_)
        {
          if (!claim_input (ap_obj) || !p_obj->pinhdr_)
            {
              break;
            }
        }

      if (!p_obj->pouthdr_)
        {
          if (!claim_output (ap_obj))
            {
              break;
            }
        }

      tiz_check_omx_err (webpd_proc_transform_buffer (ap_obj));
      if (p_obj->pinhdr_ && (0 == p_obj->pinhdr_->nFilledLen))
        {
          p_obj->pinhdr_->nOffset = 0;
          tiz_krn_release_buffer (p_krn, 0, p_obj->pinhdr_);
          p_obj->pinhdr_ = NULL;
        }
    }

  if (p_obj->eos_ && p_obj->pouthdr_)
    {
      /* EOS has been received and all the input data has been consumed
       * already, so its time to propagate the EOS flag */
      TIZ_LOG_CNAME (TIZ_TRACE,
                     TIZ_CNAME (p_parent->p_hdl_),
                     TIZ_CBUF (p_parent->p_hdl_),
                     "p_obj->eos OUTPUT HEADER [%p]...", p_obj->pouthdr_);
      p_obj->pouthdr_->nFlags |= OMX_BUFFERFLAG_EOS;
      tiz_krn_release_buffer (p_krn, 1, p_obj->pouthdr_);
      p_obj->pouthdr_ = NULL;
    }

  return OMX_ErrorNone;
}
Exemplo n.º 3
0
static OMX_ERRORTYPE
release_headers (const void * ap_obj, OMX_U32 a_pid)
{
  mp3d_prc_t * p_obj = (mp3d_prc_t *) ap_obj;

  assert (ap_obj);

  if (OMX_ALL == a_pid || ARATELIA_MP3_DECODER_INPUT_PORT_INDEX == a_pid)
    {
      if (p_obj->p_inhdr_)
        {
          if ((p_obj->p_inhdr_->nFlags & OMX_BUFFERFLAG_EOS) != 0)
            {
              TIZ_TRACE (handleOf (ap_obj), "EOS received");
              p_obj->eos_ = true;
            }

          p_obj->p_inhdr_->nOffset = 0;
          tiz_check_omx (tiz_krn_release_buffer (
            tiz_get_krn (handleOf (ap_obj)),
            ARATELIA_MP3_DECODER_INPUT_PORT_INDEX, p_obj->p_inhdr_));
          p_obj->p_inhdr_ = NULL;
          p_obj->remaining_ = 0;
        }
    }

  if (OMX_ALL == a_pid || ARATELIA_MP3_DECODER_OUTPUT_PORT_INDEX == a_pid)
    {
      if (p_obj->p_outhdr_)
        {
          if (p_obj->eos_)
            {
              /* EOS has been received and all the input data has been consumed
               * already, so its time to propagate the EOS flag */
              p_obj->p_outhdr_->nFlags |= OMX_BUFFERFLAG_EOS;
              p_obj->eos_ = false;
            }
          TIZ_TRACE (
            handleOf (p_obj),
            "Releasing output HEADER [%p] nFilledLen [%d] nAllocLen [%d]",
            p_obj->p_outhdr_, p_obj->p_outhdr_->nFilledLen,
            p_obj->p_outhdr_->nAllocLen);
          tiz_check_omx (tiz_krn_release_buffer (
            tiz_get_krn (handleOf (ap_obj)),
            ARATELIA_MP3_DECODER_OUTPUT_PORT_INDEX, p_obj->p_outhdr_));
          p_obj->p_outhdr_ = NULL;
        }
    }
  return OMX_ErrorNone;
}
Exemplo n.º 4
0
static OMX_ERRORTYPE
sdlivr_prc_buffers_ready (const void * ap_obj)
{
  sdlivr_prc_t * p_prc = (sdlivr_prc_t *) ap_obj;
  OMX_BUFFERHEADERTYPE * p_hdr = NULL;
  void * p_krn = tiz_get_krn (handleOf (ap_obj));

  assert (p_prc);

  if (!p_prc->port_disabled_)
    {
      tiz_check_omx (tiz_krn_claim_buffer (
        p_krn, ARATELIA_YUV_RENDERER_PORT_INDEX, 0, &p_hdr));

      while (!p_prc->port_disabled_ && p_hdr)
        {
          if (p_hdr)
            {
              tiz_check_omx (sdlivr_prc_render_buffer (ap_obj, p_hdr));
              if (p_hdr->nFlags & OMX_BUFFERFLAG_EOS)
                {
                  TIZ_TRACE (handleOf (ap_obj),
                             "OMX_BUFFERFLAG_EOS in HEADER [%p]", p_hdr);
                  tiz_srv_issue_event ((OMX_PTR) ap_obj, OMX_EventBufferFlag, 0,
                                       p_hdr->nFlags, NULL);
                }
              tiz_check_omx (tiz_krn_release_buffer (
                p_krn, ARATELIA_YUV_RENDERER_PORT_INDEX, p_hdr));
              tiz_check_omx (tiz_krn_claim_buffer (
                p_krn, ARATELIA_YUV_RENDERER_PORT_INDEX, 0, &p_hdr));
            }
        }
    }
  return OMX_ErrorNone;
}
Exemplo n.º 5
0
static OMX_ERRORTYPE
sdlivr_proc_buffers_ready (const void *ap_obj)
{
  OMX_BUFFERHEADERTYPE *p_hdr = NULL;

  if (OMX_ErrorNone == tiz_krn_claim_buffer
      (tiz_get_krn (handleOf (ap_obj)), 0, 0, &p_hdr))
    {
      if (NULL != p_hdr)
        {
          tiz_check_omx_err (sdlivr_proc_render_buffer (ap_obj, p_hdr));
          if (p_hdr->nFlags & OMX_BUFFERFLAG_EOS)
            {
              TIZ_TRACE (handleOf (ap_obj),
                         "OMX_BUFFERFLAG_EOS in HEADER [%p]", p_hdr);
              tiz_srv_issue_event ((OMX_PTR) ap_obj,
                                   OMX_EventBufferFlag,
                                   0, p_hdr->nFlags, NULL);
            }
          tiz_check_omx_err
            (tiz_krn_release_buffer (tiz_get_krn (handleOf (ap_obj)), 0, p_hdr));
        }
    }

  return OMX_ErrorNone;
}
Exemplo n.º 6
0
static OMX_ERRORTYPE
fr_proc_buffers_ready (const void *ap_obj)
{
  const fr_prc_t *p_obj = ap_obj;
  const tiz_srv_t *p_parent = ap_obj;
  tiz_pd_set_t ports;
  void *p_krn = tiz_get_krn (p_parent->p_hdl_);
  OMX_BUFFERHEADERTYPE *p_hdr = NULL;

  if (p_obj->eos_ == false)
    {
      TIZ_PD_ZERO (&ports);

      tiz_check_omx_err (tiz_krn_select (p_krn, 1, &ports));

      if (TIZ_PD_ISSET (0, &ports))
        {
          tiz_check_omx_err (tiz_krn_claim_buffer (p_krn, 0, 0, &p_hdr));
          TIZ_LOG (TIZ_TRACE, "Claimed HEADER [%p]...", p_hdr);
          tiz_check_omx_err (fr_proc_read_buffer (ap_obj, p_hdr));
          tiz_krn_release_buffer (p_krn, 0, p_hdr);
        }
    }

  return OMX_ErrorNone;
}
Exemplo n.º 7
0
static void
buffer_emptied (OMX_BUFFERHEADERTYPE * ap_hdr, void * ap_arg)
{
  httpr_prc_t * p_prc = ap_arg;

  assert (p_prc);
  assert (ap_hdr);
  assert (p_prc->p_inhdr_ == ap_hdr);
  assert (ap_hdr->nFilledLen == 0);

  ap_hdr->nOffset = 0;
  TIZ_TRACE (handleOf (p_prc), "HEADER [%p]", ap_hdr);

  if ((ap_hdr->nFlags & OMX_BUFFERFLAG_EOS) != 0)
    {
      TIZ_TRACE (handleOf (p_prc), "OMX_BUFFERFLAG_EOS in HEADER [%p]", ap_hdr);
      tiz_srv_issue_event ((OMX_PTR) p_prc, OMX_EventBufferFlag,
                           ARATELIA_HTTP_RENDERER_PORT_INDEX, ap_hdr->nFlags,
                           NULL);
    }

  tiz_krn_release_buffer (tiz_get_krn (handleOf (p_prc)),
                          ARATELIA_HTTP_RENDERER_PORT_INDEX, ap_hdr);
  p_prc->p_inhdr_ = NULL;
}
Exemplo n.º 8
0
static OMX_ERRORTYPE
release_buffer (scloud_prc_t * ap_prc)
{
  assert (ap_prc);

  if (ap_prc->p_outhdr_)
    {
      if (ap_prc->bytes_before_eos_ > ap_prc->p_outhdr_->nFilledLen)
        {
          ap_prc->bytes_before_eos_ -= ap_prc->p_outhdr_->nFilledLen;
        }
      else
        {
          ap_prc->bytes_before_eos_ = 0;
          ap_prc->eos_ = true;
        }

      if (ap_prc->eos_)
        {
          ap_prc->eos_ = false;
          ap_prc->p_outhdr_->nFlags |= OMX_BUFFERFLAG_EOS;
        }
      tiz_check_omx (tiz_krn_release_buffer (
        tiz_get_krn (handleOf (ap_prc)), ARATELIA_HTTP_SOURCE_PORT_INDEX,
        ap_prc->p_outhdr_));
      ap_prc->p_outhdr_ = NULL;
    }
  return OMX_ErrorNone;
}
Exemplo n.º 9
0
static void release_output_header(vid_dec_PrivateType* priv) {
   if (priv->p_outhdr_) {
      assert(!priv->out_port_disabled_);
      (void) tiz_krn_release_buffer (tiz_get_krn (handleOf (priv)),
                                     OMX_VID_DEC_AVC_OUTPUT_PORT_INDEX,
                                     priv->p_outhdr_);
      priv->p_outhdr_ = NULL;
   }
}
Exemplo n.º 10
0
static void release_input_headers(vid_dec_PrivateType* priv) {
   int i;
   for (i = 0; i < priv->num_in_buffers; i++) {
      assert(!priv->in_port_disabled_);
      if (priv->in_buffers[i]->pInputPortPrivate) {
         vid_dec_FreeInputPortPrivate(priv->in_buffers[i]);
      }
      (void) tiz_krn_release_buffer (tiz_get_krn (handleOf (priv)),
                                     OMX_VID_DEC_AVC_INPUT_PORT_INDEX,
                                     priv->in_buffers[i]);
      priv->in_buffers[i] = NULL;
   }
   priv->p_inhdr_ = NULL;
   priv->num_in_buffers = 0;
}
Exemplo n.º 11
0
static void get_eglimage(vid_dec_PrivateType* priv) {
   OMX_PTR p_eglimage = NULL;
   OMX_NATIVE_WINDOWTYPE * p_egldisplay = NULL;
   const tiz_port_t * p_port = NULL;
   struct pipe_video_buffer templat = {};
   struct pipe_video_buffer *video_buffer = NULL;
   struct pipe_resource * p_res = NULL;
   struct pipe_resource *resources[VL_NUM_COMPONENTS];

   if (OMX_ErrorNone ==
      tiz_krn_claim_eglimage(tiz_get_krn (handleOf (priv)),
                             OMX_VID_DEC_AVC_OUTPUT_PORT_INDEX,
                             priv->p_outhdr_, &p_eglimage)) {
      priv->use_eglimage = true;
      p_port = tiz_krn_get_port(tiz_get_krn (handleOf (priv)),
                                OMX_VID_DEC_AVC_OUTPUT_PORT_INDEX);
      p_egldisplay = p_port->portdef_.format.video.pNativeWindow;

      if (!util_hash_table_get(priv->video_buffer_map, priv->p_outhdr_)) {
        p_res = st_omx_pipe_texture_from_eglimage(p_egldisplay, p_eglimage);

        assert(p_res);

        memset(&templat, 0, sizeof(templat));
        templat.buffer_format = p_res->format;
        templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_NONE;
        templat.width = p_res->width0;
        templat.height = p_res->height0;
        templat.interlaced = 0;

        memset(resources, 0, sizeof(resources));
        pipe_resource_reference(&resources[0], p_res);

        video_buffer = vl_video_buffer_create_ex2(priv->pipe, &templat, resources);

        assert(video_buffer);
        assert(video_buffer->buffer_format == p_res->format);

        util_hash_table_set(priv->video_buffer_map, priv->p_outhdr_, video_buffer);
      }
   } else {
      (void) tiz_krn_release_buffer(tiz_get_krn (handleOf (priv)),
                                    OMX_VID_DEC_AVC_OUTPUT_PORT_INDEX,
                                    priv->p_outhdr_);
      priv->p_outhdr_ = NULL;
   }
}
Exemplo n.º 12
0
static void h264d_buffer_emptied(vid_dec_PrivateType* priv, OMX_BUFFERHEADERTYPE * p_hdr)
{
   assert(priv);
   assert(priv->in_buffers[0] == p_hdr);

   if (!priv->out_port_disabled_) {
      assert (p_hdr->nFilledLen == 0);
      p_hdr->nOffset = 0;

      if ((p_hdr->nFlags & OMX_BUFFERFLAG_EOS) != 0) {
         priv->eos_ = true;
      }

      (void) tiz_krn_release_buffer (tiz_get_krn (handleOf (priv)), 0, p_hdr);
      priv->p_inhdr_ = NULL;
      priv->in_buffers[0] = NULL;
   }
}
Exemplo n.º 13
0
static OMX_ERRORTYPE
release_buffer (dirble_prc_t * ap_prc)
{
  assert (ap_prc);

  if (ap_prc->p_outhdr_)
    {
      if (ap_prc->eos_)
        {
          ap_prc->eos_ = false;
          ap_prc->p_outhdr_->nFlags |= OMX_BUFFERFLAG_EOS;
        }
      tiz_check_omx (tiz_krn_release_buffer (
        tiz_get_krn (handleOf (ap_prc)), ARATELIA_HTTP_SOURCE_PORT_INDEX,
        ap_prc->p_outhdr_));
      ap_prc->p_outhdr_ = NULL;
    }
  return OMX_ErrorNone;
}
Exemplo n.º 14
0
static void h264d_buffer_filled(vid_dec_PrivateType* priv, OMX_BUFFERHEADERTYPE * p_hdr)
{
   assert(priv);
   assert(p_hdr);
   assert(priv->p_outhdr_ == p_hdr);

   if (!priv->in_port_disabled_) {
      p_hdr->nOffset = 0;

      if (priv->eos_) {
         /* EOS has been received and all the input data has been consumed
          * already, so its time to propagate the EOS flag */
         priv->p_outhdr_->nFlags |= OMX_BUFFERFLAG_EOS;
         priv->eos_ = false;
      }

      (void) tiz_krn_release_buffer(tiz_get_krn (handleOf (priv)),
                                    OMX_VID_DEC_AVC_OUTPUT_PORT_INDEX,
                                    p_hdr);
      priv->p_outhdr_ = NULL;
   }
}
Exemplo n.º 15
0
/* TODO: Change void to a int for OOM errors */
static void
release_header (oggdmux_prc_t * ap_prc, const OMX_U32 a_pid)
{
  OMX_BUFFERHEADERTYPE ** pp_hdr = get_header_ptr (ap_prc, a_pid);
  OMX_BUFFERHEADERTYPE * p_hdr = NULL;

  p_hdr = *pp_hdr;
  assert (p_hdr);

  TIZ_TRACE (handleOf (ap_prc),
             "Releasing HEADER [%p] pid [%d] "
             "nFilledLen [%d] nFlags [%d]",
             p_hdr, a_pid, p_hdr->nFilledLen, p_hdr->nFlags);

  /* TODO: Check for OOM error and issue Error Event */
  p_hdr->nOffset = 0;
  (void) tiz_krn_release_buffer (tiz_get_krn (handleOf (ap_prc)), a_pid, p_hdr);
  *pp_hdr = NULL;

  assert (ap_prc);
  ap_prc->awaiting_buffers_ = true;
}
Exemplo n.º 16
0
static OMX_ERRORTYPE
tiztc_proc_buffers_ready (const void *ap_obj)
{
  const tiz_srv_t *p_parent = ap_obj;
  tiz_pd_set_t ports;
  void *p_ker = tiz_get_krn (p_parent->p_hdl_);
  OMX_BUFFERHEADERTYPE *p_hdr = NULL;

  TIZ_LOG (TIZ_TRACE, "Buffers ready...");

  TIZ_PD_ZERO (&ports);

  tiz_check_omx_err (tiz_krn_select (p_ker, 1, &ports));

  if (TIZ_PD_ISSET (0, &ports))
    {
      tiz_check_omx_err (tiz_krn_claim_buffer (p_ker, 0, 0, &p_hdr));
      tiz_check_omx_err (tiztc_proc_render_buffer (p_hdr));
      (void) tiz_krn_release_buffer (p_ker, 0, p_hdr);
    }

  return OMX_ErrorNone;
}