Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37777978
en ru br
ALT Linux repos
S:6.0-alt2.1
D:0.5.0-alt0.14329.1
5.0: 15151-alt5.M50.1
4.1: 11656-alt1.M41.1
4.0: 10629-alt3.M40.0
3.0: 0.4.9-alt2cvs20050406

Group :: Video
RPM: ffmpeg

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: ffmpeg-11656-xvmc-support.patch
Download


 libavcodec/allcodecs.c   |    1 -
 libavcodec/mpeg12.c      |   65 ------------
 libavcodec/xvmc_render.h |   12 ---
 libavcodec/xvmcvideo.c   |  244 ----------------------------------------------
 libavutil/avutil.h       |    1 -
 5 files changed, 0 insertions(+), 323 deletions(-)
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index e2ade74..cef93ff 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -104,7 +104,6 @@ void avcodec_register_all(void)
     REGISTER_ENCDEC  (MJPEG, mjpeg);
     REGISTER_DECODER (MJPEGB, mjpegb);
     REGISTER_DECODER (MMVIDEO, mmvideo);
-    REGISTER_DECODER (MPEG_XVMC_VLD, mpeg_xvmc_vld);
     REGISTER_DECODER (MPEG_XVMC, mpeg_xvmc);
     REGISTER_ENCDEC  (MPEG1VIDEO, mpeg1video);
     REGISTER_ENCDEC  (MPEG2VIDEO, mpeg2video);
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index 17d9b94..5b006c3 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -70,13 +70,6 @@ extern int XVMC_field_end(MpegEncContext *s);
 extern void XVMC_pack_pblocks(MpegEncContext *s,int cbp);
 extern void XVMC_init_block(MpegEncContext *s);//set s->block
 
-
-#ifdef HAVE_XVMC_VLD
-extern int XVMC_decode_slice(MpegEncContext *s, int start_code,
-                                 uint8_t *buffer, int buf_size);
-int has_xvmc_vld = 0;
-#endif
-
 static const enum PixelFormat pixfmt_yuv_420[]= {PIX_FMT_YUV420P,-1};
 static const enum PixelFormat pixfmt_yuv_422[]= {PIX_FMT_YUV422P,-1};
 static const enum PixelFormat pixfmt_yuv_444[]= {PIX_FMT_YUV444P,-1};
@@ -84,11 +77,6 @@ static const enum PixelFormat pixfmt_xvmc_mpg2_420[] = {
                                            PIX_FMT_XVMC_MPEG2_IDCT,
                                            PIX_FMT_XVMC_MPEG2_MC,
                                            -1};
-static const enum PixelFormat pixfmt_xvmc_vld_mpg2_420[] = {
-                                           PIX_FMT_XVMC_MPEG2_VLD,
-                                           PIX_FMT_XVMC_MPEG2_IDCT,
-                                           PIX_FMT_XVMC_MPEG2_MC,
-                                           -1};
 
 uint8_t ff_mpeg12_static_rl_table_store[2][2][2*MAX_RUN + MAX_LEVEL + 3];
 
