]> rtime.felk.cvut.cz Git - opencv.git/blobdiff - opencv/src/highgui/cvcap_ffmpeg.cpp
corrected retrieving video stream position (thanks to quadrillion for the patch)
[opencv.git] / opencv / src / highgui / cvcap_ffmpeg.cpp
index e02e070513bb599314a2212be9424428cdc649e8..13f641327fa3b6dccb67c945fe8f2468be8be829 100644 (file)
@@ -620,15 +620,21 @@ double CvCapture_FFMPEG::getProperty( int property_id )
     switch( property_id )
     {
     case CV_CAP_PROP_POS_MSEC:        
+        if(video_st->parser && video_st->parser->dts != AV_NOPTS_VALUE_)
+            return (((double)video_st->parser->dts-1) *1000.0f) * av_q2d (video_st->time_base);
         if(video_st->cur_dts != AV_NOPTS_VALUE_)
             return (((double)video_st->cur_dts-1) *1000.0f * av_q2d (video_st->time_base));
         //  return (((double)video_st->cur_dts-1) *1000) / av_q2d (video_st->r_frame_rate);
         break;
     case CV_CAP_PROP_POS_FRAMES:
+        if(video_st->parser && video_st->parser->dts != AV_NOPTS_VALUE_)
+            return (double)video_st->parser->dts-1;
         if(video_st->cur_dts != AV_NOPTS_VALUE_)
             return (double)video_st->cur_dts-1;
         break;
     case CV_CAP_PROP_POS_AVI_RATIO:
+        if(video_st->parser && video_st->parser->dts != AV_NOPTS_VALUE_)
+            return (double)(video_st->parser->dts-1)/(double)video_st->duration;
         if(video_st->cur_dts != AV_NOPTS_VALUE_ && video_st->duration != AV_NOPTS_VALUE_)
             return (double)(video_st->cur_dts-1)/(double)video_st->duration;
         break;