spacing and make sws_context static global so we don't have to keep initializing it when playing back from mp4 in eventstream.
This commit is contained in:
parent
1bd340d602
commit
ffcef8a42a
|
@ -48,6 +48,8 @@ static short *g_v_table;
|
||||||
static short *g_u_table;
|
static short *g_u_table;
|
||||||
static short *b_u_table;
|
static short *b_u_table;
|
||||||
|
|
||||||
|
struct SwsContext *sws_convert_context = NULL;
|
||||||
|
|
||||||
jpeg_compress_struct *Image::writejpg_ccinfo[101] = { 0 };
|
jpeg_compress_struct *Image::writejpg_ccinfo[101] = { 0 };
|
||||||
jpeg_compress_struct *Image::encodejpg_ccinfo[101] = { 0 };
|
jpeg_compress_struct *Image::encodejpg_ccinfo[101] = { 0 };
|
||||||
jpeg_decompress_struct *Image::readjpg_dcinfo = 0;
|
jpeg_decompress_struct *Image::readjpg_dcinfo = 0;
|
||||||
|
@ -167,8 +169,10 @@ Image::Image( const AVFrame *frame ) {
|
||||||
width = frame->width;
|
width = frame->width;
|
||||||
height = frame->height;
|
height = frame->height;
|
||||||
pixels = width*height;
|
pixels = width*height;
|
||||||
|
|
||||||
colours = ZM_COLOUR_RGB32;
|
colours = ZM_COLOUR_RGB32;
|
||||||
subpixelorder = ZM_SUBPIX_ORDER_RGBA;
|
subpixelorder = ZM_SUBPIX_ORDER_RGBA;
|
||||||
|
|
||||||
size = pixels*colours;
|
size = pixels*colours;
|
||||||
buffer = 0;
|
buffer = 0;
|
||||||
holdbuffer = 0;
|
holdbuffer = 0;
|
||||||
|
@ -183,24 +187,26 @@ Image::Image( const AVFrame *frame ) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAVE_LIBSWSCALE
|
#if HAVE_LIBSWSCALE
|
||||||
struct SwsContext *mConvertContext = sws_getContext(
|
sws_convert_context = sws_getCachedContext(
|
||||||
|
sws_convert_context,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
(AVPixelFormat)frame->format,
|
(AVPixelFormat)frame->format,
|
||||||
width, height,
|
width, height,
|
||||||
AV_PIX_FMT_RGBA, SWS_BICUBIC, NULL,
|
AV_PIX_FMT_RGBA, SWS_BICUBIC, NULL,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
if ( mConvertContext == NULL )
|
if ( sws_convert_context == NULL )
|
||||||
Fatal("Unable to create conversion context");
|
Fatal("Unable to create conversion context");
|
||||||
|
|
||||||
if ( sws_scale(mConvertContext, frame->data, frame->linesize, 0, frame->height, dest_frame->data, dest_frame->linesize) < 0 )
|
if ( sws_scale(sws_convert_context, frame->data, frame->linesize, 0, frame->height,
|
||||||
|
dest_frame->data, dest_frame->linesize) < 0 )
|
||||||
Fatal("Unable to convert raw format %u to target format %u", frame->format, AV_PIX_FMT_RGBA);
|
Fatal("Unable to convert raw format %u to target format %u", frame->format, AV_PIX_FMT_RGBA);
|
||||||
#else // HAVE_LIBSWSCALE
|
#else // HAVE_LIBSWSCALE
|
||||||
Fatal("You must compile ffmpeg with the --enable-swscale option to use ffmpeg cameras");
|
Fatal("You must compile ffmpeg with the --enable-swscale option to use ffmpeg cameras");
|
||||||
#endif // HAVE_LIBSWSCALE
|
#endif // HAVE_LIBSWSCALE
|
||||||
av_frame_free(&dest_frame);
|
av_frame_free(&dest_frame);
|
||||||
update_function_pointers();
|
update_function_pointers();
|
||||||
}
|
} // end Image::Image(const AVFrame *frame)
|
||||||
|
|
||||||
Image::Image(const Image &p_image) {
|
Image::Image(const Image &p_image) {
|
||||||
if ( !initialised )
|
if ( !initialised )
|
||||||
|
@ -225,7 +231,7 @@ Image::~Image() {
|
||||||
|
|
||||||
/* Should be called as part of program shutdown to free everything */
|
/* Should be called as part of program shutdown to free everything */
|
||||||
void Image::Deinitialise() {
|
void Image::Deinitialise() {
|
||||||
if ( initialised ) {
|
if ( !initialised ) return;
|
||||||
/*
|
/*
|
||||||
delete[] y_table;
|
delete[] y_table;
|
||||||
delete[] uv_table;
|
delete[] uv_table;
|
||||||
|
@ -252,8 +258,12 @@ void Image::Deinitialise() {
|
||||||
writejpg_ccinfo[quality] = NULL;
|
writejpg_ccinfo[quality] = NULL;
|
||||||
}
|
}
|
||||||
} // end foreach quality
|
} // end foreach quality
|
||||||
|
|
||||||
|
if ( sws_convert_context ) {
|
||||||
|
sws_freeContext(sws_convert_context);
|
||||||
|
sws_convert_context = NULL;
|
||||||
}
|
}
|
||||||
}
|
} // end void Image::Deinitialise()
|
||||||
|
|
||||||
void Image::Initialise() {
|
void Image::Initialise() {
|
||||||
/* Assign the blend pointer to function */
|
/* Assign the blend pointer to function */
|
||||||
|
@ -655,7 +665,8 @@ void Image::Assign( const Image &image ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !buffer || image.width != width || image.height != height || image.colours != colours || image.subpixelorder != subpixelorder) {
|
if ( !buffer || image.width != width || image.height != height
|
||||||
|
|| image.colours != colours || image.subpixelorder != subpixelorder) {
|
||||||
|
|
||||||
if ( holdbuffer && buffer ) {
|
if ( holdbuffer && buffer ) {
|
||||||
if ( new_size > allocation ) {
|
if ( new_size > allocation ) {
|
||||||
|
|
Loading…
Reference in New Issue