@@ -1325,9 +1313,6 @@ static int mpeg_decode_postinit(AVCodecContext *avctx){
         }//mpeg2
 
         if(avctx->xvmc_acceleration){
-            if (has_xvmc_vld)
-                avctx->pix_fmt = avctx->get_format(avctx,pixfmt_xvmc_vld_mpg2_420);
-            else
             avctx->pix_fmt = avctx->get_format(avctx,pixfmt_xvmc_mpg2_420);
         }else{
             if(s->chroma_format <  2){
@@ -1697,16 +1682,6 @@ static int mpeg_decode_slice(Mpeg1Context *s1, int mb_y,
         return -1;
     }
 
-#ifdef HAVE_XVMC_VLD
-    if (s->avctx->xvmc_acceleration == 4){
-        int used = XVMC_decode_slice(s, mb_y, *buf, buf_size);
-        if (used < 0)
-            return DECODE_SLICE_ERROR;
-        *buf += used - 1;
-        return DECODE_SLICE_OK;
-    }
-#endif
-
     init_get_bits(&s->gb, *buf, buf_size*8);
 
     ff_mpeg1_clean_buffers(s);
@@ -2102,9 +2077,6 @@ static int vcr2_init_sequence(AVCodecContext *avctx)
     s->low_delay= 1;
 
     if(avctx->xvmc_acceleration){
-        if (has_xvmc_vld)
-            avctx->pix_fmt = avctx->get_format(avctx,pixfmt_xvmc_vld_mpg2_420);
-        else
         avctx->pix_fmt = avctx->get_format(avctx,pixfmt_xvmc_mpg2_420);
     }else{
         avctx->pix_fmt = avctx->get_format(avctx,pixfmt_yuv_420);
@@ -2504,43 +2476,6 @@ AVCodec mpeg_xvmc_decoder = {
 
 #endif
 
-#ifdef HAVE_XVMC_VLD
-static int mpeg_xxmc_decode_init(AVCodecContext *avctx){
-    Mpeg1Context *s;
-    if (!has_xvmc_vld)
-        return mpeg_mc_decode_init(avctx);
-    if( avctx->thread_count > 1)
-        return -1;
-    if( !(avctx->slice_flags & SLICE_FLAG_CODED_ORDER) )
-        return -1;
-    if( !(avctx->slice_flags & SLICE_FLAG_ALLOW_FIELD) )
-        dprintf("mpeg12.c: XVMC_VLD decoder will work better if SLICE_FLAG_ALLOW_FIELD is set\n");
-
-    mpeg_decode_init(avctx);
-    s = avctx->priv_data;
-
-    avctx->pix_fmt = PIX_FMT_XVMC_MPEG2_VLD;
-    avctx->xvmc_acceleration = 4;
-
-    return 0;
-}
-
-AVCodec mpeg_xvmc_vld_decoder = {
-    "mpegvideo_xvmc",
-    CODEC_TYPE_VIDEO,
-    CODEC_ID_MPEG2VIDEO_XVMC,
-    sizeof(Mpeg1Context),
-    mpeg_xxmc_decode_init,
-    NULL,
-    mpeg_decode_end,
-    mpeg_decode_frame,
-    CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED| CODEC_CAP_HWACCEL,
-    .flush= ff_mpeg_flush,
-};
-
-#endif
-
-
 /* this is ugly i know, but the alternative is too make
    hundreds of vars global and prefix them with ff_mpeg1_
    which is far uglier. */
diff --git a/libavcodec/xvmc_render.h b/libavcodec/xvmc_render.h
index 0cc52b3..10fd56f 100644
--- a/libavcodec/xvmc_render.h
+++ b/libavcodec/xvmc_render.h
@@ -28,9 +28,6 @@
 #include <X11/extensions/Xvlib.h>
 #include <X11/extensions/XvMClib.h>
 
-#ifdef HAVE_XVMC_VLD
-#include <X11/extensions/vldXvMC.h>
-#endif
 
 //the surface should be shown, video driver manipulates this
 #define MP_XVMC_STATE_DISPLAY_PENDING 1
@@ -53,15 +50,6 @@ typedef   struct{
   int idct;//Do we use IDCT acceleration?
   int chroma_format;//420,422,444
   int unsigned_intra;//+-128 for intra pictures after clip
-#ifdef HAVE_XVMC_VLD
-  // These are for the XVMC VLD slice interface
-  int pict_type; //this is for skipping frames
-  int slice_code; 
-  int slice_datalen;
-  unsigned char *slice_data;
-  Display *disp;
-  XvMCContext *ctx;
-#endif
   XvMCSurface* p_surface;//pointer to rendered surface, never changed
 
 //these are changed by decoder
diff --git a/libavcodec/xvmcvideo.c b/libavcodec/xvmcvideo.c
index d3eeae7..1a112e1 100644
--- a/libavcodec/xvmcvideo.c
+++ b/libavcodec/xvmcvideo.c
@@ -68,68 +68,11 @@ const int mb_block_count = 4+(1<<s->chroma_format);
     }
 }
 
-#ifdef HAVE_XVMC_VLD
-static XvMCSurface* findPastSurface(MpegEncContext *s,
-                                    xvmc_render_state_t *render)
-{
-    Picture *lastp = s->last_picture_ptr;
-    xvmc_render_state_t *last = NULL;
-
-    if (NULL!=lastp) {
-        last = (xvmc_render_state_t*)(lastp->data[2]);
-        if (B_TYPE==last->pict_type)
-            av_log(s->avctx,AV_LOG_DEBUG, "Past frame is a B frame in findPastSurface, this is bad.\n");
-        //assert(B_TYPE!=last->pict_type);
-    }
-
-    if (NULL==last)
-        if (!s->first_field)
-            last = render; // predict second field from the first
-        else
-            return 0;
-
-    if (last->magic != MP_XVMC_RENDER_MAGIC)
-        return 0;
-
-    return (last->state & MP_XVMC_STATE_PREDICTION) ? last->p_surface : 0;
-}
-
-static XvMCSurface* findFutureSurface(MpegEncContext *s)
-{
-    Picture *nextp = s->next_picture_ptr;
-    xvmc_render_state_t *next = NULL;
-
-    if (NULL!=nextp) {
-        next = (xvmc_render_state_t*)(nextp->data[2]);
-        if (B_TYPE==next->pict_type)
-            av_log(s->avctx,AV_LOG_DEBUG, "Next frame is a B frame in findFutureSurface, thisis bad.\n");
-        //assert(B_TYPE!=next->pict_type);
-    }
-
-    assert(NULL!=next);
-
-    if (next->magic != MP_XVMC_RENDER_MAGIC)
-        return 0;
-
-    return (next->state & MP_XVMC_STATE_PREDICTION) ? next->p_surface : 0;
-}
-#endif //HAVE_XVMC_VLD
-
 //these functions should be called on every new field or/and frame
 //They should be safe if they are called few times for same field!
 int XVMC_field_start(MpegEncContext*s, AVCodecContext *avctx){
 xvmc_render_state_t * render,* last, * next;
 
-#ifdef HAVE_XVMC_VLD
-    XvMCMpegControl     binfo;
-    XvMCQMatrix         qmatrix;
-    int                 i;
-    Status              status;
-
-    memset(&binfo, 0, sizeof(binfo));
-    memset(&qmatrix, 0, sizeof(qmatrix));
-#endif
-
     assert(avctx != NULL);
 
     render = (xvmc_render_state_t*)s->current_picture.data[2];
@@ -140,53 +83,12 @@ xvmc_render_state_t * render,* last, * next;
     render->picture_structure = s->picture_structure;
     render->flags = (s->first_field)? 0: XVMC_SECOND_FIELD;
 
-#ifdef HAVE_XVMC_VLD
-    if (s->avctx->xvmc_acceleration == 4)
-    {
-        if (render->picture_structure == PICT_FRAME)
-            render->flags |= XVMC_FRAME_PICTURE;
-        else if (render->picture_structure == PICT_TOP_FIELD)
-            render->flags |= XVMC_TOP_FIELD;
-        else if (render->picture_structure == PICT_BOTTOM_FIELD)
-            render->flags |= XVMC_BOTTOM_FIELD;
-    }
-    else
-#endif
-    {
 //make sure that all data is drawn by XVMC_end_frame
     assert(render->filled_mv_blocks_num==0);
-    }
 
     render->p_future_surface = NULL;
     render->p_past_surface = NULL;
 
-    render->pict_type = s->pict_type; // for later frame dropping use
-
-#ifdef HAVE_XVMC_VLD
-    if (s->avctx->xvmc_acceleration == 4)
-{
-    switch(s->pict_type){
-        case  I_TYPE:
-            break;
-        case  B_TYPE:
-            render->p_past_surface = findPastSurface(s, render);
-            render->p_future_surface = findFutureSurface(s);
-            if (!render->p_past_surface)
-                av_log(avctx, AV_LOG_ERROR, "error: decoding B frame and past frame is null!");
-            else if (!render->p_future_surface)
-                av_log(avctx, AV_LOG_ERROR, "error: decoding B frame and future frame is null!");
-            break;
-            
-        case  P_TYPE:
-            render->p_past_surface = findPastSurface(s, render);
-            render->p_future_surface = render->p_surface;
-            if (!render->p_past_surface)
-                av_log(avctx, AV_LOG_ERROR, "error: decoding P frame and past frame is null!");
-            break;
-    }
-} else
-#endif
-{
     switch(s->pict_type){
         case  I_TYPE:
             return 0;// no prediction from other frames
@@ -207,94 +109,6 @@ xvmc_render_state_t * render,* last, * next;
             render->p_past_surface = last->p_surface;
             return 0;
     }
-}
-
-#ifdef HAVE_XVMC_VLD
-    if (s->avctx->xvmc_acceleration == 4)
-    {
-        for (i = 0; i < 64; i++){
-        qmatrix.intra_quantiser_matrix[i] = s->intra_matrix[s->dsp.idct_permutation[i]];
-        qmatrix.non_intra_quantiser_matrix[i] = s->inter_matrix[s->dsp.idct_permutation[i]];
-        qmatrix.chroma_intra_quantiser_matrix[i] = s->chroma_intra_matrix[s->dsp.idct_permutation[i]];
-        qmatrix.chroma_non_intra_quantiser_matrix[i] = s->chroma_inter_matrix[s->dsp.idct_permutation[i]];
-        }
-
-    qmatrix.load_intra_quantiser_matrix = 1;
-    qmatrix.load_non_intra_quantiser_matrix = 1;
-    qmatrix.load_chroma_intra_quantiser_matrix = 1;
-    qmatrix.load_chroma_non_intra_quantiser_matrix = 1;
-
-
-    binfo.flags = 0;
-    if (s->alternate_scan)
-        binfo.flags |= XVMC_ALTERNATE_SCAN;
-    if (s->top_field_first)
-        binfo.flags |= XVMC_TOP_FIELD_FIRST;
-    if (s->frame_pred_frame_dct)
-        binfo.flags |= XVMC_PRED_DCT_FRAME;
-    else
-        binfo.flags |= XVMC_PRED_DCT_FIELD;
-
-    if (s->intra_vlc_format)
-        binfo.flags |= XVMC_INTRA_VLC_FORMAT;
-    if (!s->first_field && !s->progressive_sequence)
-        binfo.flags |= XVMC_SECOND_FIELD;
-    if (s->q_scale_type)
-        binfo.flags |= XVMC_Q_SCALE_TYPE;
-    if (s->concealment_motion_vectors)
-        binfo.flags |= XVMC_CONCEALMENT_MOTION_VECTORS;
-    if (s->progressive_sequence)
-        binfo.flags |= XVMC_PROGRESSIVE_SEQUENCE;
-
-    binfo.picture_structure = s->picture_structure;
-    switch (s->pict_type)
-    {
-    case I_TYPE:    binfo.picture_coding_type = XVMC_I_PICTURE;     break;
-    case P_TYPE:    binfo.picture_coding_type = XVMC_P_PICTURE;     break;
-    case B_TYPE:    binfo.picture_coding_type = XVMC_B_PICTURE;     break;
-    default:    av_log(avctx, AV_LOG_ERROR, "%s: Unknown picture coding type: %d\n", __FUNCTION__, s->pict_type);
-    }
-
-    binfo.intra_dc_precision = s->intra_dc_precision;;
-
-    if (s->codec_id == CODEC_ID_MPEG2VIDEO)
-        binfo.mpeg_coding = 2;
-    else
-        binfo.mpeg_coding = 1;
-
-    s->mb_width = (s->width + 15) / 16;
-    s->mb_height = (s->codec_id == CODEC_ID_MPEG2VIDEO && !s->progressive_sequence) ?
-        2 * ((s->height + 31) / 32) : (s->height + 15) / 16;
-
-    if (s->codec_id == CODEC_ID_MPEG2VIDEO)
-{
-    binfo.FVMV_range = (s->mpeg_f_code[0][1] - 1);
-    binfo.FHMV_range = (s->mpeg_f_code[0][0] - 1);
-    binfo.BVMV_range = (s->mpeg_f_code[1][1] - 1);
-    binfo.BHMV_range = (s->mpeg_f_code[1][0] - 1);
-}
-else
-{
-    binfo.FVMV_range = (s->mpeg_f_code[0][0] - 1);
-    binfo.FHMV_range = (s->mpeg_f_code[0][0] - 1);
-    binfo.BVMV_range = (s->mpeg_f_code[1][1] - 1);
-    binfo.BHMV_range = (s->mpeg_f_code[1][1] - 1);
-}
-
-    status = XvMCLoadQMatrix(render->disp, render->ctx, &qmatrix);
-    if (status)
-        av_log(avctx,AV_LOG_ERROR, "XvMCLoadQMatrix: Error: %d\n", status);
-
-    status = XvMCBeginSurface(render->disp, render->ctx, render->p_surface,
-                              render->p_past_surface, render->p_future_surface,
-                              &binfo);
-    if (status)
-        av_log(avctx,AV_LOG_ERROR, "XvMCBeginSurface: Error: %d\n", status);
-
-    if (!status)
-        return 0;
-    }
-#endif
 
 return -1;
 }
@@ -304,23 +118,11 @@ xvmc_render_state_t * render;
     render = (xvmc_render_state_t*)s->current_picture.data[2];
     assert(render != NULL);
 
-#ifdef HAVE_XVMC_VLD
-    if (s->avctx->xvmc_acceleration == 4)
-    {
-        XvMCFlushSurface(render->disp, render->p_surface);
-        XvMCSyncSurface(render->disp, render->p_surface);
-
-    	s->error_count = 0;
-    }
-    else
-#endif
-    {
     if(render->filled_mv_blocks_num > 0){
 //        printf("xvmcvideo.c: rendering %d left blocks after last slice!!!\n",render->filled_mv_blocks_num );
         ff_draw_horiz_band(s,0,0);
     }
 }
-}
 
 void XVMC_decode_mb(MpegEncContext *s){
 XvMCMacroBlock * mv_block;
@@ -509,50 +311,4 @@ const int mb_xy = s->mb_y * s->mb_stride + s->mb_x;
 
 }
 
-#ifdef HAVE_XVMC_VLD
-static int length_to_next_start(uint8_t* pbuf_ptr, int buf_size)
-{
-    uint8_t*    buf_ptr;
-    unsigned int    state = 0xFFFFFFFF, v;
-
-    buf_ptr = pbuf_ptr;
-    while (buf_ptr < pbuf_ptr + buf_size)
-    {
-        v = *buf_ptr++;
-        if (state == 0x000001) {
-            return buf_ptr - pbuf_ptr - 4;
-        }
-        state = ((state << 8) | v) & 0xffffff;
-    }
-    return -1;
-}
-
-#define SLICE_MIN_START_CODE   0x00000101
-#define SLICE_MAX_START_CODE   0x000001af
-
-void XVMC_decode_slice(MpegEncContext *s, int mb_y, uint8_t* buffer, int buf_size)
-{
-    int slicelen = length_to_next_start(buffer, buf_size);
-    xvmc_render_state_t*    render;
-
-    if (slicelen < 0)
-    {
-        if ((mb_y == s->mb_height - 1) || 
-            (!s->progressive_sequence && mb_y == (s->mb_height >> 1) -1) ||
-	    (s->codec_id != CODEC_ID_MPEG2VIDEO))
-            slicelen = buf_size;
-        else
-            return;
-    }
-
-    render = (xvmc_render_state_t*)s->current_picture.data[2];
-    render->slice_code = SLICE_MIN_START_CODE + mb_y;
-    render->slice_data = buffer;
-    render->slice_datalen = slicelen;
-
-    ff_draw_horiz_band(s, 0, 0);
-}
-#endif
-
 #endif
-
diff --git a/libavutil/avutil.h b/libavutil/avutil.h
index 31d40c2..8b424f5 100644
--- a/libavutil/avutil.h
+++ b/libavutil/avutil.h
@@ -87,7 +87,6 @@ enum PixelFormat {
     PIX_FMT_YUVJ444P,  ///< Planar YUV 4:4:4, 24bpp, full scale (jpeg)
     PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing(xvmc_render.h)
     PIX_FMT_XVMC_MPEG2_IDCT,
-    PIX_FMT_XVMC_MPEG2_VLD,
     PIX_FMT_UYVY422,   ///< Packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
     PIX_FMT_UYYVYY411, ///< Packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
     PIX_FMT_BGR32,     ///< Packed RGB 8:8:8, 32bpp, (msb)8A 8B 8G 8R(lsb), in cpu endianness
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin