annotate libmpdemux/demux_nuv.c @ 15231:e183a591efee

More fixes by The Wanderer
author rtognimp
date Wed, 20 Apr 2005 22:07:08 +0000
parents 9ddae5897422
children cce2717344f4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
1 /*
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
2 * NuppelVideo 0.05 file parser
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
3 * for MPlayer
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
4 * by Panagiotis Issaris <takis@lumumba.luc.ac.be>
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
5 *
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
6 * Reworked by alex
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
7 */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
8
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
9 #include <stdio.h>
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
10 #include <stdlib.h>
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
11 #include <unistd.h>
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
12
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
13 #include "config.h"
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
14 #include "mp_msg.h"
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
15 #include "help_mp.h"
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
16 #include "stream.h"
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
17 #include "demuxer.h"
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
18 #include "stheader.h"
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
19 #include "nuppelvideo.h"
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
20
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
21
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
22 struct nuv_signature
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
23 {
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
24 char finfo[12]; /* "NuppelVideo" + \0 */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
25 char version[5]; /* "0.05" + \0 */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
26 };
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
27
4065
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
28 typedef struct _nuv_position_t nuv_position_t;
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
29
4065
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
30 struct _nuv_position_t
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
31 {
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
32 off_t offset;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
33 float time;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
34 int frame;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
35 nuv_position_t* next;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
36 };
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
37
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
38 typedef struct _nuv_info_t
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
39 {
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
40 int current_audio_frame;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
41 int current_video_frame;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
42 nuv_position_t *index_list;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
43 nuv_position_t *current_position;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
44 } nuv_priv_t;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
45
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
46
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
47 /**
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
48 * Seek to a position relative to the current position, indicated in time.
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
49 */
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
50 void demux_seek_nuv ( demuxer_t *demuxer, float rel_seek_secs, int flags )
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
51 {
4065
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
52 #define MAX_TIME 1000000
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
53 nuv_priv_t* priv = demuxer->priv;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
54 struct rtframeheader rtjpeg_frameheader;
7361
c3865710b53d fixed >2GB files demuxing
arpi
parents: 6660
diff changeset
55 off_t orig_pos;
c3865710b53d fixed >2GB files demuxing
arpi
parents: 6660
diff changeset
56 off_t curr_pos;
4065
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
57 float current_time = 0;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
58 float start_time = MAX_TIME;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
59 float target_time = start_time + rel_seek_secs * 1000; /* target_time, start_time are ms, rel_seek_secs s */
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
60
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
61 orig_pos = stream_tell ( demuxer->stream );
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
62
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
63 if ( rel_seek_secs > 0 )
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
64 {
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
65 /* Seeking forward */
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
66
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
67
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
68 while(current_time < target_time )
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
69 {
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
70 if (stream_read ( demuxer->stream, (char*)& rtjpeg_frameheader, sizeof ( rtjpeg_frameheader ) ) < sizeof(rtjpeg_frameheader))
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
71 return; /* EOF */
14896
9ddae5897422 Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents: 7566
diff changeset
72 le2me_rtframeheader(&rtjpeg_frameheader);
4065
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
73
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
74 if ( rtjpeg_frameheader.frametype == 'V' )
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
75 {
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
76 priv->current_position->next = (nuv_position_t*) malloc ( sizeof ( nuv_position_t ) );
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
77 priv->current_position = priv->current_position->next;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
78 priv->current_position->frame = priv->current_video_frame++;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
79 priv->current_position->time = rtjpeg_frameheader.timecode;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
80 priv->current_position->offset = orig_pos;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
81 priv->current_position->next = NULL;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
82
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
83 if ( start_time == MAX_TIME )
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
84 {
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
85 start_time = rtjpeg_frameheader.timecode;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
86 /* Recalculate target time with real start time */
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
87 target_time = start_time + rel_seek_secs*1000;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
88 }
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
89
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
90 current_time = rtjpeg_frameheader.timecode;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
91
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
92 curr_pos = stream_tell ( demuxer->stream );
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
93 stream_seek ( demuxer->stream, curr_pos + rtjpeg_frameheader.packetlength );
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
94
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
95 /* Adjust current sequence pointer */
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
96 }
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
97 else if ( rtjpeg_frameheader.frametype == 'A' )
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
98 {
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
99 if ( start_time == MAX_TIME )
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
100 {
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
101 start_time = rtjpeg_frameheader.timecode;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
102 /* Recalculate target time with real start time */
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
103 target_time = start_time + rel_seek_secs * 1000;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
104 }
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
105 current_time = rtjpeg_frameheader.timecode;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
106
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
107
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
108 curr_pos = stream_tell ( demuxer->stream );
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
109 stream_seek ( demuxer->stream, curr_pos + rtjpeg_frameheader.packetlength );
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
110 }
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
111 }
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
112 }
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
113 else
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
114 {
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
115 /* Seeking backward */
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
116 nuv_position_t* p;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
117 start_time = priv->current_position->time;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
118
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
119 /* Recalculate target time with real start time */
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
120 target_time = start_time + rel_seek_secs * 1000;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
121
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
122
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
123 if(target_time < 0)
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
124 target_time = 0;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
125
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
126 // Search the target time in the index list, get the offset
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
127 // and go to that offset.
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
128 p = priv->index_list;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
129 while ( ( p->next != NULL ) && ( p->time < target_time ) )
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
130 {
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
131 p = p->next;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
132 }
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
133 stream_seek ( demuxer->stream, p->offset );
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
134 priv->current_video_frame = p->frame;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
135 }
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
136 }
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
137
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
138
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
139 int demux_nuv_fill_buffer ( demuxer_t *demuxer )
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
140 {
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
141 struct rtframeheader rtjpeg_frameheader;
7361
c3865710b53d fixed >2GB files demuxing
arpi
parents: 6660
diff changeset
142 off_t orig_pos;
4065
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
143 nuv_priv_t* priv = demuxer->priv;
7566
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
144 int want_audio = (demuxer->audio)&&(demuxer->audio->id!=-2);
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
145
7566
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
146 demuxer->filepos = orig_pos = stream_tell ( demuxer->stream );
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
147 if (stream_read ( demuxer->stream, (char*)& rtjpeg_frameheader, sizeof ( rtjpeg_frameheader ) ) < sizeof(rtjpeg_frameheader))
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
148 return 0; /* EOF */
14896
9ddae5897422 Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents: 7566
diff changeset
149 le2me_rtframeheader(&rtjpeg_frameheader);
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
150
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
151 #if 0
3811
c2792c5b4f6e audio is working
alex
parents: 3801
diff changeset
152 printf("NUV frame: frametype: %c, comptype: %c, packetlength: %d\n",
c2792c5b4f6e audio is working
alex
parents: 3801
diff changeset
153 rtjpeg_frameheader.frametype, rtjpeg_frameheader.comptype,
c2792c5b4f6e audio is working
alex
parents: 3801
diff changeset
154 rtjpeg_frameheader.packetlength);
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
155 #endif
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
156
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
157 /* Skip Seekpoint, Text and Sync for now */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
158 if ((rtjpeg_frameheader.frametype == 'R') ||
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
159 (rtjpeg_frameheader.frametype == 'T') ||
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
160 (rtjpeg_frameheader.frametype == 'S'))
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
161 return 1;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
162
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
163 if (((rtjpeg_frameheader.frametype == 'D') &&
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
164 (rtjpeg_frameheader.comptype == 'R')) ||
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
165 (rtjpeg_frameheader.frametype == 'V'))
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
166 {
4065
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
167 if ( rtjpeg_frameheader.frametype == 'V' )
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
168 {
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
169 priv->current_video_frame++;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
170 priv->current_position->next = (nuv_position_t*) malloc(sizeof(nuv_position_t));
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
171 priv->current_position = priv->current_position->next;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
172 priv->current_position->frame = priv->current_video_frame;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
173 priv->current_position->time = rtjpeg_frameheader.timecode;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
174 priv->current_position->offset = orig_pos;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
175 priv->current_position->next = NULL;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
176 }
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
177 /* put RTjpeg tables, Video info to video buffer */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
178 stream_seek ( demuxer->stream, orig_pos );
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
179 ds_read_packet ( demuxer->video, demuxer->stream, rtjpeg_frameheader.packetlength + 12,
5435
508a4e7df349 10l... int/1000 will be int while we want float, so let's do int*0.001
arpi
parents: 4065
diff changeset
180 rtjpeg_frameheader.timecode*0.001, orig_pos, 0 );
4065
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
181
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
182
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
183 } else
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
184 /* copy PCM only */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
185 if (demuxer->audio && (rtjpeg_frameheader.frametype == 'A') &&
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
186 (rtjpeg_frameheader.comptype == '0'))
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
187 {
4065
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
188 priv->current_audio_frame++;
7566
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
189 if (want_audio) {
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
190 /* put Audio to audio buffer */
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
191 ds_read_packet ( demuxer->audio, demuxer->stream,
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
192 rtjpeg_frameheader.packetlength,
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
193 rtjpeg_frameheader.timecode*0.001,
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
194 orig_pos + 12, 0 );
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
195 } else {
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
196 /* skip audio block */
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
197 stream_seek ( demuxer->stream,
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
198 stream_tell ( demuxer->stream )
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
199 + rtjpeg_frameheader.packetlength );
ab5984ab6af0 - demuxer->audio->id is set to -2 when using 'frameno.avi', so
arpi
parents: 7472
diff changeset
200 }
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
201 }
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
202
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
203 return 1;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
204 }
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
205
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
206
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
207 demuxer_t* demux_open_nuv ( demuxer_t* demuxer )
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
208 {
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
209 sh_video_t *sh_video = NULL;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
210 sh_audio_t *sh_audio = NULL;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
211 struct rtfileheader rtjpeg_fileheader;
4065
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
212 nuv_priv_t* priv = (nuv_priv_t*) malloc ( sizeof ( nuv_priv_t) );
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
213 demuxer->priv = priv;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
214 priv->current_audio_frame = 0;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
215 priv->current_video_frame = 0;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
216
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
217
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
218 /* Go to the start */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
219 stream_reset(demuxer->stream);
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
220 stream_seek(demuxer->stream, 0);
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
221
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
222 stream_read ( demuxer->stream, (char*)& rtjpeg_fileheader, sizeof(rtjpeg_fileheader) );
14896
9ddae5897422 Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents: 7566
diff changeset
223 le2me_rtfileheader(&rtjpeg_fileheader);
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
224
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
225 /* no video */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
226 if (rtjpeg_fileheader.videoblocks == 0)
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
227 {
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
228 printf("No video blocks in file\n");
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
229 return NULL;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
230 }
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
231
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
232 /* Create a new video stream header */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
233 sh_video = new_sh_video ( demuxer, 0 );
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
234
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
235 /* Make sure the demuxer knows about the new video stream header
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
236 * (even though new_sh_video() ought to take care of it)
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
237 */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
238 demuxer->video->sh = sh_video;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
239
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
240 /* Make sure that the video demuxer stream header knows about its
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
241 * parent video demuxer stream (this is getting wacky), or else
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
242 * video_read_properties() will choke
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
243 */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
244 sh_video->ds = demuxer->video;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
245
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
246 /* Custom fourcc for internal MPlayer use */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
247 sh_video->format = mmioFOURCC('N', 'U', 'V', '1');
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
248
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
249 sh_video->disp_w = rtjpeg_fileheader.width;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
250 sh_video->disp_h = rtjpeg_fileheader.height;
3811
c2792c5b4f6e audio is working
alex
parents: 3801
diff changeset
251
3958
5e61815deced last minute aspect patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents: 3811
diff changeset
252 /* NuppelVideo uses pixel aspect ratio
5e61815deced last minute aspect patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents: 3811
diff changeset
253 here display aspect ratio is used.
5e61815deced last minute aspect patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents: 3811
diff changeset
254 For the moment NuppelVideo only supports 1.0 thus
5e61815deced last minute aspect patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents: 3811
diff changeset
255 1.33 == 4:3 aspect ratio.
5e61815deced last minute aspect patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents: 3811
diff changeset
256 */
5e61815deced last minute aspect patch by Panagiotis Issaris <takis@lumumba.luc.ac.be>
arpi
parents: 3811
diff changeset
257 if(rtjpeg_fileheader.aspect == 1.0)
6660
f8d1c9ab777a aspect prescaling fix by magnus.pfeffer@epost.de
arpi
parents: 5810
diff changeset
258 sh_video->aspect = (float) 4.0f/3.0f;
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
259
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
260 /* Get the FPS */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
261 sh_video->fps = rtjpeg_fileheader.fps;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
262 sh_video->frametime = 1 / sh_video->fps;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
263
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
264 if (rtjpeg_fileheader.audioblocks != 0)
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
265 {
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
266 sh_audio = new_sh_audio(demuxer, 0);
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
267 demuxer->audio->sh = sh_audio;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
268 sh_audio->ds = demuxer->audio;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
269 sh_audio->format = 0x1;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
270 sh_audio->channels = 2;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
271 sh_audio->samplerate = 44100;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
272
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
273 sh_audio->wf = malloc(sizeof(WAVEFORMATEX));
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
274 memset(sh_audio->wf, 0, sizeof(WAVEFORMATEX));
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
275 sh_audio->wf->wFormatTag = sh_audio->format;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
276 sh_audio->wf->nChannels = sh_audio->channels;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
277 sh_audio->wf->wBitsPerSample = 16;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
278 sh_audio->wf->nSamplesPerSec = sh_audio->samplerate;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
279 sh_audio->wf->nAvgBytesPerSec = sh_audio->wf->nChannels*
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
280 sh_audio->wf->wBitsPerSample*sh_audio->wf->nSamplesPerSec/8;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
281 sh_audio->wf->nBlockAlign = sh_audio->channels * 2;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
282 sh_audio->wf->cbSize = 0;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
283 }
4065
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
284
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
285 priv->index_list = (nuv_position_t*) malloc(sizeof(nuv_position_t));
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
286 priv->index_list->frame = 0;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
287 priv->index_list->time = 0;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
288 priv->index_list->offset = stream_tell ( demuxer->stream );
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
289 priv->index_list->next = NULL;
763a0e7e0521 seek patch by Panagoitis Issaris
alex
parents: 3960
diff changeset
290 priv->current_position = priv->index_list;
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
291
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
292 return demuxer;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
293 }
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
294
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
295 int nuv_check_file ( demuxer_t* demuxer )
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
296 {
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
297 struct nuv_signature ns;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
298
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
299 /* Store original position */
7361
c3865710b53d fixed >2GB files demuxing
arpi
parents: 6660
diff changeset
300 off_t orig_pos = stream_tell(demuxer->stream);
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
301
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
302 mp_msg ( MSGT_DEMUX, MSGL_V, "Checking for NuppelVideo\n" );
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
303
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
304 stream_read(demuxer->stream,(char*)&ns,sizeof(ns));
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
305
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
306 if ( strncmp ( ns.finfo, "NuppelVideo", 12 ) )
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
307 return 0; /* Not a NuppelVideo file */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
308 if ( strncmp ( ns.version, "0.05", 5 ) )
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
309 return 0; /* Wrong version NuppelVideo file */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
310
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
311 /* Return to original position */
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
312 stream_seek ( demuxer->stream, orig_pos );
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
313 return 1;
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents:
diff changeset
314 }
5810
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
315
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
316 void demux_close_nuv(demuxer_t* demuxer) {
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
317 nuv_priv_t* priv = demuxer->priv;
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
318 nuv_position_t* pos;
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
319 if(!priv)
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
320 return;
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
321 for(pos = priv->index_list ; pos != NULL ; ) {
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
322 nuv_position_t* p = pos;
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
323 pos = pos->next;
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
324 free(p);
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
325 }
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
326 free(priv);
8a357300d0ec Added demuxer uninit
albeu
parents: 5435
diff changeset
327 }