mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
Implement sws_getCachedContext() in swscale emulation
Originally committed as revision 6718 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
4041a495a8
commit
96db380836
@ -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[])
|
||||
{
|
||||
|
@ -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…
Reference in New Issue
Block a user