~thopiekar/emgd/libva-1.0.10-github_community

« back to all changes in this revision

Viewing changes to i965_drv_video/i965_drv_video.c

  • Committer: Xiang, Haihao
  • Author(s): Gwenole Beauchesne
  • Date: 2011-01-27 03:37:41 UTC
  • Revision ID: git-v1:daa6c5671af3d76087da3d30f5d8197a6669210d
[G45] Fix check for H.264 decoding support.

Show diffs side-by-side

added added

removed removed

Lines of Context:
50
50
 
51
51
#define HAS_VC1(ctx)    (IS_GEN6((ctx)->intel.device_id))
52
52
 
 
53
/* Defined to 1 if GPU supports H.264 decoding */
 
54
/* XXX: drop IS_IRONLAKE(ctx) check once G4X support is available */
 
55
#define HAS_H264(ctx)   (IS_GEN6((ctx)->intel.device_id) || \
 
56
                         (IS_IRONLAKE((ctx)->intel.device_id) && \
 
57
                          (ctx)->intel.has_bsd))
 
58
 
53
59
enum {
54
60
    I965_SURFACETYPE_RGBA = 1,
55
61
    I965_SURFACETYPE_YUV,
126
132
 
127
133
    profile_list[i++] = VAProfileMPEG2Simple;
128
134
    profile_list[i++] = VAProfileMPEG2Main;
129
 
    profile_list[i++] = VAProfileH264Baseline;
130
 
    profile_list[i++] = VAProfileH264Main;
131
 
    profile_list[i++] = VAProfileH264High;
 
135
 
 
136
    if (HAS_H264(i965)) {
 
137
        profile_list[i++] = VAProfileH264Baseline;
 
138
        profile_list[i++] = VAProfileH264Main;
 
139
        profile_list[i++] = VAProfileH264High;
 
140
    }
132
141
 
133
142
    if (HAS_VC1(i965)) {
134
143
        profile_list[i++] = VAProfileVC1Simple;
161
170
    case VAProfileH264Baseline:
162
171
    case VAProfileH264Main:
163
172
    case VAProfileH264High:
164
 
        entrypoint_list[n++] = VAEntrypointVLD;
 
173
        if (HAS_H264(i965))
 
174
            entrypoint_list[n++] = VAEntrypointVLD;
165
175
        break;
166
176
 
167
177
    case VAProfileVC1Simple:
267
277
    case VAProfileH264Baseline:
268
278
    case VAProfileH264Main:
269
279
    case VAProfileH264High:
270
 
        if (VAEntrypointVLD == entrypoint) {
 
280
        if (HAS_H264(i965) && VAEntrypointVLD == entrypoint) {
271
281
            vaStatus = VA_STATUS_SUCCESS;
272
282
        } else {
273
283
            vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;
330
340
VAStatus 
331
341
i965_DestroyConfig(VADriverContextP ctx, VAConfigID config_id)
332
342
{
 
343
    struct intel_driver_data * const intel = intel_driver_data(ctx);
333
344
    struct i965_driver_data *i965 = i965_driver_data(ctx);
334
345
    struct object_config *obj_config = CONFIG(config_id);
335
346
    VAStatus vaStatus;
755
766
        return vaStatus;
756
767
    }
757
768
 
758
 
    if (IS_GEN6(i965->intel.device_id))
 
769
    switch (obj_config->profile) {
 
770
    case VAProfileH264Baseline:
 
771
    case VAProfileH264Main:
 
772
    case VAProfileH264High:
 
773
        if (!HAS_H264(i965))
 
774
            return VA_STATUS_ERROR_UNSUPPORTED_PROFILE;
759
775
        render_state->interleaved_uv = 1;
760
 
    else {
761
 
        switch (obj_config->profile) {
762
 
        case VAProfileH264Baseline:
763
 
        case VAProfileH264Main:
764
 
        case VAProfileH264High:
765
 
            render_state->interleaved_uv = 1;
766
 
            break;
767
 
        default:
768
 
            render_state->interleaved_uv = 0;
769
 
        }
 
776
        break;
 
777
    default:
 
778
        render_state->interleaved_uv = !!IS_GEN6(i965->intel.device_id);
 
779
        break;
770
780
    }
771
781
 
772
782
    obj_context->context_id = contextID;
987
997
                  VAContextID context,
988
998
                  VASurfaceID render_target)
989
999
{
 
1000
    struct intel_driver_data * const intel = intel_driver_data(ctx);
990
1001
    struct i965_driver_data *i965 = i965_driver_data(ctx); 
991
1002
    struct object_context *obj_context = CONTEXT(context);
992
1003
    struct object_surface *obj_surface = SURFACE(render_target);