Esempio n. 1
0
void rarch_main_data_nbio_image_iterate(bool is_thread)
{
   nbio_handle_t         *nbio  = (nbio_handle_t*)nbio_ptr;
   nbio_image_handle_t   *image = nbio    ? &nbio->image   : NULL;

   if (!image || !nbio)
      return;

   (void)is_thread;

   switch (image->status)
   {
      case NBIO_IMAGE_STATUS_PROCESS_TRANSFER:
         if (rarch_main_data_image_iterate_process_transfer(nbio) == -1)
            image->status = NBIO_IMAGE_STATUS_PROCESS_TRANSFER_PARSE;
         break;
      case NBIO_IMAGE_STATUS_TRANSFER_PARSE:
         rarch_main_data_image_iterate_transfer_parse(nbio);
         if (image->is_blocking_on_processing)
            image->status = NBIO_IMAGE_STATUS_PROCESS_TRANSFER;
         break;
      case NBIO_IMAGE_STATUS_TRANSFER:
         if (!image->is_blocking)
            if (rarch_main_data_image_iterate_transfer(nbio) == -1)
               image->status = NBIO_IMAGE_STATUS_TRANSFER_PARSE;
         break;
      default:
      case NBIO_IMAGE_STATUS_POLL:
         if (rarch_main_data_image_iterate_poll(nbio) == 0)
            image->status = NBIO_IMAGE_STATUS_TRANSFER;
         break;
   }
}
Esempio n. 2
0
static void rarch_main_data_nbio_iterate(nbio_handle_t *nbio)
{
   if (!nbio)
      return;

   if (nbio->handle)
   {
      if (!nbio->is_blocking)
      {
         if (rarch_main_data_nbio_iterate_transfer(nbio) == -1)
            rarch_main_data_nbio_iterate_parse(nbio);
      }
      else if (nbio->is_finished)
         rarch_main_data_nbio_iterate_parse_free(nbio);
   }
   else
      rarch_main_data_nbio_iterate_poll(nbio);

   if (nbio->image.handle)
   {
      if (nbio->image.is_blocking_on_processing)
      {
         if (rarch_main_data_image_iterate_process_transfer(nbio) == -1)
            rarch_main_data_image_iterate_process_transfer_parse(nbio);
      }
      else if (!nbio->image.is_blocking)
      {
         if (rarch_main_data_image_iterate_transfer(nbio) == -1)
            rarch_main_data_image_iterate_transfer_parse(nbio);
      }
      else if (nbio->image.is_finished)
         rarch_main_data_image_iterate_parse_free(nbio);
   }
   else
      rarch_main_data_image_iterate_poll(nbio);
}
static void rarch_task_file_load_handler(rarch_task_t *task)
{
   nbio_handle_t         *nbio  = (nbio_handle_t*)task->state;
   nbio_image_handle_t   *image = nbio    ? &nbio->image   : NULL;

   switch (nbio->status)
   {
      case NBIO_STATUS_TRANSFER_PARSE:
         rarch_main_data_nbio_iterate_parse(nbio);
         nbio->status = NBIO_STATUS_TRANSFER_PARSE_FREE;
         break;
      case NBIO_STATUS_TRANSFER:
         if (rarch_main_data_nbio_iterate_transfer(nbio) == -1)
            nbio->status = NBIO_STATUS_TRANSFER_PARSE;
         break;
      case NBIO_STATUS_TRANSFER_PARSE_FREE:
      case NBIO_STATUS_POLL:
      default:
         break;
   }

   if (nbio->image.handle)
   {
      switch (image->status)
      {
         case NBIO_IMAGE_STATUS_PROCESS_TRANSFER:
            if (rarch_main_data_image_iterate_process_transfer(nbio) == -1)
               image->status = NBIO_IMAGE_STATUS_PROCESS_TRANSFER_PARSE;
            break;
         case NBIO_IMAGE_STATUS_TRANSFER_PARSE:
            rarch_main_data_image_iterate_transfer_parse(nbio);
            if (image->is_blocking_on_processing)
               image->status = NBIO_IMAGE_STATUS_PROCESS_TRANSFER;
            break;
         case NBIO_IMAGE_STATUS_TRANSFER:
            if (!image->is_blocking)
               if (rarch_main_data_image_iterate_transfer(nbio) == -1)
                  image->status = NBIO_IMAGE_STATUS_TRANSFER_PARSE;
            break;
         case NBIO_IMAGE_STATUS_PROCESS_TRANSFER_PARSE:
            rarch_main_data_image_iterate_process_transfer_parse(nbio);
            if (!image->is_finished)
               break;
         case NBIO_IMAGE_STATUS_TRANSFER_PARSE_FREE:
         case NBIO_IMAGE_STATUS_POLL:
         default:
            break;
      }

      if (nbio->is_finished && nbio->image.is_finished && !task->cancelled)
      {
         task->task_data = malloc(sizeof(nbio->image.ti));
         memcpy(task->task_data, &nbio->image.ti, sizeof(nbio->image.ti));
         goto task_finished;
      }

   } else
      if (nbio->is_finished)
         goto task_finished;


   if (task->cancelled)
   {
      task->error = strdup("Task canceled.");
      goto task_finished;
   }

   return;

task_finished:
   task->finished = true;

   if (image->handle)
   {
      rpng_nbio_load_image_free(image->handle);

      image->handle                 = NULL;
      image->frame_count            = 0;
   }

   nbio_free(nbio->handle);
   nbio->handle      = NULL;
   nbio->is_finished = false;
   nbio->frame_count = 0;
   free(nbio);
}