I don't know if returning pixel aspect ratios like 14097:10000 is nice,
but at least it's not that broken as always using 1:1 git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9833 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
1682c6b4ab
commit
8dc315d3db
|
@ -235,6 +235,14 @@ mkvReader::SetupVideoCookie(mkv_cookie *cookie)
|
|||
TRACE("mkvReader::SetupVideoCookie: codec not recognized\n");
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
uint16 width_aspect_ratio;
|
||||
uint16 height_aspect_ratio;
|
||||
get_pixel_aspect_ratio(&width_aspect_ratio, &height_aspect_ratio,
|
||||
cookie->track_info->Video.PixelWidth,
|
||||
cookie->track_info->Video.PixelHeight,
|
||||
cookie->track_info->Video.DisplayWidth,
|
||||
cookie->track_info->Video.DisplayHeight);
|
||||
|
||||
// cookie->format.u.encoded_video.max_bit_rate =
|
||||
// cookie->format.u.encoded_video.avg_bit_rate =
|
||||
|
@ -243,8 +251,8 @@ mkvReader::SetupVideoCookie(mkv_cookie *cookie)
|
|||
cookie->format.u.encoded_video.output.first_active = 0;
|
||||
cookie->format.u.encoded_video.output.last_active = cookie->line_count - 1;
|
||||
cookie->format.u.encoded_video.output.orientation = B_VIDEO_TOP_LEFT_RIGHT;
|
||||
cookie->format.u.encoded_video.output.pixel_width_aspect = get_pixel_width_aspect(cookie->track_info->Video.PixelWidth, cookie->track_info->Video.DisplayWidth);
|
||||
cookie->format.u.encoded_video.output.pixel_height_aspect = get_pixel_height_aspect(cookie->track_info->Video.PixelHeight, cookie->track_info->Video.DisplayHeight);
|
||||
cookie->format.u.encoded_video.output.pixel_width_aspect = width_aspect_ratio;
|
||||
cookie->format.u.encoded_video.output.pixel_height_aspect = height_aspect_ratio;
|
||||
// cookie->format.u.encoded_video.output.display.format = 0;
|
||||
cookie->format.u.encoded_video.output.display.line_width = cookie->track_info->Video.PixelWidth;
|
||||
cookie->format.u.encoded_video.output.display.line_count = cookie->track_info->Video.PixelHeight;
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include "matroska_util.h"
|
||||
|
||||
|
||||
|
@ -64,16 +65,29 @@ get_frame_count_by_default_duration(uint64 duration, uint64 default_duration)
|
|||
}
|
||||
|
||||
|
||||
uint16
|
||||
get_pixel_width_aspect(unsigned int pixel_width, unsigned int display_width)
|
||||
void
|
||||
get_pixel_aspect_ratio(uint16 *width_aspect_ratio, uint16 *height_aspect_ratio,
|
||||
unsigned int pixel_width, unsigned int pixel_height,
|
||||
unsigned int display_width, unsigned int display_height)
|
||||
{
|
||||
return 1;
|
||||
printf("get_pixel_aspect_ratio: pixel_width %u, pixel_height %u, display_width %u, display_height %u\n",
|
||||
pixel_width, pixel_height, display_width, display_height);
|
||||
|
||||
if (pixel_width == display_width && pixel_height == display_height) {
|
||||
*width_aspect_ratio = 1;
|
||||
*height_aspect_ratio = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
double w_aspect = display_width / (double)pixel_width;
|
||||
double h_aspect = display_height / (double)pixel_height;
|
||||
w_aspect /= h_aspect;
|
||||
h_aspect = 1;
|
||||
|
||||
printf("w_aspect %.6f, h_aspect %.6f\n", w_aspect, h_aspect);
|
||||
|
||||
*width_aspect_ratio = uint16(w_aspect * 10000 + 0.5);
|
||||
*height_aspect_ratio = 10000;
|
||||
|
||||
printf("w_aspect %.6f, h_aspect %.6f, ratio %u:%u\n", w_aspect, h_aspect, *width_aspect_ratio, *height_aspect_ratio);
|
||||
}
|
||||
|
||||
|
||||
uint16
|
||||
get_pixel_height_aspect(unsigned int pixel_height, unsigned int display_height)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,8 +32,9 @@ float get_frame_rate(uint64 default_duration);
|
|||
uint64 get_frame_count_by_frame_rate(uint64 duration, float frame_rate);
|
||||
uint64 get_frame_count_by_default_duration(uint64 duration, uint64 default_duration);
|
||||
|
||||
uint16 get_pixel_width_aspect(unsigned int pixel_width, unsigned int display_width);
|
||||
uint16 get_pixel_height_aspect(unsigned int pixel_height, unsigned int display_height);
|
||||
void get_pixel_aspect_ratio(uint16 *width_aspect_ratio, uint16 *height_aspect_ratio,
|
||||
unsigned int pixel_width, unsigned int pixel_height,
|
||||
unsigned int display_width, unsigned int display_height);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue