/*
// Copyright (c) 2014 Intel Corporation 
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/
#ifndef VIDEO_PAYLOAD_BUFFER_H
#define VIDEO_PAYLOAD_BUFFER_H

#include <utils/Timers.h>
namespace android {
namespace intel {

struct VideoPayloadBuffer {
    // transform made by clients (clients to hwc)
    int client_transform;
    int metadata_transform;
    int rotated_width;
    int rotated_height;
    int surface_protected;
    int force_output_method;
    buffer_handle_t rotated_buffer_handle;
    uint32_t renderStatus;
    unsigned int used_by_widi;
    int bob_deinterlace;
    int tiling;
    uint32_t width;
    uint32_t height;
    uint32_t luma_stride;
    uint32_t chroma_u_stride;
    uint32_t chroma_v_stride;
    uint32_t format;
    buffer_handle_t khandle;
    int64_t  timestamp;

    uint32_t rotate_luma_stride;
    uint32_t rotate_chroma_u_stride;
    uint32_t rotate_chroma_v_stride;

    nsecs_t hwc_timestamp;
    uint32_t layer_transform;

    void *native_window;
    buffer_handle_t scaling_khandle;
    uint32_t scaling_width;
    uint32_t scaling_height;

    uint32_t scaling_luma_stride;
    uint32_t scaling_chroma_u_stride;
    uint32_t scaling_chroma_v_stride;

    uint32_t crop_width;
    uint32_t crop_height;

    uint32_t coded_width;
    uint32_t coded_height;
    uint32_t csc_mode;
    uint32_t video_range;
    uint32_t initialized;
};


// force output method values
enum {
    FORCE_OUTPUT_INVALID = 0,
    FORCE_OUTPUT_GPU,
    FORCE_OUTPUT_OVERLAY,
    FORCE_OUTPUT_SW_DECODE,
};


} // namespace intel
} // namespace android


#endif // VIDEO_PAYLOAD_BUFFER_H


