if(avctx->get_buffer(avctx, p) < 0){
p->buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE; if(avctx->reget_buffer(avctx, p) < 0){
static int decode_frame(AVCodecContext *avctx,                         void *data, int *data_size,                        uint8_t *buf, int buf_size){    TM2Context * const l = avctx->priv_data;    AVFrame * const p= (AVFrame*)&l->pic;    int skip, t;    p->reference = 1;    if(avctx->get_buffer(avctx, p) < 0){        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");        return -1;    }    l->dsp.bswap_buf((uint32_t*)buf, (uint32_t*)buf, buf_size >> 2);    skip = tm2_read_header(l, buf);        if(skip == -1)        return -1;        t = tm2_read_stream(l, buf + skip, TM2_C_HI);    if(t == -1)        return -1;    skip += t;    t = tm2_read_stream(l, buf + skip, TM2_C_LO);    if(t == -1)        return -1;    skip += t;    t = tm2_read_stream(l, buf + skip, TM2_L_HI);    if(t == -1)        return -1;    skip += t;    t = tm2_read_stream(l, buf + skip, TM2_L_LO);    if(t == -1)        return -1;    skip += t;    t = tm2_read_stream(l, buf + skip, TM2_UPD);    if(t == -1)        return -1;    skip += t;    t = tm2_read_stream(l, buf + skip, TM2_MOT);    if(t == -1)        return -1;    skip += t;    t = tm2_read_stream(l, buf + skip, TM2_TYPE);    if(t == -1)        return -1;    p->key_frame = tm2_decode_blocks(l, p);    if(p->key_frame)        p->pict_type = FF_I_TYPE;    else        p->pict_type = FF_P_TYPE;        l->cur = !l->cur;    *data_size = sizeof(AVFrame);    *(AVFrame*)data = l->pic;        return buf_size;}