@@ -153,7 +153,7 @@ def demux(self, *args, **kwargs):
153153
154154 i : cython .uint
155155 packet : Packet
156- read_packet : Packet
156+ read_packet : cython . pointer [ lib . AVPacket ]
157157 ret : cython .int
158158
159159 self .set_timeout (self .read_timeout )
@@ -167,30 +167,34 @@ def demux(self, *args, **kwargs):
167167 include_stream [i ] = True
168168
169169 # Pre-allocate a AVPacket that is reused as the read buffer.
170- read_packet = Packet ()
170+ with cython .nogil :
171+ read_packet = lib .av_packet_alloc ()
172+ if read_packet == cython .NULL :
173+ raise MemoryError ("Could not allocate packet" )
174+
171175 while True :
172176 # Reset the read buffer
173177 with cython .nogil :
174- lib .av_packet_unref (read_packet . ptr )
178+ lib .av_packet_unref (read_packet )
175179 try :
176180 self .start_timeout ()
177181 with cython .nogil :
178- ret = lib .av_read_frame (self .ptr , read_packet . ptr )
182+ ret = lib .av_read_frame (self .ptr , read_packet )
179183 self .err_check (ret )
180184 except EOFError :
181185 break
182186
183- if include_stream [read_packet .ptr . stream_index ]:
187+ if include_stream [read_packet .stream_index ]:
184188 # If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams
185189 # may also appear in av_read_frame().
186190 # http://ffmpeg.org/doxygen/trunk/structAVFormatContext.html
187191 # TODO: find better way to handle this
188- if read_packet .ptr . stream_index < len (self .streams ):
192+ if read_packet .stream_index < len (self .streams ):
189193 # Move the encoded data out of the read buffer into a
190194 # fresh Packet for the caller.
191195 packet = Packet ()
192196 with cython .nogil :
193- lib .av_packet_move_ref (packet .ptr , read_packet . ptr )
197+ lib .av_packet_move_ref (packet .ptr , read_packet )
194198 packet ._stream = self .streams [packet .ptr .stream_index ]
195199 # Keep track of this so that remuxing is easier.
196200 packet .ptr .time_base = packet ._stream .ptr .time_base
@@ -207,6 +211,8 @@ def demux(self, *args, **kwargs):
207211 finally :
208212 self .set_timeout (None )
209213 free (include_stream )
214+ if read_packet != cython .NULL :
215+ lib .av_packet_free (cython .address (read_packet ))
210216
211217 def decode (self , * args , ** kwargs ):
212218 """decode(streams=None, video=None, audio=None, subtitles=None, data=None)
0 commit comments