diff --git a/src/apps/mediaplayer/media_node_framework/video/VideoProducer.cpp b/src/apps/mediaplayer/media_node_framework/video/VideoProducer.cpp index 43f802b66c..863b41fe82 100644 --- a/src/apps/mediaplayer/media_node_framework/video/VideoProducer.cpp +++ b/src/apps/mediaplayer/media_node_framework/video/VideoProducer.cpp @@ -357,14 +357,22 @@ VideoProducer::PrepareToConnect(const media_source& source, return B_MEDIA_BAD_FORMAT; } - if (format->u.raw_video.display.line_width == 0) - format->u.raw_video.display.line_width = 384; - if (format->u.raw_video.display.line_count == 0) - format->u.raw_video.display.line_count = 288; - if (format->u.raw_video.field_rate == 0) - format->u.raw_video.field_rate = 25.0; - if (format->u.raw_video.display.bytes_per_row == 0) - format->u.raw_video.display.bytes_per_row = format->u.raw_video.display.line_width * 4; + if (format->u.raw_video.display.line_width == 0) { + format->u.raw_video.display.line_width + = fSupplier->Format().u.raw_video.display.line_width; + } + if (format->u.raw_video.display.line_count == 0) { + format->u.raw_video.display.line_count + = fSupplier->Format().u.raw_video.display.line_count; + } + if (format->u.raw_video.field_rate == 0) { + format->u.raw_video.field_rate + = fSupplier->Format().u.raw_video.field_rate; + } + if (format->u.raw_video.display.bytes_per_row == 0) { + format->u.raw_video.display.bytes_per_row + = fSupplier->Format().u.raw_video.display.bytes_per_row; + } *outSource = fOutput.source; strcpy(outName, fOutput.name); diff --git a/src/apps/mediaplayer/media_node_framework/video/VideoSupplier.h b/src/apps/mediaplayer/media_node_framework/video/VideoSupplier.h index ae57e4122e..70d3031da8 100644 --- a/src/apps/mediaplayer/media_node_framework/video/VideoSupplier.h +++ b/src/apps/mediaplayer/media_node_framework/video/VideoSupplier.h @@ -8,6 +8,7 @@ #include +#include struct media_raw_video_format; @@ -18,6 +19,7 @@ public: VideoSupplier(); virtual ~VideoSupplier(); + virtual const media_format& Format() const = 0; virtual status_t FillBuffer(int64 startFrame, void* buffer, const media_raw_video_format& format, bool forceGeneration, bool& wasCached) = 0; diff --git a/src/apps/mediaplayer/supplier/ProxyVideoSupplier.cpp b/src/apps/mediaplayer/supplier/ProxyVideoSupplier.cpp index 1fc2d960ce..8db2d8e7d4 100644 --- a/src/apps/mediaplayer/supplier/ProxyVideoSupplier.cpp +++ b/src/apps/mediaplayer/supplier/ProxyVideoSupplier.cpp @@ -28,6 +28,13 @@ ProxyVideoSupplier::~ProxyVideoSupplier() } +const media_format& +ProxyVideoSupplier::Format() const +{ + return fSupplier->Format(); +} + + status_t ProxyVideoSupplier::FillBuffer(int64 startFrame, void* buffer, const media_raw_video_format& format, bool forceGeneration, diff --git a/src/apps/mediaplayer/supplier/ProxyVideoSupplier.h b/src/apps/mediaplayer/supplier/ProxyVideoSupplier.h index 0995e97d83..9dc3771d24 100644 --- a/src/apps/mediaplayer/supplier/ProxyVideoSupplier.h +++ b/src/apps/mediaplayer/supplier/ProxyVideoSupplier.h @@ -18,6 +18,7 @@ public: ProxyVideoSupplier(); virtual ~ProxyVideoSupplier(); + virtual const media_format& Format() const; virtual status_t FillBuffer(int64 startFrame, void* buffer, const media_raw_video_format& format, bool forceGeneration, bool& wasCached);