summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian König <[email protected]>2016-07-07 11:20:30 +0200
committerChristian König <[email protected]>2016-07-08 21:03:31 +0200
commit36df04dac4a2f8a714f2497465cc983dab849246 (patch)
treed6d619df4aec73f98acbe018ad17537bbe59acd4
parent5290bf43c8024561095ab96b54cd09b80b135528 (diff)
radeon/uvd: move polaris fw check into radeon_video.c v2
It's actually not very clever to claim to support H.264 and then fail to create a decoder. v2: prefix FW macro with UVD_. Signed-off-by: Christian König <[email protected]> Reviewed-by: Leo Liu <[email protected]>
-rw-r--r--src/gallium/drivers/radeon/radeon_uvd.c8
-rw-r--r--src/gallium/drivers/radeon/radeon_video.c16
2 files changed, 13 insertions, 11 deletions
diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c
index 72234175663..52658fa2393 100644
--- a/src/gallium/drivers/radeon/radeon_uvd.c
+++ b/src/gallium/drivers/radeon/radeon_uvd.c
@@ -60,8 +60,6 @@
#define FB_BUFFER_SIZE_TONGA (2048 * 64)
#define IT_SCALING_TABLE_SIZE 992
-#define FW_1_66_16 ((1 << 24) | (66 << 16) | (16 << 8))
-
/* UVD decoder representation */
struct ruvd_decoder {
struct pipe_video_codec base;
@@ -1185,12 +1183,6 @@ struct pipe_video_codec *ruvd_create_decoder(struct pipe_context *context,
height = align(height, VL_MACROBLOCK_HEIGHT);
break;
case PIPE_VIDEO_FORMAT_MPEG4_AVC:
- if ((info.family == CHIP_POLARIS10 || info.family == CHIP_POLARIS11) &&
- info.uvd_fw_version < FW_1_66_16 ) {
- RVID_ERR("POLARIS10/11 firmware version need to be updated.\n");
- return NULL;
- }
-
width = align(width, VL_MACROBLOCK_WIDTH);
height = align(height, VL_MACROBLOCK_HEIGHT);
break;
diff --git a/src/gallium/drivers/radeon/radeon_video.c b/src/gallium/drivers/radeon/radeon_video.c
index 6d11fc10765..d7c5a165ef3 100644
--- a/src/gallium/drivers/radeon/radeon_video.c
+++ b/src/gallium/drivers/radeon/radeon_video.c
@@ -43,6 +43,8 @@
#include "radeon_video.h"
#include "radeon_vce.h"
+#define UVD_FW_1_66_16 ((1 << 24) | (66 << 16) | (16 << 8))
+
/* generate an stream handle */
unsigned rvid_alloc_stream_handle()
{
@@ -206,6 +208,9 @@ int rvid_get_video_param(struct pipe_screen *screen,
{
struct r600_common_screen *rscreen = (struct r600_common_screen *)screen;
enum pipe_video_format codec = u_reduce_video_profile(profile);
+ struct radeon_info info;
+
+ rscreen->ws->query_info(rscreen->ws, &info);
if (entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE) {
switch (param) {
@@ -239,10 +244,15 @@ int rvid_get_video_param(struct pipe_screen *screen,
case PIPE_VIDEO_FORMAT_MPEG12:
return profile != PIPE_VIDEO_PROFILE_MPEG1;
case PIPE_VIDEO_FORMAT_MPEG4:
+ /* no support for MPEG4 on older hw */
+ return rscreen->family >= CHIP_PALM;
case PIPE_VIDEO_FORMAT_MPEG4_AVC:
- if (rscreen->family < CHIP_PALM)
- /* no support for MPEG4 */
- return codec != PIPE_VIDEO_FORMAT_MPEG4;
+ if ((rscreen->family == CHIP_POLARIS10 ||
+ rscreen->family == CHIP_POLARIS11) &&
+ info.uvd_fw_version < UVD_FW_1_66_16 ) {
+ RVID_ERR("POLARIS10/11 firmware version need to be updated.\n");
+ return false;
+ }
return true;
case PIPE_VIDEO_FORMAT_VC1:
return true;