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:
beveloper 2004-11-07 18:05:28 +00:00
parent 1682c6b4ab
commit 8dc315d3db
3 changed files with 38 additions and 15 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -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