Compare commits
5 Commits
97dd6c691b
...
51fa25809d
| Author | SHA1 | Date | |
|---|---|---|---|
|
51fa25809d
|
|||
|
de6c3a4e7f
|
|||
|
2ed4c7b6d8
|
|||
|
4afaf287bb
|
|||
|
5825c67f30
|
12
.gitmodules
vendored
Normal file
12
.gitmodules
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
[submodule "ffmpeg"]
|
||||
path = ffmpeg
|
||||
url = https://git.ffmpeg.org/ffmpeg.git
|
||||
branch = release/8.0
|
||||
[submodule "codecs/x264"]
|
||||
path = codecs/x264
|
||||
url = https://code.videolan.org/videolan/x264.git
|
||||
branch = stable
|
||||
[submodule "codecs/x265"]
|
||||
path = codecs/x265
|
||||
url = https://bitbucket.org/multicoreware/x265_git.git
|
||||
branch = Release_4.1
|
||||
1
codecs/x264
Submodule
1
codecs/x264
Submodule
Submodule codecs/x264 added at b35605ace3
1
codecs/x265
Submodule
1
codecs/x265
Submodule
Submodule codecs/x265 added at 32e25ffcf8
1
ffmpeg
Submodule
1
ffmpeg
Submodule
Submodule ffmpeg added at d8605a6b55
@ -38,7 +38,13 @@ class Decoder:
|
||||
if self._context:
|
||||
libav.codec_free_context(self._context)
|
||||
|
||||
def _receive(self):
|
||||
def decode(self, packet):
|
||||
if not self._context:
|
||||
return None
|
||||
errcode = libav.codec_send_packet(self._context, packet)
|
||||
if errcode < 0:
|
||||
errstring = libav.strerror(errcode)
|
||||
raise Exception(f"Failed to send packet: {errstring}")
|
||||
frames = []
|
||||
while True:
|
||||
frame = Frame()
|
||||
@ -50,12 +56,3 @@ class Decoder:
|
||||
raise Exception(f"Failed to receive frame: {errstring}")
|
||||
frames.append(frame)
|
||||
return frames
|
||||
|
||||
def decode(self, packet):
|
||||
if not self._context:
|
||||
return None
|
||||
errcode = libav.codec_send_packet(self._context, packet)
|
||||
if errcode < 0:
|
||||
errstring = libav.strerror(errcode)
|
||||
raise Exception(f"Failed to send packet: {errstring}")
|
||||
return self._receive()
|
||||
|
||||
31
mp4/libav.py
31
mp4/libav.py
@ -40,8 +40,32 @@ AVMEDIA_TYPE_DATA = 2
|
||||
AVMEDIA_TYPE_SUBTITLE = 3
|
||||
AVMEDIA_TYPE_ATTACHMENT = 4
|
||||
|
||||
AV_NUM_DATA_POINTERS = 8
|
||||
|
||||
c_uint8_p = ctypes.POINTER(ctypes.c_uint8)
|
||||
c_uint8_pp = ctypes.POINTER(c_uint8_p)
|
||||
|
||||
class AVRational(ctypes.Structure):
|
||||
_fields_ = [
|
||||
("num", ctypes.c_int),
|
||||
("den", ctypes.c_int)]
|
||||
|
||||
class AVFrame(ctypes.Structure):
|
||||
pass
|
||||
_fields_ = [
|
||||
("data", c_uint8_p * AV_NUM_DATA_POINTERS),
|
||||
("linesize", ctypes.c_int * AV_NUM_DATA_POINTERS),
|
||||
("extended_data", c_uint8_pp),
|
||||
("width", ctypes.c_int),
|
||||
("height", ctypes.c_int),
|
||||
("nb_samples", ctypes.c_int),
|
||||
("format", ctypes.c_int),
|
||||
("key_frame", ctypes.c_int),
|
||||
("pict_type", ctypes.c_int),
|
||||
("sample_aspect_ratio", AVRational),
|
||||
("pts", ctypes.c_int64),
|
||||
("pkt_dts", ctypes.c_int64),
|
||||
("time_base", AVRational)]
|
||||
# ...
|
||||
|
||||
AVFrame_p = ctypes.POINTER(AVFrame)
|
||||
AVFrame_pp = ctypes.POINTER(AVFrame_p)
|
||||
@ -51,11 +75,6 @@ class AVCodecParameters(ctypes.Structure):
|
||||
|
||||
AVCodecParameters_p = ctypes.POINTER(AVCodecParameters)
|
||||
|
||||
class AVRational(ctypes.Structure):
|
||||
_fields_ = [
|
||||
("num", ctypes.c_int),
|
||||
("den", ctypes.c_int)]
|
||||
|
||||
class AVStream(ctypes.Structure):
|
||||
_fields_ = [
|
||||
("av_class", ctypes.c_void_p),
|
||||
|
||||
Reference in New Issue
Block a user