Skip to content

Commit c487741

Browse files
committed
フレーム時間が不明の場合の処理を追加。
1 parent bd38fc5 commit c487741

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

VCECore/rgy_filter_yadif.cpp

+12-2
Original file line numberDiff line numberDiff line change
@@ -322,11 +322,21 @@ RGY_ERR RGYFilterYadif::run_filter(const RGYFrameInfo *pInputFrame, RGYFrameInfo
322322
pSourceFrame->picstruct,
323323
queue, wait_events, event
324324
);
325+
auto frameDuration = pSourceFrame->duration;
326+
if (frameDuration == 0) {
327+
if (iframe <= 1) {
328+
frameDuration = (decltype(frameDuration))((prm->timebase / prm->baseFps * 2).qdouble() + 0.5);
329+
} else if (m_nFrame + 1 >= iframe) {
330+
frameDuration = m_source.get(m_nFrame + 0)->frame.timestamp - m_source.get(m_nFrame - 1)->frame.timestamp;
331+
} else {
332+
frameDuration = m_source.get(m_nFrame + 1)->frame.timestamp - m_source.get(m_nFrame + 0)->frame.timestamp;
333+
}
334+
}
325335
ppOutputFrames[1]->picstruct = RGY_PICSTRUCT_FRAME;
326336
ppOutputFrames[0]->timestamp = pSourceFrame->timestamp;
327-
ppOutputFrames[0]->duration = (pSourceFrame->duration + 1) / 2;
337+
ppOutputFrames[0]->duration = (frameDuration + 1) / 2;
328338
ppOutputFrames[1]->timestamp = ppOutputFrames[0]->timestamp + ppOutputFrames[0]->duration;
329-
ppOutputFrames[1]->duration = pSourceFrame->duration - ppOutputFrames[0]->duration;
339+
ppOutputFrames[1]->duration = frameDuration - ppOutputFrames[0]->duration;
330340
ppOutputFrames[1]->inputFrameId = pSourceFrame->inputFrameId;
331341
}
332342
m_nFrame++;

VCECore/rgy_filter_yadif.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ enum YadifTargetField {
3939
class RGYFilterParamYadif : public RGYFilterParam {
4040
public:
4141
VppYadif yadif;
42-
RGYFilterParamYadif() : yadif() {};
42+
rgy_rational<int> timebase;
43+
RGYFilterParamYadif() : yadif(), timebase() {};
4344
virtual ~RGYFilterParamYadif() {};
4445
virtual tstring print() const override { return yadif.print(); };
4546
};

VCECore/vce_core.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,7 @@ RGY_ERR VCECore::initFilters(VCEParam *inputParam) {
10411041
param->frameIn = inputFrame;
10421042
param->frameOut = inputFrame;
10431043
param->baseFps = m_encFps;
1044+
param->timebase = m_outputTimebase;
10441045
param->bOutOverwrite = false;
10451046
auto sts = filter->init(param, m_pLog);
10461047
if (sts != RGY_ERR_NONE) {

0 commit comments

Comments
 (0)