Если я сделаю снимок с моей веб-камеры, либо щелкнув правой кнопкой мыши в xawtv
или через streamer -o snapshot.jpeg
, изображение будет искажено. Простейший способ объяснить это с помощью примеров изображений:
Две нижние "рамки" должны поменяться местами. Если я просто запускаю xawtv
или vlc
для просмотра прямой трансляции с веб-камеры, это искажение не появляется, и видео просто в порядке.
Я понятия не имею, как это происходит. Что может быть не так? С чего мне начать устранение неполадок?
Обновление: оказывается, что верхняя "рамка" картинки не с того же момента времени, что и остальные. Я добавил вторую картинку, чтобы показать это.
Отладочная информация
xawtv - это xawtv-3.101, работающий в Linux/x86_64 (3.6.8-1-ARCH). Изображение выше генерируется с помощью streamer -d -o test.jpeg
, который генерирует следующие выходные данные отладки:
checking writer files [multiple image files] ...
video name=ppm ext=ppm: ext mismatch [need jpeg]
video name=pgm ext=pgm: ext mismatch [need jpeg]
video name=jpeg ext=jpeg: OK
files / video: JPEG (JFIF) / audio: none
vid-open: trying: libv4l...
Using libv4l plugin
v4l2: device caps: 2, required 0
v4l2: open
v4l2: device info:
uvcvideo 3.6.8 / Video WebCam @ usb-0000:00:1d.7-5
vid-open: ok: libv4l
movie_init_writer start
setformat: JPEG (JFIF) (320x240): failed
v4l2: new capture params (320x240, YU12, 115200 byte)
setformat: 12 bit YUV 4:2:0 (planar) (320x240): ok
v4l2: new capture params (320x240, YU12, 115200 byte)
writer_video_thread start [pid=31119]
movie_init_writer end (h=0x1808bc0)
convert_thread start [pid=31119]
movie_writer_start
convert-in : 320x240 12 bit YUV 4:2:0 (planar) (size=115200)
convert-out: 320x240 JPEG (JFIF) (size=230400)
v4l2: buf 0: video-cap 0xabcdef00+16777216, used 0
v4l2: buf 1: video-cap 0xabcdef01+16777216, used 0
v4l2: buf 2: video-cap 0xabcdef02+16777216, used 0
v4l2: buf 3: video-cap 0xabcdef03+16777216, used 0
v4l2: buf 4: video-cap 0xabcdef04+16777216, used 0
v4l2: buf 5: video-cap 0xabcdef05+16777216, used 0
v4l2: buf 6: video-cap 0xabcdef06+16777216, used 0
v4l2: buf 7: video-cap 0xabcdef07+16777216, used 0
v4l2: buf 8: video-cap 0xabcdef08+16777216, used 0
v4l2: buf 9: video-cap 0xabcdef09+16777216, used 0
v4l2: buf 10: video-cap 0xabcdef0a+16777216, used 0
v4l2: buf 11: video-cap 0xabcdef0b+16777216, used 0
v4l2: buf 12: video-cap 0xabcdef0c+16777216, used 0
v4l2: buf 13: video-cap 0xabcdef0d+16777216, used 0
v4l2: buf 14: video-cap 0xabcdef0e+16777216, used 0
v4l2: buf 15: video-cap 0xabcdef0f+16777216, used 0
v4l2: start ts=47580553178000
rec 0:00.00 - a/r: -0.00s [0], a/v: -0.00s [0]
movie_writer_stop
fifo conv: EOF 1/1
fifo video: EOF 1/1
convert_thread done [pid=31119]
writer_video_thread done
v4l2: buf 0: video-cap 0xabcdef00+16777216, used 115200
v4l2: buf 1: video-cap 0xabcdef01+16777216, used 0
v4l2: buf 2: video-cap 0xabcdef02+16777216, used 0
v4l2: buf 3: video-cap 0xabcdef03+16777216, used 0
v4l2: buf 4: video-cap 0xabcdef04+16777216, used 0
v4l2: buf 5: video-cap 0xabcdef05+16777216, used 0
v4l2: buf 6: video-cap 0xabcdef06+16777216, used 0
v4l2: buf 7: video-cap 0xabcdef07+16777216, used 0
v4l2: buf 8: video-cap 0xabcdef08+16777216, used 0
v4l2: buf 9: video-cap 0xabcdef09+16777216, used 0
v4l2: buf 10: video-cap 0xabcdef0a+16777216, used 0
v4l2: buf 11: video-cap 0xabcdef0b+16777216, used 0
v4l2: buf 12: video-cap 0xabcdef0c+16777216, used 0
v4l2: buf 13: video-cap 0xabcdef0d+16777216, used 0
v4l2: buf 14: video-cap 0xabcdef0e+16777216, used 0
v4l2: buf 15: video-cap 0xabcdef0f+16777216, used 0
fifo max fill: audio 0/0, video 1/16, convert 1/16
v4l2: close