浏览代码

Z991239-6387 #comment: 摄像头采集日志优化

80274480 2 月之前
父节点
当前提交
23fc8322fa

+ 5 - 5
Module/mod_mediacontroller/capture.cpp

@@ -1215,14 +1215,14 @@ static void cap_on_original_frame(void* user_data, video_frame* vframe)
 		size_t udatalen = vframe->linesize[0] * vframe->height;
 		ssize_t bytes_written = write(video_cap->virtual_device_fd, vframe->data[0], udatalen);
 		if (bytes_written == -1) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("write video to virtual camera error.");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("write video to virtual camera(fd=%d) error.", video_cap->virtual_device_fd);
 		}
 		else if (bytes_written < udatalen) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("partially written: %zd/%zu bytes.", bytes_written, udatalen);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("partially written: %zd/%zu bytes to virtual camera(fd=%d).", bytes_written, udatalen, video_cap->virtual_device_fd);
+		}
+		else {
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("successfully wrote %zd bytes to virtual camera(fd=%d).", bytes_written, video_cap->virtual_device_fd);
 		}
-		//else {
-		//	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("successfully wrote %zd bytes.", bytes_written);
-		//}
 	}
 #endif
 }

+ 40 - 1
Other/unix/libvideocapture/linux/videocapture_linux.cpp

@@ -28,6 +28,14 @@ extern "C" {
 }
 #endif
 
+#define BUFFER_DEBUG_FMT_STR                                      \
+	"buffer#%u @ %p type=%u bytesused=%u length=%u flags=%x " \
+	"field=%u timestamp= %lld.%06lld sequence=%u"
+#define BUFFER_DEBUG_FMT_ARGS(buf)                                         \
+	(buf)->index, (buf), (buf)->type, (buf)->bytesused, (buf)->length, \
+		(buf)->flags, (buf)->field,                                \
+		(long long)(buf)->timestamp.tv_sec,                        \
+		(long long)(buf)->timestamp.tv_usec, (buf)->sequence
 
 static const int kBufferAlignment = 64;
 
@@ -564,6 +572,10 @@ static void* VideoCaptureProcess(void *arg)
 				}
 			}
 			
+			if (pVideoCapture) {
+				pVideoCapture->CapLog(VIDEOCAP_LOG_DEBUG, "deviceid(%d), DQBUF(CAPTURE, index=%u) -> " BUFFER_DEBUG_FMT_STR, pVideoCapture->GetCaptureVideoId(), buf.index, BUFFER_DEBUG_FMT_ARGS(&buf));
+			}
+			
 			VideoCaptureCapability frameInfo;
 			frameInfo.width = pVideoCapture->GetCapture_Width();
 			frameInfo.height = pVideoCapture->GetCapture_Height();
@@ -578,6 +590,11 @@ static void* VideoCaptureProcess(void *arg)
 					pVideoCapture->CapLog(VIDEOCAP_LOG_INFO, "Failed to enqueue capture buffer");
 				}
 			}
+			else {
+				if (pVideoCapture) {
+					pVideoCapture->CapLog(VIDEOCAP_LOG_DEBUG, "deviceid(%d), QBUF(CAPTURE, index=%u) -> " BUFFER_DEBUG_FMT_STR "\n", pVideoCapture->GetCaptureVideoId(), buf.index, BUFFER_DEBUG_FMT_ARGS(&buf));
+				}
+			}
 		}
 	}
 
@@ -776,6 +793,9 @@ int VideoCaptureImpl::StartVideoCapture()
 		close(m_deviceFd);
 		return -1;
 	}
+	else {
+		CapLog(VIDEOCAP_LOG_DEBUG, "succeed to turn on stream.");
+	}
 
 	m_bCaptureStarted = true;
 
@@ -802,6 +822,9 @@ bool VideoCaptureImpl::AllocateVideoBuffers()
 		CapLog(VIDEOCAP_LOG_ERROR, "Could not get buffers from device for %s.", strerror(errno));
 		return false;
 	}
