return TRUE;
}
-static void nsc_profiler_print(NSC_CONTEXT* context)
+static void nsc_profiler_print(NSC_CONTEXT_PRIV* priv)
{
PROFILER_PRINT_HEADER
- PROFILER_PRINT(context->priv->prof_nsc_rle_decompress_data)
- PROFILER_PRINT(context->priv->prof_nsc_decode)
- PROFILER_PRINT(context->priv->prof_nsc_rle_compress_data)
- PROFILER_PRINT(context->priv->prof_nsc_encode)
+ PROFILER_PRINT(priv->prof_nsc_rle_decompress_data)
+ PROFILER_PRINT(priv->prof_nsc_decode)
+ PROFILER_PRINT(priv->prof_nsc_rle_compress_data)
+ PROFILER_PRINT(priv->prof_nsc_encode)
PROFILER_PRINT_FOOTER
}
context->priv = (NSC_CONTEXT_PRIV*) calloc(1, sizeof(NSC_CONTEXT_PRIV));
if (!context->priv)
- goto error_priv;
+ goto error;
context->priv->log = WLog_Get("com.freerdp.codec.nsc");
WLog_OpenAppender(context->priv->log);
context->priv->PlanePool = BufferPool_New(TRUE, 0, 16);
if (!context->priv->PlanePool)
- goto error_PlanePool;
+ goto error;
PROFILER_CREATE(context->priv->prof_nsc_rle_decompress_data,
"nsc_rle_decompress_data")
/* init optimized methods */
NSC_INIT_SIMD(context);
return context;
-error_PlanePool:
- free(context->priv);
-error_priv:
- free(context);
+error:
+ nsc_context_free(context);
return NULL;
}
void nsc_context_free(NSC_CONTEXT* context)
{
- int i;
+ size_t i;
- for (i = 0; i < 4; i++)
+ if (!context)
+ return;
+
+ if (context->priv)
{
- if (context->priv->PlaneBuffers[i])
- {
+ for (i = 0; i < 4; i++)
free(context->priv->PlaneBuffers[i]);
- context->priv->PlaneBuffers[i] = NULL;
- }
+
+ BufferPool_Free(context->priv->PlanePool);
+ nsc_profiler_print(context->priv);
+ PROFILER_FREE(context->priv->prof_nsc_rle_decompress_data)
+ PROFILER_FREE(context->priv->prof_nsc_decode)
+ PROFILER_FREE(context->priv->prof_nsc_rle_compress_data)
+ PROFILER_FREE(context->priv->prof_nsc_encode)
+ free(context->priv);
}
free(context->BitmapData);
- BufferPool_Free(context->priv->PlanePool);
- nsc_profiler_print(context);
- PROFILER_FREE(context->priv->prof_nsc_rle_decompress_data)
- PROFILER_FREE(context->priv->prof_nsc_decode)
- PROFILER_FREE(context->priv->prof_nsc_rle_compress_data)
- PROFILER_FREE(context->priv->prof_nsc_encode)
- free(context->priv);
free(context);
}
void profiler_free(PROFILER* profiler)
{
- stopwatch_free(profiler->stopwatch);
+ if (profiler)
+ stopwatch_free(profiler->stopwatch);
+
free(profiler);
}
{
double s = stopwatch_get_elapsed_time_in_seconds(profiler->stopwatch);
double avg = profiler->stopwatch->count == 0 ? 0 : s / profiler->stopwatch->count;
-
WLog_INFO(TAG, "%-30s | %10u | %10.4fs | %8.6fs | %6.0f",
- profiler->name, profiler->stopwatch->count, s, avg, profiler->stopwatch->count / s);
+ profiler->name, profiler->stopwatch->count, s, avg, profiler->stopwatch->count / s);
}
void profiler_print_footer(void)