radeon/uvd: move polaris fw check into radeon_video.c v2
authorChristian König <christian.koenig@amd.com>
Thu, 7 Jul 2016 09:20:30 +0000 (11:20 +0200)
committerChristian König <christian.koenig@amd.com>
Fri, 8 Jul 2016 19:03:31 +0000 (21:03 +0200)
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 <christian.koenig@amd.com>
Reviewed-by: Leo Liu <leo.liu@amd.com>
src/gallium/drivers/radeon/radeon_uvd.c
src/gallium/drivers/radeon/radeon_video.c

index 722341756636a0d0ed7190d671e96cc902b88b03..52658fa23939620b6309f3434fbe5195ddf0d987 100644 (file)
@@ -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;
index 6d11fc1076558d3987fe0e9f25894a0f9f0f87a7..d7c5a165ef3267d1f97e4c8fc3b58b0d1e218916 100644 (file)
@@ -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;