~thopiekar/arm-mali/libvdpau-sunxi

« back to all changes in this revision

Viewing changes to mpeg12.c

  • Committer: Jens Kuske
  • Date: 2016-12-17 15:42:57 UTC
  • Revision ID: git-v1:ffad9ab982f3c133cb30d2d509f7ef2893744650
Remove unneeded reconstruct buffer

This reverts commit 162bfcc214fa1b6ef64e1d39298dd9dfe3681190
and replaces it by direct non-tiled output.

On H3 and newer all subengines are able to work without any tiled
buffer, not only the H.265 engine. This saves us some memory and
reduces complexity of video surfaces.

Show diffs side-by-side

added added

removed removed

Lines of Context:
73
73
        if (ret != VDP_STATUS_OK)
74
74
                return ret;
75
75
 
76
 
        ret = rec_prepare(output);
77
 
        if (ret != VDP_STATUS_OK)
78
 
                return ret;
79
 
 
80
76
        int i;
81
77
 
82
78
        // activate MPEG engine
116
112
        writel(pic_header, ve_regs + VE_MPEG_PIC_HDR);
117
113
 
118
114
        // ??
119
 
        writel(0x80000138 | ((cedrus_get_ve_version(decoder->device->cedrus) < 0x1680) << 7), ve_regs + VE_MPEG_CTRL);
 
115
        writel(0x80000138 | (1 << 7), ve_regs + VE_MPEG_CTRL);
120
116
        if (cedrus_get_ve_version(decoder->device->cedrus) >= 0x1680)
 
117
        {
121
118
                writel((0x2 << 30) | (0x1 << 28) | (output->chroma_size / 2), ve_regs + VE_EXTRA_OUT_FMT_OFFSET);
 
119
                writel((0x2 << 4), ve_regs + 0x0ec);
 
120
                writel(output->chroma_size / 2, ve_regs + 0x0c4);
 
121
                writel((ALIGN(decoder->width / 2, 16) << 16) | ALIGN(decoder->width, 32), ve_regs + 0x0c8);
 
122
        }
122
123
 
123
124
        // set forward/backward predicion buffers
124
125
        if (info->forward_reference != VDP_INVALID_HANDLE)
125
126
        {
126
127
                video_surface_ctx_t *forward = handle_get(info->forward_reference);
127
 
                writel(cedrus_mem_get_bus_addr(forward->rec), ve_regs + VE_MPEG_FWD_LUMA);
128
 
                writel(cedrus_mem_get_bus_addr(forward->rec) + forward->luma_size, ve_regs + VE_MPEG_FWD_CHROMA);
 
128
                writel(cedrus_mem_get_bus_addr(forward->yuv->data), ve_regs + VE_MPEG_FWD_LUMA);
 
129
                writel(cedrus_mem_get_bus_addr(forward->yuv->data) + forward->luma_size, ve_regs + VE_MPEG_FWD_CHROMA);
129
130
        }
130
131
        if (info->backward_reference != VDP_INVALID_HANDLE)
131
132
        {
132
133
                video_surface_ctx_t *backward = handle_get(info->backward_reference);
133
 
                writel(cedrus_mem_get_bus_addr(backward->rec), ve_regs + VE_MPEG_BACK_LUMA);
134
 
                writel(cedrus_mem_get_bus_addr(backward->rec) + backward->luma_size, ve_regs + VE_MPEG_BACK_CHROMA);
 
134
                writel(cedrus_mem_get_bus_addr(backward->yuv->data), ve_regs + VE_MPEG_BACK_LUMA);
 
135
                writel(cedrus_mem_get_bus_addr(backward->yuv->data) + backward->luma_size, ve_regs + VE_MPEG_BACK_CHROMA);
135
136
        }
136
137
 
137
138
        // set output buffers (Luma / Croma)
138
 
        writel(cedrus_mem_get_bus_addr(output->rec), ve_regs + VE_MPEG_REC_LUMA);
139
 
        writel(cedrus_mem_get_bus_addr(output->rec) + output->luma_size, ve_regs + VE_MPEG_REC_CHROMA);
 
139
        writel(cedrus_mem_get_bus_addr(output->yuv->data), ve_regs + VE_MPEG_REC_LUMA);
 
140
        writel(cedrus_mem_get_bus_addr(output->yuv->data) + output->luma_size, ve_regs + VE_MPEG_REC_CHROMA);
140
141
        writel(cedrus_mem_get_bus_addr(output->yuv->data), ve_regs + VE_MPEG_ROT_LUMA);
141
142
        writel(cedrus_mem_get_bus_addr(output->yuv->data) + output->luma_size, ve_regs + VE_MPEG_ROT_CHROMA);
142
143