additional option to display a color block
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36891 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -131,6 +131,7 @@ VideoProducer::NodeRegistered()
|
|||||||
BParameterGroup *main = web->MakeGroup(Name());
|
BParameterGroup *main = web->MakeGroup(Name());
|
||||||
BDiscreteParameter *state = main->MakeDiscreteParameter(
|
BDiscreteParameter *state = main->MakeDiscreteParameter(
|
||||||
P_COLOR, B_MEDIA_RAW_VIDEO, "Color", "Color");
|
P_COLOR, B_MEDIA_RAW_VIDEO, "Color", "Color");
|
||||||
|
state->AddItem(B_HOST_TO_LENDIAN_INT32(0xff000000), "Block");
|
||||||
state->AddItem(B_HOST_TO_LENDIAN_INT32(0x00ff0000), "Red");
|
state->AddItem(B_HOST_TO_LENDIAN_INT32(0x00ff0000), "Red");
|
||||||
state->AddItem(B_HOST_TO_LENDIAN_INT32(0x0000ff00), "Green");
|
state->AddItem(B_HOST_TO_LENDIAN_INT32(0x0000ff00), "Green");
|
||||||
state->AddItem(B_HOST_TO_LENDIAN_INT32(0x000000ff), "Blue");
|
state->AddItem(B_HOST_TO_LENDIAN_INT32(0x000000ff), "Blue");
|
||||||
@@ -258,6 +259,13 @@ VideoProducer::FormatSuggestionRequested(
|
|||||||
|
|
||||||
TOUCH(quality);
|
TOUCH(quality);
|
||||||
|
|
||||||
|
if (fOutput.format.u.raw_video.display.line_width == 0)
|
||||||
|
fOutput.format.u.raw_video.display.line_width = 320;
|
||||||
|
if (fOutput.format.u.raw_video.display.line_count == 0)
|
||||||
|
fOutput.format.u.raw_video.display.line_count = 240;
|
||||||
|
if (fOutput.format.u.raw_video.field_rate == 0)
|
||||||
|
fOutput.format.u.raw_video.field_rate = 29.97f;
|
||||||
|
|
||||||
*format = fOutput.format;
|
*format = fOutput.format;
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
@@ -276,8 +284,8 @@ VideoProducer::FormatProposal(const media_source &output, media_format *format)
|
|||||||
err = format_is_compatible(*format, fOutput.format) ?
|
err = format_is_compatible(*format, fOutput.format) ?
|
||||||
B_OK : B_MEDIA_BAD_FORMAT;
|
B_OK : B_MEDIA_BAD_FORMAT;
|
||||||
*format = fOutput.format;
|
*format = fOutput.format;
|
||||||
return err;
|
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
@@ -712,12 +720,26 @@ VideoProducer::FrameGenerator()
|
|||||||
h->u.raw_video.first_active_line = 1;
|
h->u.raw_video.first_active_line = 1;
|
||||||
h->u.raw_video.line_count = fConnectedFormat.display.line_count;
|
h->u.raw_video.line_count = fConnectedFormat.display.line_count;
|
||||||
|
|
||||||
/* Fill in a pattern */
|
if (fColor == 0xff000000) {
|
||||||
uint32 *p = (uint32 *)buffer->Data();
|
// display a purple block
|
||||||
for (int y = 0; y < (int)fConnectedFormat.display.line_count; y++)
|
uint32 *p = (uint32 *)buffer->Data();
|
||||||
for (int x = 0; x < (int)fConnectedFormat.display.line_width; x++)
|
for (int y = 0; y < (int)fConnectedFormat.display.line_count; y++)
|
||||||
*(p++) = ((((x+y)^0^x)+fFrame) & 0xff) * (0x01010101 & fColor);
|
for (int x = 0; x < (int)fConnectedFormat.display.line_width; x++) {
|
||||||
|
if (x > 120 && x < 280 && y > 60 && y < 100) {
|
||||||
|
*(p++) = 0xffff00ff;
|
||||||
|
} else {
|
||||||
|
*(p++) = 0xff000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* Fill in a pattern */
|
||||||
|
uint32 *p = (uint32 *)buffer->Data();
|
||||||
|
for (int y = 0; y < (int)fConnectedFormat.display.line_count; y++)
|
||||||
|
for (int x = 0; x < (int)fConnectedFormat.display.line_width; x++)
|
||||||
|
*(p++) = ((((x+y)^0^x)+fFrame) & 0xff) * (0x01010101 & fColor);
|
||||||
|
}
|
||||||
|
|
||||||
/* Send the buffer on down to the consumer */
|
/* Send the buffer on down to the consumer */
|
||||||
if (SendBuffer(buffer, fOutput.source, fOutput.destination) < B_OK) {
|
if (SendBuffer(buffer, fOutput.source, fOutput.destination) < B_OK) {
|
||||||
PRINTF(-1, ("FrameGenerator: Error sending buffer\n"));
|
PRINTF(-1, ("FrameGenerator: Error sending buffer\n"));
|
||||||
|
|||||||
Reference in New Issue
Block a user