diff --git a/.travis.yml b/.travis.yml index 7c99148b21a5de221d7f119403a29ae7720e99e8..93243027c4894b674d28f026688dc0b51367f021 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,7 +44,7 @@ matrix: # Libav. - python: "2.7" - env: LIBAV=12.0 + env: LIBAV=12 os: linux # Older Pythons. diff --git a/av/audio/fifo.pyx b/av/audio/fifo.pyx index bff8982f02a6be77e722cf111cd4f80b2181539a..abc63f80ed70e5851bf7e5fc841ff5a500b5740d 100644 --- a/av/audio/fifo.pyx +++ b/av/audio/fifo.pyx @@ -85,6 +85,9 @@ cdef class AudioFifo: if not partial and self.samples < nb_samples: return + if partial: + nb_samples = min(self.samples, nb_samples) + cdef int ret cdef int linesize cdef int sample_size diff --git a/av/packet.pyx b/av/packet.pyx index ad9e4d88e4b112bc8d5824ab2c154e2677e3850b..fd91edb3926d831887f0dbd7069fa3b618852a1c 100644 --- a/av/packet.pyx +++ b/av/packet.pyx @@ -1,28 +1,47 @@ cimport libav as lib from av.utils cimport avrational_to_faction +from av.utils cimport err_check +from av.bytesource cimport ByteSource, bytesource +cdef class Packet(Buffer): -cdef class Packet(object): - """A packet of encoded data within a :class:`~av.format.Stream`. This may, or may not include a complete object within a stream. :meth:`decode` must be called to extract encoded data. """ - def __init__(self): + def __cinit__(self): with nogil: lib.av_init_packet(&self.struct) self.struct.data = NULL self.struct.size = 0 + def __init__(self, source=None): + cdef size_t size = 0 + cdef ByteSource src = None + + if not source: + return + elif isinstance(source, int): + size = source + else: + src = bytesource(source) + size = src.length + + if size: + err_check(lib.av_new_packet(&self.struct, size)) + + if src: + self.update_buffer(source) + def __dealloc__(self): with nogil: lib.av_free_packet(&self.struct) def __repr__(self): return '<av.%s of #%d, dts=%s, pts=%s at 0x%x>' % ( self.__class__.__name__, - self.stream.index, + self.stream.index if self.stream else 0, self.dts, self.pts, id(self), diff --git a/include/libavcodec/avcodec.pxd b/include/libavcodec/avcodec.pxd index 5cefc5eaa6d217bcf2719b4ca97e309e8d2efe7b..c364279a3fb77ba3c61d7fd0d557699a8931d45d 100644 --- a/include/libavcodec/avcodec.pxd +++ b/include/libavcodec/avcodec.pxd @@ -294,6 +294,7 @@ cdef extern from "libavcodec/avcodec.pyav.h" nogil: cdef void av_free_packet(AVPacket*) cdef void av_init_packet(AVPacket*) cdef void av_packet_unref(AVPacket *pkt) + cdef int av_new_packet(AVPacket*, int) cdef int av_copy_packet(AVPacket *dst, AVPacket *src) cdef int av_dup_packet(AVPacket *pkt)