[FFmpeg-cvslog] oma: refactor seek function

Luca Barbato git at videolan.org
Mon Jul 29 12:32:55 CEST 2013


ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Sat May  4 07:40:09 2013 +0200| [4f03a77e52596cbe9ec179666ddb3e0345a8133a] | committer: Luca Barbato

oma: refactor seek function

Properly propagate seek errors from avio and the generic pcm seek.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4f03a77e52596cbe9ec179666ddb3e0345a8133a
---

 libavformat/omadec.c |   32 +++++++++++++++++---------------
 1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/libavformat/omadec.c b/libavformat/omadec.c
index 9452c61..3d54931 100644
--- a/libavformat/omadec.c
+++ b/libavformat/omadec.c
@@ -444,24 +444,26 @@ static int oma_read_seek(struct AVFormatContext *s,
                          int stream_index, int64_t timestamp, int flags)
 {
     OMAContext *oc = s->priv_data;
-
-    ff_pcm_read_seek(s, stream_index, timestamp, flags);
-
-    if (oc->encrypted) {
-        /* readjust IV for CBC */
-        int64_t pos = avio_tell(s->pb);
-        if (pos < oc->content_start)
-            memset(oc->iv, 0, 8);
-        else {
-            if (avio_seek(s->pb, -8, SEEK_CUR) < 0 ||
-                avio_read(s->pb, oc->iv, 8) < 8) {
-                memset(oc->iv, 0, 8);
-                return -1;
-            }
-        }
+    int err = ff_pcm_read_seek(s, stream_index, timestamp, flags);
+
+    if (!oc->encrypted)
+        return err;
+
+    /* readjust IV for CBC */
+    if (err || avio_tell(s->pb) < oc->content_start)
+        goto wipe;
+    if ((err = avio_seek(s->pb, -8, SEEK_CUR)) < 0)
+        goto wipe;
+    if ((err = avio_read(s->pb, oc->iv, 8)) < 8) {
+        if (err >= 0)
+            err = AVERROR_EOF;
+        goto wipe;
     }
 
     return 0;
+wipe:
+    memset(oc->iv, 0, 8);
+    return err;
 }
 
 AVInputFormat ff_oma_demuxer = {



More information about the ffmpeg-cvslog mailing list