+	else {
+		CapLog(VIDEOCAP_LOG_DEBUG, "req buffers count is %d.", rbuffer.count);
+	}
 
 	if (rbuffer.count > kNoOfV4L2Bufffers) {
 		rbuffer.count = kNoOfV4L2Bufffers;
@@ -824,12 +847,16 @@ bool VideoCaptureImpl::AllocateVideoBuffers()
 		if (ioctl(m_deviceFd, VIDIOC_QUERYBUF, &buffer) < 0){
 			return false;
 		}
+		else {
+			CapLog(VIDEOCAP_LOG_DEBUG, "QUERYBUF(CAPTURE, index=%u) -> " BUFFER_DEBUG_FMT_STR, buffer.index, BUFFER_DEBUG_FMT_ARGS(&buffer));
+		}
 
 		m_pool[i].start = mmap(NULL, buffer.length, PROT_READ | PROT_WRITE, MAP_SHARED, m_deviceFd, buffer.m.offset);
 
 		if (MAP_FAILED == m_pool[i].start){
-			for (unsigned int j = 0; j < i; j++)
+			for (unsigned int j = 0; j < i; j++) {
 				munmap(m_pool[j].start, m_pool[j].length);
+			}
 			return false;
 		}
 
@@ -838,6 +865,9 @@ bool VideoCaptureImpl::AllocateVideoBuffers()
 		if (ioctl(m_deviceFd, VIDIOC_QBUF, &buffer) < 0){
 			return false;
 		}
+		else {
+			CapLog(VIDEOCAP_LOG_DEBUG, "%s:%d deviceid(%d), QBUF(CAPTURE, index=%u) -> " BUFFER_DEBUG_FMT_STR, __FUNCTION__, __LINE__, m_deviceId, buffer.index, BUFFER_DEBUG_FMT_ARGS(&buffer));
+		}
 	}
 	return true;
 }
@@ -857,6 +887,9 @@ bool VideoCaptureImpl::DeAllocateVideoBuffers()
 	if (ioctl(m_deviceFd, VIDIOC_STREAMOFF, &type) < 0){
 		CapLog(VIDEOCAP_LOG_ERROR, "VIDIOC_STREAMOFF error. error no: %d", errno);
 	}
+	else {
+		CapLog(VIDEOCAP_LOG_DEBUG, "succeed to turn off stream.");
+	}
 
 	return true;
 }
@@ -918,6 +951,12 @@ int VideoCaptureImpl::GetCaptureVideoFd()
 }
 
 
+int VideoCaptureImpl::GetCaptureVideoId()
+{
+	return m_deviceId;
+}
+
+
 VideoType VideoCaptureImpl::GetCaptureVideoType()
 {
 	return m_captureVideoType;

+ 1 - 0
Other/unix/libvideocapture/linux/videocapture_linux.h

@@ -62,6 +62,7 @@ public:
 	bool GetCamBrightnessInfo();
 	bool VideoCaptureStarted();
 	int GetCaptureVideoFd();
+	int GetCaptureVideoId();
 	bool AllocateVideoBuffers();
 	bool DeAllocateVideoBuffers();
 

+ 16 - 16
Other/unix/virtualcam/v4l2virtualcam.c

@@ -888,21 +888,21 @@ static int vidioc_querycap(struct file *file, void *fh,
 
 	strscpy(cap->driver, "v4l2virtualcam", sizeof(cap->driver));
 	snprintf(cap->card, sizeof(cap->card), "%s", dev->card_label);
-	snprintf(cap->bus_info, sizeof(cap->bus_info),
-		 "platform:v4l2virtualcam-%03d", device_nr);
-
-	//if (dev->announce_all_caps) {
-	//	capabilities |= V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OUTPUT;
-	//} else {
-	//	if (opener->io_method == V4L2L_IO_TIMEOUT ||
-	//	    (has_output_token(dev->stream_tokens) &&
-	//	     !dev->keep_format)) {
-	//		capabilities |= V4L2_CAP_VIDEO_OUTPUT;
-	//	} else
-	//		capabilities |= V4L2_CAP_VIDEO_CAPTURE;
-	//}
-
-	capabilities |= V4L2_CAP_VIDEO_CAPTURE;
+	snprintf(cap->bus_info, sizeof(cap->bus_info), "platform:v4l2virtualcam-%03d", device_nr);
+
+	if (dev->announce_all_caps) {
+		capabilities |= V4L2_CAP_VIDEO_CAPTURE;
+	} 
+	else {
+		if (opener->io_method == V4L2L_IO_TIMEOUT ||
+		    (has_output_token(dev->stream_tokens) &&
+		     !dev->keep_format)) {
+			capabilities |= V4L2_CAP_VIDEO_CAPTURE;
+		} 
+		else {
+			capabilities |= V4L2_CAP_VIDEO_CAPTURE;
+		}
+	}
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0)
 	dev->vdev->device_caps =
@@ -1548,7 +1548,7 @@ static int vidioc_s_input(struct file *file, void *fh, unsigned int index)
 	 (index) < (opener)->buffer_count)
 #define BUFFER_DEBUG_FMT_STR                                      \
 	"buffer#%u @ %p type=%u bytesused=%u length=%u flags=%x " \
-	"field=%u timestamp= %lld.%06lldsequence=%u\n"
+	"field=%u timestamp= %lld.%06lld sequence=%u\n"
 #define BUFFER_DEBUG_FMT_ARGS(buf)                                         \
 	(buf)->index, (buf), (buf)->type, (buf)->bytesused, (buf)->length, \
 		(buf)->flags, (buf)->field,                                \