[mythtv] [patch] exit removal in NuppelDecoder
Daniel Thor Kristjansson
danielk at mrl.nyu.edu
Tue Dec 28 22:06:18 UTC 2004
NuppelDecoder did not have a pre-existing Init() method, so I've just
set a errored variable and test it after the creation of a NuppelDecoder.
I've also simplified the initialization of the class, mostly because
some of the variables were not getting initialized in the code in CVS.
-- Daniel
-------------- next part --------------
Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/NuppelVideoPlayer.cpp,v
retrieving revision 1.405
diff -u -r1.405 NuppelVideoPlayer.cpp
--- libs/libmythtv/NuppelVideoPlayer.cpp 27 Dec 2004 02:11:50 -0000 1.405
+++ libs/libmythtv/NuppelVideoPlayer.cpp 28 Dec 2004 22:00:12 -0000
@@ -583,6 +583,12 @@
if (NuppelDecoder::CanHandle(testbuf))
decoder = new NuppelDecoder(this, m_db, m_playbackinfo);
+ if (decoder->IsErrored())
+ {
+ VERBOSE(VB_IMPORTANT, "NVP: NuppelDecoder encountered error during creation.");
+ delete decoder;
+ return -1;
+ }
#ifdef USING_IVTV
else if (!disablevideo && IvtvDecoder::CanHandle(testbuf,
ringBuffer->GetFilename()))
@@ -3226,8 +3232,9 @@
{
if (dm_iter == NULL && honorCutList)
dm_iter = deleteMap.begin();
-
- decoder->GetFrame(0);
+
+ if (!decoder->GetFrame(0))
+ return false;
if (eof)
return false;
Index: libs/libmythtv/decoderbase.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/decoderbase.cpp,v
retrieving revision 1.14
diff -u -r1.14 decoderbase.cpp
--- libs/libmythtv/decoderbase.cpp 30 Nov 2004 02:32:22 -0000 1.14
+++ libs/libmythtv/decoderbase.cpp 28 Dec 2004 22:00:13 -0000
@@ -40,6 +40,7 @@
getrawframes = false;
getrawvideo = false;
+ errored = false;
}
void DecoderBase::Reset(void)
Index: libs/libmythtv/decoderbase.h
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/decoderbase.h,v
retrieving revision 1.21
diff -u -r1.21 decoderbase.h
--- libs/libmythtv/decoderbase.h 8 Dec 2004 04:23:16 -0000 1.21
+++ libs/libmythtv/decoderbase.h 28 Dec 2004 22:00:13 -0000
@@ -67,6 +67,7 @@
virtual void decCurrentAudioTrack(){}
virtual bool setCurrentAudioTrack(int){ return false;}
+ bool IsErrored() { return errored; }
protected:
typedef struct posmapentry
{
@@ -116,6 +117,7 @@
bool getrawvideo;
int currentAudioTrack;
+ bool errored;
};
#endif
Index: libs/libmythtv/nuppeldecoder.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/nuppeldecoder.cpp,v
retrieving revision 1.57
diff -u -r1.57 nuppeldecoder.cpp
--- libs/libmythtv/nuppeldecoder.cpp 15 Dec 2004 18:42:54 -0000 1.57
+++ libs/libmythtv/nuppeldecoder.cpp 28 Dec 2004 22:00:14 -0000
@@ -24,56 +24,50 @@
NuppelDecoder::NuppelDecoder(NuppelVideoPlayer *parent, MythSqlDatabase *db,
ProgramInfo *pginfo)
- : DecoderBase(parent, db, pginfo)
+ : DecoderBase(parent, db, pginfo),
+ gf(0), rtjd(0), video_width(0), video_height(0), video_size(0),
+ video_frame_rate(0.0f), audio_samplerate(44100),
+#ifdef WORDS_BIGENDIAN
+ audio_bits_per_sample(0),
+#endif
+ ffmpeg_extradatasize(0), ffmpeg_extradata(0), usingextradata(false),
+ disablevideo(false), totalLength(0), totalFrames(0), effdsp(0),
+ directbuf(0), mpa_codec(0), mpa_ctx(0), mpa_pic(0), directrendering(false),
+ lastct('1'), strm(0), buf(0), buf2(0),
+ videosizetotal(0), videoframesread(0), setreadahead(false)
{
- ffmpeg_extradata = NULL;
- ffmpeg_extradatasize = 0;
-
- usingextradata = false;
+ // initialize structures
+ memset(&fileheader, 0, sizeof(rtfileheader));
+ memset(&frameheader, 0, sizeof(rtframeheader));
memset(&extradata, 0, sizeof(extendeddata));
+ memset(&tmppicture, 0, sizeof(AVPicture));
+ memset(&mpa_pic_tmp, 0, sizeof(AVPicture));
+ planes[0] = planes[1] = planes[2] = 0;
+ // set parent class variables
positionMapType = MARK_KEYFRAME;
-
- totalLength = 0;
- totalFrames = 0;
+ lastKey = 0;
+ framesPlayed = 0;
+ getrawframes = false;
+ getrawvideo = false;
gf = lame_init();
lame_set_decode_only(gf, 1);
lame_decode_init();
lame_init_params(gf);
- int i;
rtjd = new RTjpeg();
- i = RTJ_YUV420;
- rtjd->SetFormat(&i);
+ int format = RTJ_YUV420;
+ rtjd->SetFormat(&format);
+ avcodec_init();
+ avcodec_register_all();
if (lzo_init() != LZO_E_OK)
{
- cerr << "lzo_init() failed, exiting\n";
+ VERBOSE(VB_IMPORTANT, "NuppelDecoder: lzo_init() failed, aborting");
+ errored = true;
+ return;
}
-
- avcodec_init();
- avcodec_register_all();
-
- mpa_codec = 0;
- mpa_ctx = NULL;
- mpa_pic = NULL;
- directrendering = false;
- directbuf = NULL;
-
- buf = NULL;
- buf2 = NULL;
- strm = NULL;
-
- lastct = '1';
-
- audio_samplerate = 44100;
-
- lastKey = 0;
- framesPlayed = 0;
-
- getrawframes = false;
- getrawvideo = false;
}
NuppelDecoder::~NuppelDecoder()
@@ -1070,7 +1064,8 @@
else if (lameret < 0)
{
VERBOSE(VB_IMPORTANT, QString("lame decode error: %1, exiting").arg(lameret));
- exit(-15);
+ errored = true;
+ return false;
}
packetlen = 0;
} while (lameret > 0);
More information about the mythtv-dev
mailing list