Browse Source

Implement sws_getCachedContext() in swscale emulation

Originally committed as revision 6718 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Luca Abeni 19 years ago
parent
commit
96db380836
2 changed files with 41 additions and 0 deletions
  1. +36
    -0
      libavcodec/imgresample.c
  2. +5
    -0
      libavcodec/swscale.h

+ 36
- 0
libavcodec/imgresample.c View File

@@ -676,6 +676,42 @@ void sws_freeContext(struct SwsContext *ctx)
av_free(ctx);
}


/**
* Checks if context is valid or reallocs a new one instead.
* If context is NULL, just calls sws_getContext() to get a new one.
* Otherwise, checks if the parameters are the same already saved in context.
* If that is the case, returns the current context.
* Otherwise, frees context and gets a new one.
*
* Be warned that srcFilter, dstFilter are not checked, they are
* asumed to remain valid.
*/
struct SwsContext *sws_getCachedContext(struct SwsContext *ctx,
int srcW, int srcH, int srcFormat,
int dstW, int dstH, int dstFormat, int flags,
SwsFilter *srcFilter, SwsFilter *dstFilter, double *param)
{
if (ctx != NULL) {
if ((ctx->resampling_ctx->iwidth != srcW) ||
(ctx->resampling_ctx->iheight != srcH) ||
(ctx->src_pix_fmt != srcFormat) ||
(ctx->resampling_ctx->owidth != dstW) ||
(ctx->resampling_ctx->oheight != dstH) ||
(ctx->dst_pix_fmt != dstFormat))
{
sws_freeContext(ctx);
ctx = NULL;
}
}
if (ctx == NULL) {
return sws_getContext(srcW, srcH, srcFormat,
dstW, dstH, dstFormat, flags,
srcFilter, dstFilter, param);
}
return ctx;
}

int sws_scale(struct SwsContext *ctx, uint8_t* src[], int srcStride[],
int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[])
{


+ 5
- 0
libavcodec/swscale.h View File

@@ -54,6 +54,11 @@ int sws_scale(struct SwsContext *ctx, uint8_t* src[], int srcStride[],

void sws_freeContext(struct SwsContext *swsContext);

struct SwsContext *sws_getCachedContext(struct SwsContext *context,
int srcW, int srcH, int srcFormat,
int dstW, int dstH, int dstFormat, int flags,
SwsFilter *srcFilter, SwsFilter *dstFilter, double *param);

#ifdef __cplusplus
}
#endif


Loading…
Cancel
Save