cosmetics and cleanup of unused code in video_provider_lavc.cpp

Originally committed to SVN as r2255.
This commit is contained in:
Karl Blomster 2008-07-15 14:35:22 +00:00
parent 904873f0d9
commit a836b89476
1 changed files with 30 additions and 56 deletions

View File

@ -331,18 +331,8 @@ const AegiVideoFrame LAVCVideoProvider::GetFrame(int n,int formatType) {
if (frameNumber < 0)
frameNumber = 0;
// Following frame, just get it
/* if (n == frameNumber+1) {
int64_t temp = -1;
GetNextFrame(&temp);
} */
// Needs to seek
// else {
// Prepare seek
// int64_t seekTo;
// int result = 0;
int closestKeyFrame = FindClosestKeyframe(n);
// Find closest keyframe to the frame we want
int closestKeyFrame = FindClosestKeyframe(n);
#if 0
// Get time to seek to
@ -380,58 +370,42 @@ const AegiVideoFrame LAVCVideoProvider::GetFrame(int n,int formatType) {
// Constant frame rate
else {
#endif
// seekTo = closestKeyFrame;
bool hasSeeked = false;
bool hasSeeked = false;
// do we really need to seek?
// 10 frames is used as a margin to prevent excessive seeking since the predicted best keyframe isn't always selected by avformat
if (n < frameNumber || closestKeyFrame > frameNumber+10) {
// do it
av_seek_frame(lavcfile->fctx, vidStream, framesData[closestKeyFrame].DTS, AVSEEK_FLAG_BACKWARD);
avcodec_flush_buffers(codecContext);
hasSeeked = true;
// do we really need to seek?
// 10 frames is used as a margin to prevent excessive seeking since the predicted best keyframe isn't always selected by avformat
if (n < frameNumber || closestKeyFrame > frameNumber+10) {
// turns out we did need it, just do it
av_seek_frame(lavcfile->fctx, vidStream, framesData[closestKeyFrame].DTS, AVSEEK_FLAG_BACKWARD);
avcodec_flush_buffers(codecContext);
hasSeeked = true;
}
// regardless of whether we sekeed or not, decode frames until we have the one we want
do {
int64_t startTime;
GetNextFrame(&startTime);
if (hasSeeked) {
hasSeeked = false;
// is the seek destination known? does it belong to a frame?
if (startTime < 0 || (frameNumber = FrameFromDTS(startTime)) < 0) {
// guessing destination, may be unsafe
if (allowUnsafeSeeking)
frameNumber = ClosestFrameFromDTS(startTime);
else
throw _T("ffmpeg video provider: frame accurate seeking failed");
}
// decode frames until we have the one we want
do {
int64_t startTime;
GetNextFrame(&startTime);
}
if (hasSeeked) {
hasSeeked = false;
frameNumber++;
} while (frameNumber <= n);
// is the seek destination known? does it belong to a frame?
if (startTime < 0 || (frameNumber = FrameFromDTS(startTime)) < 0) {
if (allowUnsafeSeeking)
frameNumber = ClosestFrameFromDTS(startTime);
else
throw _T("ffmpeg video provider: frame accurate seeking failed");
}
}
frameNumber++;
} while (frameNumber <= n);
// Seek to keyframe
/* if (result == 0) {
avcodec_flush_buffers(codecContext);
// Seek until final frame
bool ok = true;
do {
ok = GetNextFrame();
} while (lastDecodeTime <= n && ok);
}
// Failed seeking
else {
GetNextFrame();
}*/
#if 0
}
#endif
//}
// Get aegisub frame