Skip to content

Commit b20db65

Browse files
lgeigerWyattBlue
andcommitted
Use AVPacket directly
Co-authored-by: WyattBlue <wyattblue@auto-editor.com>
1 parent 6e91c93 commit b20db65

1 file changed

Lines changed: 13 additions & 7 deletions

File tree

av/container/input.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)