亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? video.cpp

?? This code is based on mpeg_play, available from: http://bmrc.berkeley.edu/frame/research/mpeg/
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
 *    A pointer to the new PictImage structure. * * Side effects: *    None. * *-------------------------------------------------------------- */PictImage* NewPictImage( VidStream* vid_stream, int w, int h, SDL_Surface *dst ){    PictImage* pi;    /* Allocate memory space for pi structure. */    pi = (PictImage *) malloc(sizeof(PictImage));    /* Create a YV12 image (Y + V + U) */#ifdef USE_ATI    pi->image = vhar128_newimage(vid_stream->ati_handle, w, h);#else    pi->image = (unsigned char *) malloc(w*h*12/8);    pi->luminance = (unsigned char *)pi->image;    pi->Cr = pi->luminance + (w*h);    pi->Cb = pi->luminance + (w*h) + (w*h)/4;#endif      /* Alloc space for filter info */    pi->mb_qscale = (unsigned short int *) malloc(vid_stream->mb_width * vid_stream->mb_height * sizeof(unsigned int));    /* Reset locked flag. */      pi->locked = 0;    /* Return pointer to pi structure. */    return pi;}bool InitPictImages( VidStream* vid_stream, int w, int h, SDL_Surface* dst ){    int i;    vid_stream->current = vid_stream->past = vid_stream->future = NULL;    for (i = 0; i < RING_BUF_SIZE; i++) {        if ( vid_stream->ring[i] ) {            DestroyPictImage(vid_stream, vid_stream->ring[i]);        }        vid_stream->ring[i] = NewPictImage( vid_stream, w, h, dst );        if ( ! vid_stream->ring[i] )            return false;    }#ifdef USE_ATI    struct vhar128_image * ring[RING_BUF_SIZE];    for (i = 0; i < RING_BUF_SIZE; i++) {      ring[i] = vid_stream->ring[i]->image;    }    vhar128_init(vid_stream->ati_handle, w, h, ring, RING_BUF_SIZE);#endif    return true;}/* *-------------------------------------------------------------- * * DestroyPictImage -- * *    Deallocates a PictImage structure. * * Results: *    None. * * Side effects: *    None. * *-------------------------------------------------------------- */void DestroyPictImage( VidStream* vid_stream, PictImage* apictimage ){#ifdef USE_ATI  vhar128_destroyimage(vid_stream->ati_handle, apictimage->image);#else  if (apictimage->image != NULL) free(apictimage->image);#endif  free(apictimage->mb_qscale);  free(apictimage);}/* *-------------------------------------------------------------- * * mpegVidRsrc -- * *      Parses bit stream until MB_QUANTUM number of *      macroblocks have been decoded or current slice or *      picture ends, whichever comes first. If the start *      of a frame is encountered, the frame is time stamped *      with the value passed in time_stamp. If the value *      passed in buffer is not null, the video stream buffer *      is set to buffer and the length of the buffer is *      expected in value passed in through length. * * Results: *      A pointer to the video stream structure used. * * Side effects: *      Bit stream is irreversibly parsed. If a picture is completed, *      a function is called to display the frame at the correct time. * *-------------------------------------------------------------- */VidStream* mpegVidRsrc( TimeStamp time_stamp, VidStream* vid_stream, int first ){    unsigned int data;    int i, status;    /*    * If called for the first time, find start code, make sure it is a    * sequence start code.    */    if( first )    {        vid_stream->num_left       = 0;        vid_stream->leftover_bytes = 0;        vid_stream->Parse_done     = FALSE;        next_start_code(vid_stream);  /* sets curBits */        show_bits32(data);        if( data != SEQ_START_CODE )        {            vid_stream->_smpeg->SetError("Invalid sequence in video stream");            /* Let whoever called NewVidStream call DestroyVidStream - KR            DestroyVidStream( vid_stream );            */            return 0;        }    }    else    {#ifdef UTIL2        vid_stream->curBits = *vid_stream->buffer << vid_stream->bit_offset;#else        vid_stream->curBits = *vid_stream->buffer;#endif    }    /* Get next 32 bits (size of start codes). */    show_bits32(data);    /* Check for end of file */    if(vid_stream->EOF_flag)    {        /* Display last frame if not looping */	if(!vid_stream->_smpeg->mpeg->is_looping())	{	  /* Set ended flag first so that ExecuteDisplay may check it. */	  vid_stream->film_has_ended = TRUE;	  if( vid_stream->future != NULL )	  {            vid_stream->current = vid_stream->future;            vid_stream->_smpeg->ExecuteDisplay( vid_stream );	  }#ifdef ANALYSIS	  PrintAllStats(vid_stream);#endif	  goto done;	}	else	  vid_stream->EOF_flag = 0;    }    /*    * Process according to start code (or parse macroblock if not a start code    * at all).    */    switch( data )    {    case SEQ_END_CODE:    case 0x000001b9:   /*  handle ISO_11172_END_CODE too */#ifdef VERBOSE_DEBUG        printf("SEQ_END_CODE\n");#endif        flush_bits32;        goto done;        break;    case SEQ_START_CODE:        /* Sequence start code. Parse sequence header. */#ifdef VERBOSE_DEBUG        printf("SEQ_START_CODE\n");#endif        if( ParseSeqHead( vid_stream ) != PARSE_OK )        {            fprintf( stderr, "mpegVidRsrc ParseSeqHead\n" );            goto error;        }        /*        * Return after sequence start code so that application above can use        * info in header.        */        goto done;    case GOP_START_CODE:        /* Group of Pictures start code. Parse gop header. */#ifdef VERBOSE_DEBUG        printf("GOP_START_CODE\n");#endif        if( ParseGOP(vid_stream) != PARSE_OK )        {            fprintf( stderr, "mpegVidRsrc ParseGOP\n" );            goto error;        }	/* need adjust current_frame (after Seek) */	if (vid_stream->need_frameadjust) {		int prev;		prev = vid_stream->totNumFrames;		vid_stream->current_frame = (int)		(		vid_stream->group.tc_hours * 3600 * vid_stream->rate_deal +		vid_stream->group.tc_minutes * 60 * vid_stream->rate_deal +		vid_stream->group.tc_seconds * vid_stream->rate_deal +		vid_stream->group.tc_pictures);		vid_stream->need_frameadjust=false;		vid_stream->totNumFrames=vid_stream->current_frame;#if 0	printf("Adjusted Frame %d -> %d\n",prev,vid_stream->current_frame);#endif	}        goto done;    case PICTURE_START_CODE:        /* Picture start code. Parse picture header and first slice header. */#ifdef VERBOSE_DEBUG        printf("PICTURE_START_CODE\n");#endif	if (vid_stream->timestamp_mark < vid_stream->buffer	    && !vid_stream->timestamp_used){	  vid_stream->timestamp_used = true;	  status = ParsePicture( vid_stream, vid_stream->timestamp );	} else	  status = ParsePicture( vid_stream, -1);        if((vid_stream->picture.code_type == B_TYPE) &&            vid_stream->_skipFrame && (vid_stream->_jumpFrame < 0))        {            status = SKIP_PICTURE;        }		if( !vid_stream->current )	    status = SKIP_PICTURE;        if( status == SKIP_PICTURE )        {            //fprintf( stderr, "%d\r", vid_stream->totNumFrames );            next_start_code( vid_stream );            while( ! next_bits( 32, PICTURE_START_CODE, vid_stream ) )            {                if( next_bits( 32, GOP_START_CODE, vid_stream) )                    break;                else if( next_bits( 32, SEQ_END_CODE, vid_stream ) )                    break;                flush_bits( 24 );                next_start_code( vid_stream );            }            vid_stream->_smpeg->timeSync( vid_stream );            goto done;        }        else if( status != PARSE_OK )        {            fprintf( stderr, "mpegVidRsrc ParsePicture\n" );            goto error;        }        if( ParseSlice(vid_stream) != PARSE_OK )        {            fprintf( stderr, "mpegVidRsrc ParseSlice\n" );            goto error;        }        break;    case SEQUENCE_ERROR_CODE:#ifdef VERBOSE_DEBUG        printf("SEQUENCE_ERROR_CODE\n");#endif        flush_bits32;        next_start_code(vid_stream);        goto done;    default:	/* No base picture for decoding */	if( !vid_stream->current )	{	    flush_bits32;	    next_start_code(vid_stream);#ifdef VERBOSE_DEBUG            printf("No base picture, flushing to next start code\n");#endif	    goto done;	}        /* Check for slice start code. */        if( (data >= SLICE_MIN_START_CODE) && (data <= SLICE_MAX_START_CODE) )        {            /* Slice start code. Parse slice header. */            if( ParseSlice(vid_stream) != PARSE_OK )            {                fprintf( stderr, "mpegVidRsrc ParseSlice\n" );                goto error;            }        }#ifdef VERBOSE_DEBUG        else            fprintf(stderr, "Unknown data [%x] - not slice start code!\n", data);#endif        break;    }    /* Parse next MB_QUANTUM macroblocks. */    for( i = 0; i < MB_QUANTUM; i++ )    {        /* Check to see if actually a startcode and not a macroblock. */        if( ! next_bits( 23, 0x00000000, vid_stream ) &&            ! vid_stream->film_has_ended )        {            /* Not start code. Parse Macroblock. */            if (ParseMacroBlock(vid_stream) != PARSE_OK)            {#ifdef VERBOSE_WARNINGS                fprintf( stderr, "mpegVidRsrc ParseMacroBlock\n" );#endif                goto error;            }        }        else        {            /* Not macroblock, actually start code. Get start code. */            next_start_code(vid_stream);            show_bits32(data);            /*            * If start code is outside range of slice start codes, frame is            * complete, display frame.            */            if( ((data<SLICE_MIN_START_CODE) || (data>SLICE_MAX_START_CODE)) &&                (data != SEQUENCE_ERROR_CODE) )            {                DoPictureDisplay( vid_stream );            }            goto done;        }    }    /* Check if we just finished a picture on the MB_QUANTUMth macroblock */    if( next_bits( 23, 0x00000000, vid_stream ) )    {        next_start_code(vid_stream);        show_bits32(data);        if( (data < SLICE_MIN_START_CODE) || (data > SLICE_MAX_START_CODE) )        {            DoPictureDisplay( vid_stream );        }    }    goto done;error:    next_start_code( vid_stream );    return vid_stream;done:    return vid_stream;}/* *-------------------------------------------------------------- * * ParseSeqHead -- * *      Assumes bit stream is at the begining of the sequence *      header start code. Parses off the sequence header. * * Results: *      Fills the vid_stream structure with values derived and *      decoded from the sequence header. Allocates the pict image *      structures based on the dimensions of the image space *      found in the sequence header. * * Side effects: *      Bit stream irreversibly parsed off. * *-------------------------------------------------------------- */static int ParseSeqHead( VidStream* vid_stream ){  unsigned int data;  int i, j;#ifndef DISABLE_DITHER  int ditherType=vid_stream->ditherType;#endif  /* Flush off sequence start code. */  flush_bits32;  /* Get horizontal size of image space. */  get_bits12(data);  vid_stream->h_size = (data + 15) & ~15;  /* Get vertical size of image space. */  get_bits12(data);  vid_stream->v_size = (data + 15) & ~15;  /* Calculate macroblock width and height of image space. */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲丝袜精品丝袜在线| 国产成人午夜视频| 国产精品一级黄| 欧美日韩免费在线视频| 欧美激情在线一区二区三区| 亚洲成人综合网站| 91美女视频网站| 国产色婷婷亚洲99精品小说| 日韩精品1区2区3区| 91视频免费观看| 久久久国产一区二区三区四区小说 | 日韩三级免费观看| 亚洲综合一二区| 91色综合久久久久婷婷| 日本一区二区三区视频视频| 免费观看成人av| 在线综合视频播放| 亚洲动漫第一页| 色播五月激情综合网| 亚洲国产精品激情在线观看 | 日韩一区二区三区在线观看 | 国产精品欧美经典| 国产一区二区调教| 欧美大胆人体bbbb| 青娱乐精品在线视频| 欧美日韩精品二区第二页| 亚洲精品午夜久久久| 99久久精品免费看国产免费软件| 精品对白一区国产伦| 久久精品国产久精国产爱| 欧美一级片在线看| 日本中文字幕一区二区视频 | 91丨porny丨国产入口| 国产欧美日韩在线观看| 国产福利91精品一区| 国产欧美日韩另类一区| 国产91精品精华液一区二区三区| 欧美国产一区二区在线观看| 国产成人精品在线看| 亚洲国产精品成人综合| 成人免费视频caoporn| 国产精品久线在线观看| 91视频免费播放| 亚洲一区二区精品久久av| 欧美色综合久久| 日韩高清欧美激情| 精品少妇一区二区三区在线播放| 看电影不卡的网站| 日本一区二区三区久久久久久久久不| 国产精品1024久久| 亚洲精品乱码久久久久久久久| 色老头久久综合| 日本美女视频一区二区| 日韩欧美国产综合| 国产suv一区二区三区88区| 国产精品人妖ts系列视频| 色综合久久中文综合久久牛| 亚洲国产sm捆绑调教视频| 欧美mv和日韩mv的网站| 99精品久久只有精品| 日韩精品福利网| 国产欧美精品区一区二区三区| 91免费看`日韩一区二区| 午夜精品国产更新| 国产亚洲一区二区在线观看| 91蜜桃在线免费视频| 久久成人免费网| 亚洲狼人国产精品| 久久亚洲二区三区| 欧美视频一区二区三区四区 | 一区二区欧美国产| 久久影院电视剧免费观看| 91蜜桃免费观看视频| 免费的成人av| 亚洲欧美一区二区三区久本道91| 91麻豆精品国产91久久久| 国产1区2区3区精品美女| 亚洲大尺度视频在线观看| 久久精品免视看| 制服.丝袜.亚洲.另类.中文| av一区二区三区| 久久精品国产免费| 一区二区三区不卡视频在线观看 | 欧美国产一区二区在线观看 | 99久久精品国产一区| 美女免费视频一区| 亚洲五月六月丁香激情| 国产精品久久777777| 日韩精品自拍偷拍| 欧美日韩国产bt| 91丨porny丨最新| 风间由美一区二区三区在线观看 | 国产精品亚洲专一区二区三区| 亚洲一卡二卡三卡四卡| 国产精品高清亚洲| 国产人成亚洲第一网站在线播放| 欧美一区二区三级| 欧美日韩在线不卡| 日本高清免费不卡视频| 波多野结衣中文一区| 国产成人av影院| 狠狠色丁香久久婷婷综| 日本视频在线一区| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲国产成人tv| 亚洲高清免费视频| 午夜av一区二区| 亚洲一区av在线| 亚洲第一成人在线| 亚洲午夜私人影院| 亚洲成人1区2区| 亚洲一卡二卡三卡四卡| 亚洲主播在线观看| 樱花草国产18久久久久| 一区二区三区在线观看视频| 亚洲欧洲精品成人久久奇米网| 久久综合av免费| 国产喷白浆一区二区三区| 国产欧美一区二区三区鸳鸯浴| 久久久亚洲午夜电影| 久久毛片高清国产| 久久精品人人爽人人爽| 中文字幕成人av| 日韩毛片高清在线播放| 亚洲精品中文字幕乱码三区| 亚洲最新在线观看| 日韩中文字幕麻豆| 老汉av免费一区二区三区| 国产精品一色哟哟哟| 成人丝袜高跟foot| 日本丶国产丶欧美色综合| 欧洲一区二区三区在线| 538prom精品视频线放| 欧美精品一区在线观看| 国产精品区一区二区三| 亚洲精品国产无套在线观| 亚洲bt欧美bt精品777| 美女视频一区在线观看| 国产精品66部| 色婷婷香蕉在线一区二区| 欧美精品1区2区| 亚洲精品在线观| 亚洲色欲色欲www在线观看| 偷拍一区二区三区| 国产成人无遮挡在线视频| 一本色道久久综合精品竹菊| 欧美日韩成人一区| 国产欧美精品区一区二区三区 | 色综合久久久久网| 欧美一区二区美女| 国产欧美日韩在线视频| 亚洲一区二区视频在线| 国产一区91精品张津瑜| 99国产精品国产精品久久| 在线播放欧美女士性生活| 欧美激情一区二区三区不卡 | 日韩高清不卡一区二区| 国产99一区视频免费| 欧美艳星brazzers| 国产色91在线| 日韩电影一二三区| 99久久精品情趣| 2017欧美狠狠色| 亚洲综合丝袜美腿| 成人黄动漫网站免费app| 日韩一区二区三区观看| 亚洲激情欧美激情| 国产激情视频一区二区三区欧美| 日本韩国欧美三级| 国产欧美日韩视频一区二区| 视频一区二区三区中文字幕| 成人av网在线| 欧美精品一区二区高清在线观看| 一区二区视频在线| 成人免费视频一区二区| 精品乱人伦一区二区三区| 五月婷婷另类国产| 欧美亚洲综合一区| 中文字幕字幕中文在线中不卡视频| 成人av免费网站| 久久亚洲精精品中文字幕早川悠里| 亚洲成av人**亚洲成av**| 99久久精品国产观看| 久久婷婷久久一区二区三区| 同产精品九九九| 欧美性大战xxxxx久久久| 亚洲少妇中出一区| 99视频有精品| 亚洲人成精品久久久久| 成人激情小说网站| 国产精品久久久爽爽爽麻豆色哟哟| 久久99国产精品久久99| 日韩免费电影网站| 免费成人在线播放| 日韩一级免费观看| 久久精品国产一区二区三 | 国产欧美精品一区二区色综合朱莉| 精品一区免费av| 精品国产一区二区三区久久久蜜月| 美女mm1313爽爽久久久蜜臀|