const video_format_desc format_descs[video_format::count] = \r
{ \r
DEFINE_VIDEOFORMATDESC(video_format::pal ,720, 576, 1024, 576, field_mode::upper, 25, 1, boost::assign::list_of(3840), L"PAL"), \r
- DEFINE_VIDEOFORMATDESC(video_format::ntsc ,720, 486, 720, 534, field_mode::lower, 30000, 1001, boost::assign::list_of(3204)(3202)(3204)(3202)(3204), L"NTSC"), \r
+ DEFINE_VIDEOFORMATDESC(video_format::ntsc ,720, 486, 720, 540, field_mode::lower, 30000, 1001, boost::assign::list_of(3204)(3202)(3204)(3202)(3204), L"NTSC"), \r
DEFINE_VIDEOFORMATDESC(video_format::x576p2500 ,1024, 576, 1024, 576, field_mode::progressive, 25, 1, boost::assign::list_of(3840), L"576p2500"),\r
DEFINE_VIDEOFORMATDESC(video_format::x720p2500 ,1280, 720, 1280, 720, field_mode::progressive, 25, 1, boost::assign::list_of(3840), L"720p2500"), \r
DEFINE_VIDEOFORMATDESC(video_format::x720p5000 ,1280, 720, 1280, 720, field_mode::progressive, 50, 1, boost::assign::list_of(1920), L"720p5000"), \r
\r
struct configuration\r
{\r
+ enum aspect_ratio\r
+ {\r
+ aspect_4_3 = 0,\r
+ aspect_16_9,\r
+ aspect_invalid,\r
+ };\r
+ \r
std::wstring name;\r
size_t screen_index;\r
stretch stretch;\r
bool windowed;\r
bool auto_deinterlace;\r
bool key_only;\r
+ aspect_ratio aspect; \r
\r
configuration()\r
: name(L"ogl")\r
, windowed(true)\r
, auto_deinterlace(true)\r
, key_only(false)\r
+ , aspect(aspect_invalid)\r
{\r
}\r
};\r
\r
GLuint texture_;\r
std::vector<GLuint> pbos_;\r
- \r
+ \r
float width_;\r
float height_; \r
unsigned int screen_x_;\r
, square_height_(format_desc.square_height)\r
, filter_(format_desc.field_mode == core::field_mode::progressive || !config.auto_deinterlace ? L"" : L"YADIF=0:-1", boost::assign::list_of(PIX_FMT_BGRA))\r
{ \r
+ if(format_desc_.format == core::video_format::ntsc && config_.aspect == configuration::aspect_4_3)\r
+ {\r
+ // Use default values which are 4:3.\r
+ }\r
+ else\r
+ {\r
+ if(config_.aspect == configuration::aspect_16_9)\r
+ square_width_ = (format_desc.height*16)/9;\r
+ else if(config_.aspect == configuration::aspect_4_3)\r
+ square_width_ = (format_desc.height*4)/3;\r
+ }\r
+\r
frame_buffer_.set_capacity(2);\r
\r
graph_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f)); \r
config.stretch = stretch::uniform;\r
else if(stretch_str == L"uniform_to_fill")\r
config.stretch = stretch::uniform_to_fill;\r
+\r
+ auto aspect_str = ptree.get(L"aspect-ratio", L"default");\r
+ if(aspect_str == L"16:9")\r
+ config.aspect = configuration::aspect_16_9;\r
+ else if(aspect_str == L"4:3")\r
+ config.aspect = configuration::aspect_4_3;\r
\r
return make_safe<ogl_consumer_proxy>(config);\r
}\r
<channel-grid>true</channel-grid>\r
<channels>\r
<channel>\r
- <video-mode>720p5000</video-mode>\r
+ <video-mode>PAL</video-mode>\r
<consumers>\r
- <bluefish>\r
+ <screen>\r
<device>1</device>\r
- <embedded-audio>true</embedded-audio>\r
- </bluefish>\r
- <bluefish>\r
- <device>2</device>\r
- <embedded-audio>true</embedded-audio>\r
- </bluefish>\r
+ <aspect-ratio>4:3</aspect-ratio>\r
+ </screen>\r
</consumers>\r
</channel>\r
</channels>\r
<audio></audio>\r
<screen>\r
<device>[0..]</device>\r
+ <aspect-ratio>default [default|4:3|16:9]</aspect-ratio>\r
<stretch>fill [none|fill|uniform|uniform_to_fill]</stretch>\r
<windowed>false [true|false]</windowed>\r
<key-only>false [true|false]</key-only>\r