#include <linux/ion.h>
#endif
-#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1))
/*
* Internal Implementation
*/
if (!core->is_hw) {
width = dec_info->width;
height = dec_info->height;
- stride_width = ALIGN(width, 4);
- stride_height = ALIGN(height, 4);
+ stride_width = GST_ROUND_UP_4(width);
+ stride_height = GST_ROUND_UP_2(height);
buf_size = stride_width * stride_height * 3 / 2;
- if (buf_size > size)
- return MC_ERROR;
-
memset(&tsurf_info, 0x0, sizeof(tbm_surface_info_s));
bo[0] = tbm_bo_alloc(core->bufmgr, buf_size, TBM_BO_WC);
tsurf_info.planes[i].offset = 0;
tsurf_info.size = tsurf_info.planes[i].size;
} else {
- tsurf_info.planes[i].stride = stride_width>>1;
- tsurf_info.planes[i].size = (stride_width>>1) * (stride_height>>1);
+ tsurf_info.planes[i].stride = GST_ROUND_UP_4(GST_ROUND_UP_2(width)/2);
+ tsurf_info.planes[i].size = GST_ROUND_UP_4(GST_ROUND_UP_2(width)/2) * (GST_ROUND_UP_2(height)/2);
tsurf_info.planes[i].offset = (tsurf_info.planes[i-1].offset + tsurf_info.planes[i - 1].size);
tsurf_info.size += tsurf_info.planes[i].size;
}
((mc_fill_buffer_cb) core->user_cb[_MEDIACODEC_EVENT_TYPE_FILLBUFFER])
(out_pkt, core->user_data[_MEDIACODEC_EVENT_TYPE_FILLBUFFER]);
}
+ } else {
+ gst_buffer_unref(buffer);
+ LOGE("Failed to dequeue output packet");
}
MEDIACODEC_FLEAVE();