forked from mia/Aegisub
cosmetics and cleanup of unused code in video_provider_lavc.cpp
Originally committed to SVN as r2255.
This commit is contained in:
parent
904873f0d9
commit
a836b89476
1 changed files with 30 additions and 56 deletions
|
@ -331,17 +331,7 @@ const AegiVideoFrame LAVCVideoProvider::GetFrame(int n,int formatType) {
|
||||||
if (frameNumber < 0)
|
if (frameNumber < 0)
|
||||||
frameNumber = 0;
|
frameNumber = 0;
|
||||||
|
|
||||||
// Following frame, just get it
|
// Find closest keyframe to the frame we want
|
||||||
/* 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);
|
int closestKeyFrame = FindClosestKeyframe(n);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -380,19 +370,18 @@ const AegiVideoFrame LAVCVideoProvider::GetFrame(int n,int formatType) {
|
||||||
// Constant frame rate
|
// Constant frame rate
|
||||||
else {
|
else {
|
||||||
#endif
|
#endif
|
||||||
// seekTo = closestKeyFrame;
|
|
||||||
bool hasSeeked = false;
|
bool hasSeeked = false;
|
||||||
|
|
||||||
// do we really need to seek?
|
// 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
|
// 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) {
|
if (n < frameNumber || closestKeyFrame > frameNumber+10) {
|
||||||
// do it
|
// turns out we did need it, just do it
|
||||||
av_seek_frame(lavcfile->fctx, vidStream, framesData[closestKeyFrame].DTS, AVSEEK_FLAG_BACKWARD);
|
av_seek_frame(lavcfile->fctx, vidStream, framesData[closestKeyFrame].DTS, AVSEEK_FLAG_BACKWARD);
|
||||||
avcodec_flush_buffers(codecContext);
|
avcodec_flush_buffers(codecContext);
|
||||||
hasSeeked = true;
|
hasSeeked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// decode frames until we have the one we want
|
// regardless of whether we sekeed or not, decode frames until we have the one we want
|
||||||
do {
|
do {
|
||||||
int64_t startTime;
|
int64_t startTime;
|
||||||
GetNextFrame(&startTime);
|
GetNextFrame(&startTime);
|
||||||
|
@ -402,6 +391,7 @@ const AegiVideoFrame LAVCVideoProvider::GetFrame(int n,int formatType) {
|
||||||
|
|
||||||
// is the seek destination known? does it belong to a frame?
|
// is the seek destination known? does it belong to a frame?
|
||||||
if (startTime < 0 || (frameNumber = FrameFromDTS(startTime)) < 0) {
|
if (startTime < 0 || (frameNumber = FrameFromDTS(startTime)) < 0) {
|
||||||
|
// guessing destination, may be unsafe
|
||||||
if (allowUnsafeSeeking)
|
if (allowUnsafeSeeking)
|
||||||
frameNumber = ClosestFrameFromDTS(startTime);
|
frameNumber = ClosestFrameFromDTS(startTime);
|
||||||
else
|
else
|
||||||
|
@ -413,25 +403,9 @@ const AegiVideoFrame LAVCVideoProvider::GetFrame(int n,int formatType) {
|
||||||
frameNumber++;
|
frameNumber++;
|
||||||
} while (frameNumber <= n);
|
} 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
|
#if 0
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
// Get aegisub frame
|
// Get aegisub frame
|
||||||
|
|
Loading…
Reference in a new issue