]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/nuv.c
parse clusters until some packets are queued
[ffmpeg] / libavformat / nuv.c
index e707854ef303907af003da9aedf7bc6977ea01d7..7e04222eead873d1df7340b2a209fac656648a67 100644 (file)
@@ -2,22 +2,24 @@
  * NuppelVideo demuxer.
  * Copyright (c) 2006 Reimar Doeffinger.
  *
- * This library is free software; you can redistribute it and/or
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This library is distributed in the hope that it will be useful,
+ * FFmpeg is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
+ * License along with FFmpeg; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 #include "avformat.h"
-#include "avi.h"
+#include "riff.h"
 
 typedef struct {
     int v_id;
@@ -152,7 +154,7 @@ static int nuv_header(AVFormatContext *s, AVFormatParameters *ap) {
         vst->codec->height = height;
         vst->codec->bits_per_sample = 10;
         vst->codec->sample_aspect_ratio = av_d2q(aspect, 10000);
-        vst->r_frame_rate = av_d2q(1.0 / fps, 10000);
+        vst->r_frame_rate = av_d2q(fps, 60000);
         av_set_pts_info(vst, 32, 1, 1000);
     } else
         ctx->v_id = -1;
@@ -186,9 +188,9 @@ static int nuv_packet(AVFormatContext *s, AVPacket *pkt) {
     while (!url_feof(pb)) {
         ret = get_buffer(pb, hdr, HDRSIZE);
         if (ret <= 0)
-            return ret;
+            return ret ? ret : -1;
         frametype = hdr[0];
-        size = PKTSIZE(LE_32(&hdr[8]));
+        size = PKTSIZE(AV_RL32(&hdr[8]));
         switch (frametype) {
             case NUV_VIDEO:
             case NUV_EXTRADATA:
@@ -201,7 +203,7 @@ static int nuv_packet(AVFormatContext *s, AVPacket *pkt) {
                 if (ret < 0)
                     return ret;
                 pkt->pos = url_ftell(pb);
-                pkt->pts = LE_32(&hdr[4]);
+                pkt->pts = AV_RL32(&hdr[4]);
                 pkt->stream_index = ctx->v_id;
                 memcpy(pkt->data, hdr, HDRSIZE);
                 ret = get_buffer(pb, pkt->data + HDRSIZE, size);
@@ -213,7 +215,7 @@ static int nuv_packet(AVFormatContext *s, AVPacket *pkt) {
                     break;
                 }
                 ret = av_get_packet(pb, pkt, size);
-                pkt->pts = LE_32(&hdr[4]);
+                pkt->pts = AV_RL32(&hdr[4]);
                 pkt->stream_index = ctx->a_id;
                 return ret;
             case NUV_SEEKP:
@@ -227,7 +229,7 @@ static int nuv_packet(AVFormatContext *s, AVPacket *pkt) {
     return AVERROR_IO;
 }
 
-static AVInputFormat nuv_iformat = {
+AVInputFormat nuv_demuxer = {
     "nuv",
     "NuppelVideo format",
     sizeof(NUVContext),
@@ -237,9 +239,3 @@ static AVInputFormat nuv_iformat = {
     NULL,
     NULL,
 };
-
-int nuv_init(void) {
-    av_register_input_format(&nuv_iformat);
-    return 0;
-}
-