| 
																	
																	
																		
																	
																	
																 | 
																@@ -585,6 +585,7 @@ ULONG decklink_input_callback::Release(void) | 
															
														
														
													
														
															
																 | 
																 | 
																static int64_t get_pkt_pts(IDeckLinkVideoInputFrame *videoFrame, | 
																 | 
																 | 
																static int64_t get_pkt_pts(IDeckLinkVideoInputFrame *videoFrame, | 
															
														
														
													
														
															
																 | 
																 | 
																                           IDeckLinkAudioInputPacket *audioFrame, | 
																 | 
																 | 
																                           IDeckLinkAudioInputPacket *audioFrame, | 
															
														
														
													
														
															
																 | 
																 | 
																                           int64_t wallclock, | 
																 | 
																 | 
																                           int64_t wallclock, | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                           int64_t abs_wallclock, | 
															
														
														
													
														
															
																 | 
																 | 
																                           DecklinkPtsSource pts_src, | 
																 | 
																 | 
																                           DecklinkPtsSource pts_src, | 
															
														
														
													
														
															
																 | 
																 | 
																                           AVRational time_base, int64_t *initial_pts, | 
																 | 
																 | 
																                           AVRational time_base, int64_t *initial_pts, | 
															
														
														
													
														
															
																 | 
																 | 
																                           int copyts) | 
																 | 
																 | 
																                           int copyts) | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -607,13 +608,18 @@ static int64_t get_pkt_pts(IDeckLinkVideoInputFrame *videoFrame, | 
															
														
														
													
														
															
																 | 
																 | 
																                res = videoFrame->GetHardwareReferenceTimestamp(time_base.den, &bmd_pts, &bmd_duration); | 
																 | 
																 | 
																                res = videoFrame->GetHardwareReferenceTimestamp(time_base.den, &bmd_pts, &bmd_duration); | 
															
														
														
													
														
															
																 | 
																 | 
																            break; | 
																 | 
																 | 
																            break; | 
															
														
														
													
														
															
																 | 
																 | 
																        case PTS_SRC_WALLCLOCK: | 
																 | 
																 | 
																        case PTS_SRC_WALLCLOCK: | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            /* fall through */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        case PTS_SRC_ABS_WALLCLOCK: | 
															
														
														
													
														
															
																 | 
																 | 
																        { | 
																 | 
																 | 
																        { | 
															
														
														
													
														
															
																 | 
																 | 
																            /* MSVC does not support compound literals like AV_TIME_BASE_Q | 
																 | 
																 | 
																            /* MSVC does not support compound literals like AV_TIME_BASE_Q | 
															
														
														
													
														
															
																 | 
																 | 
																             * in C++ code (compiler error C4576) */ | 
																 | 
																 | 
																             * in C++ code (compiler error C4576) */ | 
															
														
														
													
														
															
																 | 
																 | 
																            AVRational timebase; | 
																 | 
																 | 
																            AVRational timebase; | 
															
														
														
													
														
															
																 | 
																 | 
																            timebase.num = 1; | 
																 | 
																 | 
																            timebase.num = 1; | 
															
														
														
													
														
															
																 | 
																 | 
																            timebase.den = AV_TIME_BASE; | 
																 | 
																 | 
																            timebase.den = AV_TIME_BASE; | 
															
														
														
													
														
															
																 | 
																 | 
																            pts = av_rescale_q(wallclock, timebase, time_base); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if (pts_src == PTS_SRC_WALLCLOCK) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                pts = av_rescale_q(wallclock, timebase, time_base); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            else | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                pts = av_rescale_q(abs_wallclock, timebase, time_base); | 
															
														
														
													
														
															
																 | 
																 | 
																            break; | 
																 | 
																 | 
																            break; | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -637,7 +643,7 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( | 
															
														
														
													
														
															
																 | 
																 | 
																    void *audioFrameBytes; | 
																 | 
																 | 
																    void *audioFrameBytes; | 
															
														
														
													
														
															
																 | 
																 | 
																    BMDTimeValue frameTime; | 
																 | 
																 | 
																    BMDTimeValue frameTime; | 
															
														
														
													
														
															
																 | 
																 | 
																    BMDTimeValue frameDuration; | 
																 | 
																 | 
																    BMDTimeValue frameDuration; | 
															
														
														
													
														
															
																 | 
																 | 
																    int64_t wallclock = 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int64_t wallclock = 0, abs_wallclock = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																    struct decklink_cctx *cctx = (struct decklink_cctx *) avctx->priv_data; | 
																 | 
																 | 
																    struct decklink_cctx *cctx = (struct decklink_cctx *) avctx->priv_data; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    if (ctx->autodetect) { | 
																 | 
																 | 
																    if (ctx->autodetect) { | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -652,6 +658,8 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( | 
															
														
														
													
														
															
																 | 
																 | 
																    ctx->frameCount++; | 
																 | 
																 | 
																    ctx->frameCount++; | 
															
														
														
													
														
															
																 | 
																 | 
																    if (ctx->audio_pts_source == PTS_SRC_WALLCLOCK || ctx->video_pts_source == PTS_SRC_WALLCLOCK) | 
																 | 
																 | 
																    if (ctx->audio_pts_source == PTS_SRC_WALLCLOCK || ctx->video_pts_source == PTS_SRC_WALLCLOCK) | 
															
														
														
													
														
															
																 | 
																 | 
																        wallclock = av_gettime_relative(); | 
																 | 
																 | 
																        wallclock = av_gettime_relative(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    if (ctx->audio_pts_source == PTS_SRC_ABS_WALLCLOCK || ctx->video_pts_source == PTS_SRC_ABS_WALLCLOCK) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        abs_wallclock = av_gettime(); | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    // Handle Video Frame | 
																 | 
																 | 
																    // Handle Video Frame | 
															
														
														
													
														
															
																 | 
																 | 
																    if (videoFrame) { | 
																 | 
																 | 
																    if (videoFrame) { | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -698,7 +706,7 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( | 
															
														
														
													
														
															
																 | 
																 | 
																            no_video = 0; | 
																 | 
																 | 
																            no_video = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																        pkt.pts = get_pkt_pts(videoFrame, audioFrame, wallclock, ctx->video_pts_source, ctx->video_st->time_base, &initial_video_pts, cctx->copyts); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        pkt.pts = get_pkt_pts(videoFrame, audioFrame, wallclock, abs_wallclock, ctx->video_pts_source, ctx->video_st->time_base, &initial_video_pts, cctx->copyts); | 
															
														
														
													
														
															
																 | 
																 | 
																        pkt.dts = pkt.pts; | 
																 | 
																 | 
																        pkt.dts = pkt.pts; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																        pkt.duration = frameDuration; | 
																 | 
																 | 
																        pkt.duration = frameDuration; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -789,7 +797,7 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( | 
															
														
														
													
														
															
																 | 
																 | 
																        pkt.size = audioFrame->GetSampleFrameCount() * ctx->audio_st->codecpar->channels * (ctx->audio_depth / 8); | 
																 | 
																 | 
																        pkt.size = audioFrame->GetSampleFrameCount() * ctx->audio_st->codecpar->channels * (ctx->audio_depth / 8); | 
															
														
														
													
														
															
																 | 
																 | 
																        audioFrame->GetBytes(&audioFrameBytes); | 
																 | 
																 | 
																        audioFrame->GetBytes(&audioFrameBytes); | 
															
														
														
													
														
															
																 | 
																 | 
																        audioFrame->GetPacketTime(&audio_pts, ctx->audio_st->time_base.den); | 
																 | 
																 | 
																        audioFrame->GetPacketTime(&audio_pts, ctx->audio_st->time_base.den); | 
															
														
														
													
														
															
																 | 
																 | 
																        pkt.pts = get_pkt_pts(videoFrame, audioFrame, wallclock, ctx->audio_pts_source, ctx->audio_st->time_base, &initial_audio_pts, cctx->copyts); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        pkt.pts = get_pkt_pts(videoFrame, audioFrame, wallclock, abs_wallclock, ctx->audio_pts_source, ctx->audio_st->time_base, &initial_audio_pts, cctx->copyts); | 
															
														
														
													
														
															
																 | 
																 | 
																        pkt.dts = pkt.pts; | 
																 | 
																 | 
																        pkt.dts = pkt.pts; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																        //fprintf(stderr,"Audio Frame size %d ts %d\n", pkt.size, pkt.pts); | 
																 | 
																 | 
																        //fprintf(stderr,"Audio Frame size %d ts %d\n", pkt.size, pkt.pts); | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |