Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 3 additions & 8 deletions picamera2/encoders/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,15 @@

import videodev2

from picamera2.platform import Platform, get_platform

from .encoder import Encoder, Quality
from .jpeg_encoder import JpegEncoder
from .libav_h264_encoder import LibavH264Encoder
from .libav_mjpeg_encoder import LibavMjpegEncoder
from .multi_encoder import MultiEncoder

_hw_encoder_available = False
try:
with open('/dev/video11', 'rb', buffering=0) as fd:
caps = videodev2.v4l2_capability()
fcntl.ioctl(fd, videodev2.VIDIOC_QUERYCAP, caps)
_hw_encoder_available = (caps.card.decode('utf-8') == "bcm2835-codec-encode")
except Exception:
pass
_hw_encoder_available = get_platform() == Platform.VC4

if _hw_encoder_available:
from .h264_encoder import H264Encoder
Expand Down
8 changes: 4 additions & 4 deletions picamera2/encoders/v4l2_encoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import select
import threading

from vidoedev2 import *
from videodev2 import *

from picamera2.encoders.encoder import Encoder

Expand Down Expand Up @@ -254,7 +254,7 @@ def thread_poll(self, buf_available):
b = self.bufs[buf.index][0].read(buf.m.planes[0].bytesused)
self.bufs[buf.index][0].seek(0)
if self._check_for_picture(b):
self.outputframe(b, keyframe, (buf.timestamp.secs * 1000000) + buf.timestamp.usecs)
self.outputframe(b, keyframe, (buf.timestamp.tv_sec * 1000000) + buf.timestamp.tv_usec)

# Requeue encoded buffer
buf = v4l2_buffer()
Expand Down Expand Up @@ -299,8 +299,8 @@ def _encode(self, stream, request):
buf.field = V4L2_FIELD_NONE
buf.memory = V4L2_MEMORY_DMABUF
buf.length = 1
buf.timestamp.secs = timestamp_us // 1000000
buf.timestamp.usecs = timestamp_us % 1000000
buf.timestamp.tv_sec = timestamp_us // 1000000
buf.timestamp.tv_usec = timestamp_us % 1000000
buf.m.planes = planes
buf.m.planes[0].m.fd = fd
buf.m.planes[0].bytesused = cfg.frame_size
Expand Down
15 changes: 15 additions & 0 deletions tests/encoder_import.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from picamera2 import Picamera2
from picamera2.encoders import H264Encoder
from picamera2.platform import Platform

encoder = H264Encoder(bitrate=1000000)
encoder_name = encoder.__class__.__name__
platform = Picamera2.platform

if platform == Platform.VC4:
error = encoder_name != "H264Encoder"
elif platform == Platform.PISP:
error = encoder_name != "LibavH264Encoder"

if error:
print("ERROR: Unexpected encoder, got", encoder_name, "for platform", platform)
1 change: 1 addition & 0 deletions tests/test_list.txt
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ tests/display_transform_null.py
tests/display_transform_qt.py
tests/easy_video2.py
tests/egl_leak.py
tests/encoder_import.py
tests/encoder_start_stop.py
tests/ffmpeg_abort.py
tests/grey_world.py
Expand Down