Esempio n. 1
0
/* static */
void
OutputView::SetInitialFormat(const int32 &width, const int32 &height,
	const color_space &colorSpace, const int32 &fieldRate,
	media_format &initialFormat)
{
	memset(&initialFormat, 0, sizeof(media_format));
		
	initialFormat.type = B_MEDIA_RAW_VIDEO;
	initialFormat.u.raw_video.display.line_width = width;
	initialFormat.u.raw_video.display.line_count = height;
	initialFormat.u.raw_video.last_active = initialFormat.u.raw_video.display.line_count - 1;
	
	size_t pixelChunk;
	size_t rowAlign;
	size_t pixelPerChunk;
	get_pixel_size_for(colorSpace, &pixelChunk, &rowAlign, &pixelPerChunk);
	initialFormat.u.raw_video.display.bytes_per_row = width * rowAlign;			
	initialFormat.u.raw_video.display.format = colorSpace;
	initialFormat.u.raw_video.interlace = 1;	
	
	// TODO: Calculate this in some way
	initialFormat.u.raw_video.field_rate = fieldRate; //Frames per second
	initialFormat.u.raw_video.pixel_width_aspect = 1;	// square pixels
	initialFormat.u.raw_video.pixel_height_aspect = 1;
	
}
Esempio n. 2
0
media_format
Controller::_ComputeMediaFormat(const int32 &width, const int32 &height,
	const color_space &colorSpace, const int32 &fieldRate)
{
	media_format initialFormat;
	memset(&initialFormat, 0, sizeof(media_format));
		
	initialFormat.type = B_MEDIA_RAW_VIDEO;
	initialFormat.u.raw_video.display.line_width = width;
	initialFormat.u.raw_video.display.line_count = height;
	initialFormat.u.raw_video.last_active = initialFormat.u.raw_video.display.line_count - 1;
	
	size_t pixelChunk;
	size_t rowAlign;
	size_t pixelPerChunk;

	status_t status;
	status = get_pixel_size_for(colorSpace, &pixelChunk,
			&rowAlign, &pixelPerChunk);
	if (status != B_OK)
		throw status;

	initialFormat.u.raw_video.display.bytes_per_row = width * rowAlign;			
	initialFormat.u.raw_video.display.format = colorSpace;
	initialFormat.u.raw_video.interlace = 1;	
	initialFormat.u.raw_video.field_rate = fieldRate; // Frames per second, overwritten later
	initialFormat.u.raw_video.pixel_width_aspect = 1;	// square pixels
	initialFormat.u.raw_video.pixel_height_aspect = 1;
	
	return initialFormat;
}
status_t
dp_get_pixel_size_for(color_space space, size_t *pixelChunk,
	size_t *rowAlignment, size_t *pixelsPerChunk)
{
	status_t result = get_pixel_size_for(space, pixelChunk, NULL,
		pixelsPerChunk);

	if ((space == B_RGB32) || (space == B_RGBA32) || (space == B_RGB32_BIG)
		|| (space == B_RGBA32_BIG)) {
		*pixelChunk = 3;
	}

	return result;
}
Esempio n. 4
0
bool
PictureTest::IsSame(BBitmap *bitmap1, BBitmap *bitmap2, BString &reason)
{
	if (bitmap1->ColorSpace() != bitmap2->ColorSpace()) {
		reason = "ColorSpace() differs";
		return false;
	}
	
	if (bitmap1->BitsLength() != bitmap2->BitsLength()) {
		reason = "BitsLength() differs";
		return false;
	}
	
	size_t rowAlignment;
	size_t pixelChunk;
	size_t pixelsPerChunk;
	if (get_pixel_size_for(bitmap1->ColorSpace(), &pixelChunk, &rowAlignment, 
		&pixelsPerChunk) != B_OK) {
		reason = "get_pixel_size_for() not supported for this color space";
		return false;
	}
	if (pixelsPerChunk != 1) {
		reason = "Unsupported color_space; IsSame(...) supports 1 pixels per chunk only";
		return false;
	}
	int32 bpp = (int32)pixelChunk;
	uint8* row1 = (uint8*)bitmap1->Bits();
	uint8* row2 = (uint8*)bitmap2->Bits();
	int32 bpr = bitmap1->BytesPerRow();
	int32 width = bitmap1->Bounds().IntegerWidth() + 1;
	int32 height = bitmap1->Bounds().IntegerHeight() + 1;
	for (int y = 0; y < height; y ++, row1 += bpr, row2 += bpr) {
		uint8* pixel1 = row1;
		uint8* pixel2 = row2;
		for (int x = 0; x < width; x ++, pixel1 += bpp, pixel2 += bpp) {
			if (memcmp(pixel1, pixel2, bpp) != 0) {
				setMismatchReason(x, y, pixel1, pixel2, bpp, reason);
				return false;
			}
		}
	}

	reason = "";
	return true;
}
void
MesaSoftwareRenderer::_ClearFront(gl_context* ctx)
{
	CALLED();

	MesaSoftwareRenderer* mr = (MesaSoftwareRenderer*)ctx->DriverCtx;
	BGLView* bglview = mr->GLView();
	assert(bglview);
	BBitmap* bitmap = mr->fBitmap;
	assert(bitmap);
	GLuint* start = (GLuint*)bitmap->Bits();
	size_t pixelSize = 0;
	get_pixel_size_for(bitmap->ColorSpace(), &pixelSize, NULL, NULL);
	const GLuint* clearPixelPtr = (const GLuint*)mr->fClearColor;
	const GLuint clearPixel = B_LENDIAN_TO_HOST_INT32(*clearPixelPtr);

	int x = ctx->DrawBuffer->_Xmin;
	int y = ctx->DrawBuffer->_Ymin;
	uint32 width = ctx->DrawBuffer->_Xmax - x;
	uint32 height = ctx->DrawBuffer->_Ymax - y;
	GLboolean all = (width == ctx->DrawBuffer->Width
		&& height == ctx->DrawBuffer->Height);

	if (all) {
		const int numPixels = mr->fWidth * mr->fHeight;
		if (clearPixel == 0) {
			memset(start, 0, numPixels * pixelSize);
		} else {
			for (int i = 0; i < numPixels; i++) {
				start[i] = clearPixel;
			}
		}
	} else {
		// XXX untested
		start += y * mr->fWidth + x;
		for (uint32 i = 0; i < height; i++) {
			for (uint32 j = 0; j < width; j++) {
				start[j] = clearPixel;
			}
			start += mr->fWidth;
		}
	}
}