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:
@@ -235,6 +235,14 @@ mkvReader::SetupVideoCookie(mkv_cookie *cookie)
|
|||||||
TRACE("mkvReader::SetupVideoCookie: codec not recognized\n");
|
TRACE("mkvReader::SetupVideoCookie: codec not recognized\n");
|
||||||
return B_ERROR;
|
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.max_bit_rate =
|
||||||
// cookie->format.u.encoded_video.avg_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.first_active = 0;
|
||||||
cookie->format.u.encoded_video.output.last_active = cookie->line_count - 1;
|
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.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_width_aspect = width_aspect_ratio;
|
||||||
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_height_aspect = height_aspect_ratio;
|
||||||
// cookie->format.u.encoded_video.output.display.format = 0;
|
// 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_width = cookie->track_info->Video.PixelWidth;
|
||||||
cookie->format.u.encoded_video.output.display.line_count = cookie->track_info->Video.PixelHeight;
|
cookie->format.u.encoded_video.output.display.line_count = cookie->track_info->Video.PixelHeight;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include "matroska_util.h"
|
#include "matroska_util.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -64,16 +65,29 @@ get_frame_count_by_default_duration(uint64 duration, uint64 default_duration)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint16
|
void
|
||||||
get_pixel_width_aspect(unsigned int pixel_width, unsigned int display_width)
|
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_frame_rate(uint64 duration, float frame_rate);
|
||||||
uint64 get_frame_count_by_default_duration(uint64 duration, uint64 default_duration);
|
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);
|
void get_pixel_aspect_ratio(uint16 *width_aspect_ratio, uint16 *height_aspect_ratio,
|
||||||
uint16 get_pixel_height_aspect(unsigned int pixel_height, unsigned int display_height);
|
unsigned int pixel_width, unsigned int pixel_height,
|
||||||
|
unsigned int display_width, unsigned int display_height);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user