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:
|