gstreamer创建管道如何使得输出分辨率自适应显示器分辨率?
在nvidia jetson nano上使用csi相机时,我创建了一条gstreamer管道:
std::string gstreamer_pipeline (int capture_width, int capture_height, int display_width, int display_height, int framerate, int flip_method)
{
return "nvarguscamerasrc sensor-id=0 ! video/x-raw(memory:NVMM), width=(int)" + std::to_string(capture_width) + ", height=(int)" + std::to_string(capture_height) + ", format=(string)NV12, framerate=(fraction)" + std::to_string(framerate) +"/1 ! nvvidconv flip-method=" + std::to_string(flip_method) + " ! video/x-raw, width=(int)" + std::to_string(display_width) + ", height=(int)" +std::to_string(display_height) + ", format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink";
}
这里只能通过提前设置输出分辨率大小,或者在屏幕上的显示和输入的分辨率大小一致,请问有什么创建管道的方式使得无论在什么分辨率的显示器上都能全屏显示么?
操作1:从驱动读取屏幕大小
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <math.h>
#include <sys/ioctl.h>
int w,h ;
int main(int argc , char *argv[]){
int fd;
struct fb_var_screeninfo fb_var;
fd = open("/dev/fb0",O_RDWR);
ioctl (fd,FBIOGET_VSCREENINFO,&fb_var);
w = fb_var.xres;
h = fb_var.yres;
return 0;
}
操作2:通过xcb库读取屏幕大小
#include <stdio.h>
#include <xcb/xcb.h>
int main (){
/* Open the connection to the X server. Use the DISPLAY environment variable */
int i, screenNum;
xcb_connection_t connection = xcb_connect (NULL, &screenNum);
/ Get the screen whose number is screenNum */
const xcb_setup_t *setup = xcb_get_setup (connection);
xcb_screen_iterator_t iter = xcb_setup_roots_iterator (setup);
// we want the screen at index screenNum of the iterator
for (i = 0; i < screenNum; ++i) {
xcb_screen_next (&iter);
}
xcb_screen_t *screen = iter.data;
/* report */
printf ("\n");
printf ("Informations of screen %ld:\n", screen->root);
printf (" width.........: %d\n", screen->width_in_pixels);
printf (" height........: %d\n", screen->height_in_pixels);
printf (" white pixel...: %ld\n", screen->white_pixel);
printf (" black pixel...: %ld\n", screen->black_pixel);
printf ("\n");
return 0;
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。