mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	v4l2: fix format enum with unsupported framerate
Actually count the number of frame fractions we add. If we added 0, we don't have any supported framerate that intersects with the filter and we try the next frame size. See #1793
This commit is contained in:
		
							parent
							
								
									7479ff586c
								
							
						
					
					
						commit
						14b265f646
					
				
					 1 changed files with 6 additions and 2 deletions
				
			
		| 
						 | 
					@ -815,6 +815,7 @@ spa_v4l2_enum_format(struct impl *this, int seq,
 | 
				
			||||||
						 port->frmival.discrete.denominator,
 | 
											 port->frmival.discrete.denominator,
 | 
				
			||||||
						 port->frmival.discrete.numerator);
 | 
											 port->frmival.discrete.numerator);
 | 
				
			||||||
			port->frmival.index++;
 | 
								port->frmival.index++;
 | 
				
			||||||
 | 
								n_fractions++;
 | 
				
			||||||
		} else if (port->frmival.type == V4L2_FRMIVAL_TYPE_CONTINUOUS ||
 | 
							} else if (port->frmival.type == V4L2_FRMIVAL_TYPE_CONTINUOUS ||
 | 
				
			||||||
			   port->frmival.type == V4L2_FRMIVAL_TYPE_STEPWISE) {
 | 
								   port->frmival.type == V4L2_FRMIVAL_TYPE_STEPWISE) {
 | 
				
			||||||
			if (n_fractions == 0)
 | 
								if (n_fractions == 0)
 | 
				
			||||||
| 
						 | 
					@ -828,20 +829,23 @@ spa_v4l2_enum_format(struct impl *this, int seq,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (port->frmival.type == V4L2_FRMIVAL_TYPE_CONTINUOUS) {
 | 
								if (port->frmival.type == V4L2_FRMIVAL_TYPE_CONTINUOUS) {
 | 
				
			||||||
				choice->body.type = SPA_CHOICE_Range;
 | 
									choice->body.type = SPA_CHOICE_Range;
 | 
				
			||||||
 | 
									n_fractions += 2;
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				choice->body.type = SPA_CHOICE_Step;
 | 
									choice->body.type = SPA_CHOICE_Step;
 | 
				
			||||||
				spa_pod_builder_fraction(&b,
 | 
									spa_pod_builder_fraction(&b,
 | 
				
			||||||
							 port->frmival.stepwise.step.denominator,
 | 
												 port->frmival.stepwise.step.denominator,
 | 
				
			||||||
							 port->frmival.stepwise.step.numerator);
 | 
												 port->frmival.stepwise.step.numerator);
 | 
				
			||||||
 | 
									n_fractions += 3;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			port->frmsize.index++;
 | 
								port->frmsize.index++;
 | 
				
			||||||
			port->next_frmsize = true;
 | 
								port->next_frmsize = true;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		n_fractions++;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (n_fractions <= 1)
 | 
						if (n_fractions == 0)
 | 
				
			||||||
 | 
							goto next_frmsize;
 | 
				
			||||||
 | 
						if (n_fractions == 1)
 | 
				
			||||||
		choice->body.type = SPA_CHOICE_None;
 | 
							choice->body.type = SPA_CHOICE_None;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_pod_builder_pop(&b, &f[1]);
 | 
						spa_pod_builder_pop(&b, &f[1]);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue