diff --git a/src/media/media_decoder.cpp b/src/media/media_decoder.cpp
index c92564146730f82e7a0d931c525e0e1e3b948977..e24b368a2fa5854b5401facf7a48849787a59285 100644
--- a/src/media/media_decoder.cpp
+++ b/src/media/media_decoder.cpp
@@ -250,7 +250,8 @@ int MediaDecoder::setupFromVideoData()
     }
 
     // Get a pointer to the codec context for the video stream
-    decoderCtx_ = inputCtx_->streams[streamIndex_]->codec;
+    avStream_ = inputCtx_->streams[streamIndex_];
+    decoderCtx_ = avStream_->codec;
     if (decoderCtx_ == 0) {
         RING_ERR("Decoder context is NULL");
         return -1;
@@ -428,6 +429,14 @@ int MediaDecoder::getWidth() const
 int MediaDecoder::getHeight() const
 { return decoderCtx_->height; }
 
+int  // TODO : use of float fps is more accurate
+MediaDecoder::getFps() const
+{
+    return (avStream_->avg_frame_rate.den != 0 ?
+            (int)(avStream_->avg_frame_rate.num / avStream_->avg_frame_rate.den)
+            : 0);
+}
+
 int MediaDecoder::getPixelFormat() const
 { return libav_utils::ring_pixel_format(decoderCtx_->pix_fmt); }
 
diff --git a/src/media/media_decoder.h b/src/media/media_decoder.h
index 91f65194f88bacb3240342358b23455f357017f2..0a20a3aa3c1b1e2b99e6db0f9efd0afeabbffb25 100644
--- a/src/media/media_decoder.h
+++ b/src/media/media_decoder.h
@@ -99,6 +99,7 @@ class MediaDecoder {
 
         int getWidth() const;
         int getHeight() const;
+        int getFps() const;
         int getPixelFormat() const;
 
         void setOptions(const std::map<std::string, std::string>& options);
@@ -109,6 +110,7 @@ class MediaDecoder {
         AVCodec *inputDecoder_ = nullptr;
         AVCodecContext *decoderCtx_ = nullptr;
         AVFormatContext *inputCtx_ = nullptr;
+        AVStream *avStream_ = nullptr;
         std::unique_ptr<Resampler> resampler_;
         int streamIndex_ = -1;
         bool emulateRate_ = false;
diff --git a/src/media/video/video_input.cpp b/src/media/video/video_input.cpp
index a3d5a7b4dcb322c0ce015b2fc9327d8254b2880d..c11f19524c8beb496eb1e7aaafaef7308874e5f1 100644
--- a/src/media/video/video_input.cpp
+++ b/src/media/video/video_input.cpp
@@ -185,6 +185,11 @@ VideoInput::createDecoder()
     }
     decOpts_.width = decoder_->getWidth();
     decOpts_.height = decoder_->getHeight();
+    decOpts_.framerate = decoder_->getFps();
+    RING_INFO("create decoder with video params : size=%dX%d, fps=%d",
+            decOpts_.width,
+            decOpts_.height,
+            decOpts_.framerate);
     foundDecOpts(decOpts_);
 }
 
@@ -266,9 +271,6 @@ VideoInput::initFile(std::string path)
         decOpts_.framerate = 1;
     } else {
         RING_WARN("Guessing file type for %s", path.c_str());
-        // FIXME: proper parsing of FPS etc. should be done in
-        // MediaDecoder, not here.
-        decOpts_.framerate = 25;
     }
 
     return true;