📄 keyframeman.cpp
字号:
#include "KeyFrameMan.h"
struct TKeyFrameElement* g_KeyFrameRoot = NULL;
void ClearKeyFrame()
{
struct TKeyFrameElement* tKeyFrameP = g_KeyFrameRoot;
struct TKeyFrameElement* tKeyFrameN;
while (tKeyFrameP)
{
tKeyFrameN = tKeyFrameP->next;
free(tKeyFrameP);
tKeyFrameP = tKeyFrameN;
}
g_KeyFrameRoot = NULL;
}
void AddKeyFrame(int _duration, int _position)
{
if (!g_KeyFrameRoot)
{
struct TKeyFrameElement* item = (struct TKeyFrameElement*)malloc(sizeof(struct TKeyFrameElement));
item->duration = _duration;
item->position = _position;
item->next = NULL;
g_KeyFrameRoot = item;
}
else
{
struct TKeyFrameElement* tKeyFrameP = g_KeyFrameRoot;
struct TKeyFrameElement* item;
while (tKeyFrameP->next)
{
if (tKeyFrameP->duration == _duration)
return;
tKeyFrameP = tKeyFrameP->next;
}
item = (struct TKeyFrameElement*)malloc(sizeof(struct TKeyFrameElement));
item->duration = _duration;
item->position = _position;
item->next = NULL;
tKeyFrameP->next = item;
}
}
int GetFirstKeyFramePosition()
{
if (!g_KeyFrameRoot)
return -1;
else
return g_KeyFrameRoot->position;
}
int GetFirstKeyFramePositionBeforeFP(CNeoFILE* aNeoFile)
{
int retVal = -1;
int duration;
struct TKeyFrameElement* tKeyFrameP = g_KeyFrameRoot;
if (!g_KeyFrameRoot)
return -1;
if (/*feof(fp)*/aNeoFile->FEof())
duration = (int)(FLVGetDuration() * 1000);
else if (flv_read_pts(aNeoFile, duration) == -1)
return -1;
while (tKeyFrameP)
{
if (tKeyFrameP->duration < duration)
if (retVal == -1)
retVal = tKeyFrameP->position;
else if (duration - tKeyFrameP->duration >= 2000)
retVal = tKeyFrameP->position;
tKeyFrameP = tKeyFrameP->next;
}
if (retVal == -1)
retVal = g_KeyFrameRoot->position;
return retVal;
}
int GetFirstKeyFramePositionAfterFP(CNeoFILE* aNeoFile)
{
int duration;
int position;
struct TKeyFrameElement* tKeyFrameP = g_KeyFrameRoot;
if (!g_KeyFrameRoot)
return -1;
if (flv_read_pts(aNeoFile, duration) == -1)
return -1;
while (tKeyFrameP)
{
if (tKeyFrameP->duration > duration)
return tKeyFrameP->position;
tKeyFrameP = tKeyFrameP->next;
}
// Not Found in List
// Let's seek throught the file
if (!flv_find_next_keyframe(aNeoFile, duration, position))
return position;
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -