Re: [Ekiga-devel-list] Ekiga 3.3.0 crash on h263 and h263-1998
- From: Eugen Dedu <Eugen Dedu pu-pm univ-fcomte fr>
- To: Guido Trentalancia <g trentalancia libero it>, Ekiga mailing list <ekiga-devel-list gnome org>
- Subject: Re: [Ekiga-devel-list] Ekiga 3.3.0 crash on h263 and h263-1998
- Date: Mon, 24 Jan 2011 15:03:29 +0100
On 21/01/11 06:49, Guido Trentalancia wrote:
I am not sure it is related to the bug you mentioned Eugen. It depends
on Opal for sure. The context is not being initialised. It might depend
on ffmpeg if, for example, avcodec_alloc_context() has failed, but I had
no time to check it further.
In any case, I have managed to create a temporary fix, which works for
me:
http://sourceforge.net/tracker/?func=detail&aid=3163160&group_id=204472&atid=989748
diff -pruN opal-3.8.3/plugins/video/H.263-1998/h263-1998.cxx opal-3.8.3-fix-h263-crash-on-null-context//plugins/video/H.263-1998/h263-1998.cxx
--- opal-3.8.3/plugins/video/H.263-1998/h263-1998.cxx 2010-12-20 23:42:42.000000000 +0100
+++ opal-3.8.3-fix-h263-crash-on-null-context//plugins/video/H.263-1998/h263-1998.cxx 2011-01-21 06:26:16.283344061 +0100
@@ -221,7 +221,7 @@ H263_Base_EncoderContext::H263_Base_Enco
H263_Base_EncoderContext::~H263_Base_EncoderContext()
{
- free(_inputFrameBuffer);
+ if (_inputFrameBuffer) free(_inputFrameBuffer);
}
bool H263_Base_EncoderContext::Open(CodecID codecId)
@@ -517,8 +517,8 @@ H263_RFC2190_EncoderContext::~H263_RFC21
CloseCodec();
- av_free(_context);
- av_free(_inputFrame);
+ if (_context) av_free(_context);
+ if (_inputFrame) av_free(_inputFrame);
TRACE_AND_LOG(tracer, 3, "encoder closed");
}
@@ -770,8 +770,8 @@ H263_RFC2429_EncoderContext::~H263_RFC24
if (_txH263PFrame)
delete _txH263PFrame;
- av_free(_context);
- av_free(_inputFrame);
+ if (_context) av_free(_context);
+ if (_inputFrame) av_free(_inputFrame);
TRACE_AND_LOG(tracer, 3, "encoder closed");
}
@@ -951,8 +951,8 @@ H263_Base_DecoderContext::~H263_Base_Dec
{
CloseCodec();
- av_free(_context);
- av_free(_outputFrame);
+ if (_context) av_free(_context);
+ if (_outputFrame) av_free(_outputFrame);
}
bool H263_Base_DecoderContext::OpenCodec()
@@ -1315,7 +1315,7 @@ static int free_codec_options ( const st
char ** strings = (char **) parm;
for (char ** string = strings; *string != NULL; string++)
free(*string);
- free(strings);
+ if (strings) free(strings);
return 1;
}
@@ -1360,7 +1360,12 @@ static int codec_encoder(const struct Pl
unsigned int * flag)
{
H263_Base_EncoderContext * context = (H263_Base_EncoderContext *)_context;
- return context->EncodeFrames((const BYTE *)from, *fromLen, (BYTE *)to, *toLen, *flag);
+ if (context)
+ return context->EncodeFrames((const BYTE *)from, *fromLen, (BYTE *)to, *toLen, *flag);
+ else {
+ TRACE_AND_LOG(tracer, 1, "Context for the encoder has not been initialised !");
+ return 0;
+ }
}
#define PMAX(a,b) ((a)>=(b)?(a):(b))
@@ -1590,7 +1595,7 @@ static int encoder_set_options(const Plu
unsigned * parmLen)
{
H263_Base_EncoderContext * context = (H263_Base_EncoderContext *)_context;
- if (parmLen == NULL || *parmLen != sizeof(const char **) || parm == NULL)
+ if (parmLen == NULL || *parmLen != sizeof(const char **) || parm == NULL || context == NULL)
return 0;
context->Lock();
@@ -1678,7 +1683,12 @@ static int codec_decoder(const struct Pl
unsigned int * flag)
{
H263_Base_DecoderContext * context = (H263_Base_DecoderContext *)_context;
- return context->DecodeFrames((const BYTE *)from, *fromLen, (BYTE *)to, *toLen, *flag) ? 1 : 0;
+ if (context)
+ context->DecodeFrames((const BYTE *)from, *fromLen, (BYTE *)to, *toLen, *flag) ? 1 : 0;
+ else {
+ TRACE_AND_LOG(tracer, 1, "Context for the decoder has not been initialised !");
+ return 0;
+ }
}
static int decoder_get_output_data_size(const PluginCodec_Definition * codec, void *, const char *, void *, unsigned *)
diff -pruN opal-3.8.3/plugins/video/H.264/h264-x264.h opal-3.8.3-fix-h263-crash-on-null-context//plugins/video/H.264/h264-x264.h
--- opal-3.8.3/plugins/video/H.264/h264-x264.h 2010-12-20 23:42:42.000000000 +0100
+++ opal-3.8.3-fix-h263-crash-on-null-context//plugins/video/H.264/h264-x264.h 2011-01-21 06:11:44.545191085 +0100
@@ -54,7 +54,10 @@
#include "shared/h264frame.h"
-
+#ifndef INT64_C
+#define INT64_C(c) (c ## LL)
+#define UINT64_C(c) (c ## ULL)
+#endif
extern "C" {
#ifdef _MSC_VER
diff -pruN opal-3.8.3/src/codec/opalpluginmgr.cxx opal-3.8.3-fix-h263-crash-on-null-context//src/codec/opalpluginmgr.cxx
--- opal-3.8.3/src/codec/opalpluginmgr.cxx 2010-12-20 23:43:00.000000000 +0100
+++ opal-3.8.3-fix-h263-crash-on-null-context//src/codec/opalpluginmgr.cxx 2011-01-21 05:57:51.479056064 +0100
@@ -302,7 +302,7 @@ void OpalPluginMediaFormatInternal::SetO
format.AddOption(new OpalMediaOptionString(key, false, val), true);
break;
}
- free(array);
+ if (array) free(array);
}
}
@@ -488,7 +488,7 @@ bool OpalPluginMediaFormatInternal::Adju
freeOptionsControl.Call(output, sizeof(output));
}
- free(input);
+ if (input) free(input);
return ok;
}
@@ -654,7 +654,7 @@ bool OpalPluginTranscoder::UpdateOptions
char ** options = fmt.GetOptions().ToCharArray(false);
bool ok = setCodecOptions.Call(options, sizeof(options), context) != 0;
- free(options);
+ if (options) free(options);
return ok;
}
I added your patch to the bug,
https://bugzilla.gnome.org/show_bug.cgi?id=606265.
On Thu, 20/01/2011 at 09.04 +0100, Eugen Dedu wrote:
On 20/01/11 05:42, g trentalancia libero it wrote:
Ekiga version 3.3.0
Opal version 3.8.3
Ptlib version 2.8.3
ffmpeg-0.6.1
This crash is very easy to reproduce and happens always. Just call any number
using any
audio codec and the H263 or H263-1998 video codec. Ekiga crashes
immediately after the call begins.
This does not occur when no video codec is selected or any of the other
video codecs is used (theora, h261, mp4v-es).
Attached stack backtrace.
Thank you for the stack. This is a known issue, see
https://bugzilla.gnome.org/show_bug.cgi?id=606265 and help if you can.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]