Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

bool Impala::Core::Stream::RgbDataSrcLavc_old::ReadFrameData (  )  [inline, private, virtual]

Implements Impala::Core::Stream::RgbDataSrcInfo.

Definition at line 1091 of file RgbDataSrcLavc_old.h.

References ILOG_DEBUG, ILOG_ERROR, ILOG_INFO, and Impala::Core::Stream::LAVCException::what().

01092     {
01093         if (mTargetFrameNr == mCurrentFrameNr)
01094             return true;
01095 
01096         if (!FrameValid(mTargetFrameNr) ||
01097             mTargetFrameNr == mBufferedFrameNr)
01098         {
01099             mCurrentFrameNr = mTargetFrameNr;
01100             return true;
01101         }
01102 
01103 //SK
01104 try
01105 {
01106         if (mTargetFrameNr < mBufferedFrameNr)
01107         {
01108             //Jump(GetPos(0), AVSEEK_FLAG_BYTE, 2, 1);
01109             //mBufferedFrameNr = mBlankFrames;
01110 
01111             Reset(); 
01112         }
01113 
01114         if ((mIndexExists) && (mTargetFrameNr - mBufferedFrameNr > mGopSize))
01115         {
01116             int key = GetSeekableFrame(mTargetFrameNr);
01117             ILOG_DEBUG("Jumping to Keyframe " << key << " for " << mTargetFrameNr);
01118             JumpToKeyFrame(key);
01119         }
01120 
01121         //ILOG_DEBUG("[DoReadFrameData] Going from mBufferedFrameNr=" << mBufferedFrameNr << " to mTargetFrameNr=" << mTargetFrameNr);
01122         const int target = mTargetFrameNr;
01123         while (mCurrentFrameNr < target)
01124         {
01125             //bool isValidFrame = mIndexExists ? (mIndex->Get2(mBufferedFrameNr + 1) >= 0) : true;
01126             const int nextFrameNr = mCurrentFrameNr + 1;
01127             bool isValidFrame = FrameValid(nextFrameNr);
01128             if (nextFrameNr != mBufferedFrameNr && isValidFrame)
01129             {
01130                 bool isKeyFrame; // not used
01131                 const bool gotFrame = (DecodeNextFrame(isValidFrame, isKeyFrame) == 0);
01132                 if (gotFrame)
01133                 {
01134                     if (!isValidFrame)
01135                     {
01136                         ILOG_DEBUG("[DoReadFrameData] Frame read is invalid: " << 
01137                             nextFrameNr);
01138                         MarkBadFrame(nextFrameNr);
01139                     }
01140                     else
01141                         mBufferedFrameNr = nextFrameNr;
01142                 }
01143                 else 
01144                 {
01145                     // SK: following code needs a new home! Use return code instead of void?
01146                     if (mLastFrame == LASTFRAME_UNKNOWN)
01147                     {
01148                         mLastFrame = mCurrentFrameNr;
01149                         ILOG_INFO("Adjusted last frame nr to: " << mLastFrame);
01150                     }
01151                     else
01152                     {
01153                         // for avi/pts
01154                         MarkBadFrame(nextFrameNr); 
01155                         mCurrentFrameNr = nextFrameNr;
01156                     }
01157                     return true; 
01158                 }
01159             }
01160             mCurrentFrameNr = nextFrameNr;
01161         }
01162 
01163         if (mBufferedFrameNr == mCurrentFrameNr)
01164         {
01165             ConvertFrameToRgb();
01166             if (mFormatName != "asf") // SK: dirty debug fix
01167                 CheckMD5Hash(mBufferedFrameNr);
01168         }
01169 }
01170 catch (LAVCException e)
01171 {
01172     ILOG_ERROR("Failure when going to frame: " << mTargetFrameNr << "; " << e.what());
01173     return false;
01174 }
01175 //SK
01176 
01177         return true;
01178     }

Here is the call graph for this function:


Generated on Fri Mar 19 11:17:55 2010 for ImpalaSrc by  doxygen 1.5.1