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

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

?? mp4ebuff.c

?? Linux下的基于intel的ipp庫的MPEG4編碼程序
?? C
字號:
/******************************************************************************
//               INTEL CORPORATION PROPRIETARY INFORMATION
//  This software is supplied under the terms of a license agreement or
//  nondisclosure agreement with Intel Corporation and may not be copied
//  or disclosed except in accordance with the terms of that agreement.
//        Copyright (c) 2003 Intel Corporation. All Rights Reserved.
//
//  Description:    Stream buffer processing functions of MPEG-4 video encoder
//                  sample code for Intel(R) Integrated Performance Primitives.
//  Functions List:
//		put_bits_mpeg4()
//		dump_video_buffer()
//		load_extend_picture()
//      init_output_video_buffer()
//      release_output_video_buffer()
******************************************************************************/

#include <memory.h>
#include <malloc.h>
#include "sampmp4.h"

/******************************************************************************
// Name:            load_extend_picture
// Description:     Load one frame (picture) of YUV4:2:0 raw data to buffer,
//                  and expand its height and width to be multiples of 16.
//
// Input Arguments:
//		fpin        Pointer to input file stream buffer
//      pic	        Pointer to input bitstream buffer structure of MPEG-4
//                  encoder
//
// Output Arguments:
//      pic         Pointer to updated input bitstream buffer structure of
//                  MPEG-4 encoder with loaded raw data.
//
// Return:  None
******************************************************************************/
void load_extend_picture(FILE *fpin, sample_picture *pic)
{    
    Ipp8u *tmp_ptr = NULL;
    int   i = 0, j = 0, w_rim = 0, h_rim = 0;
    
    /* copy y plane */
    tmp_ptr = pic->pic_plane[0];
    for (i = 0; i < pic->pic_height; i++) {
        fread((void*)tmp_ptr, 1, pic->pic_width, fpin);
        tmp_ptr += pic->pic_plane_step[0];
    }

    /* copy u plane */
    tmp_ptr = pic->pic_plane[1];
    for (i = 0; i < pic->pic_height/2; i++) {
        fread((void*)tmp_ptr, 1, pic->pic_width/2, fpin);
        tmp_ptr += pic->pic_plane_step[1];
    }

    /* copy v plane */
    tmp_ptr = pic->pic_plane[2];
    for (i = 0; i < pic->pic_height/2; i++) {
        fread((void*)tmp_ptr, 1, pic->pic_width/2, fpin);
        tmp_ptr += pic->pic_plane_step[2];
    }

    /* extend the picture width to be mutiples of MacroBlocks */
    w_rim = pic->pic_width & 15;
    if (w_rim) {
        w_rim = 16 - w_rim;
        /* entend y plane */
        tmp_ptr = (Ipp8u*)pic->pic_plane[0] + pic->pic_width - 1;
        for (i = 0; i < pic->pic_height; i++) {            
            for (j = 1; j <= w_rim; j++) {
                tmp_ptr[j] = tmp_ptr[0];
            }
            tmp_ptr += pic->pic_plane_step[0];
        }
        
        /* extend u plane */
        tmp_ptr = (Ipp8u*)pic->pic_plane[1] + pic->pic_width/2 - 1;
        for (i = 0; i < pic->pic_height/2; i++) {
            for (j = 1; j <= w_rim/2; j++) {
                tmp_ptr[j] = tmp_ptr[0];
            }
            tmp_ptr += pic->pic_plane_step[1];
        }
        
        /* extend v plane */
        tmp_ptr = (Ipp8u*)pic->pic_plane[2] + pic->pic_width/2 - 1;
        for (i = 0; i < pic->pic_height/2; i++) {
            for (j = 1; j <= w_rim/2; j++) {
                tmp_ptr[j] = tmp_ptr[0];
            }
            tmp_ptr += pic->pic_plane_step[2];
        }
    }

    /* extend the picture height to mutiples of MacroBlocks */
    h_rim = pic->pic_height & 15;
    if (h_rim) {
        h_rim = 16 - h_rim;
        /* extend y plane */
        tmp_ptr = (Ipp8u*)pic->pic_plane[0] + pic->pic_plane_step[0]
            * (pic->pic_height - 1);
        for (i = 0; i < pic->pic_width + w_rim; i++) {
            for (j = 1; j <= h_rim; j++) {
                tmp_ptr[j * pic->pic_plane_step[0]] = tmp_ptr[0];
            }
            tmp_ptr ++;
        }
        
        /* extend u plane */
        tmp_ptr = (Ipp8u*)pic->pic_plane[1] + pic->pic_plane_step[1]
            * (pic->pic_height/2 - 1);
        for (i = 0; i < (pic->pic_width + w_rim)/2; i++) {
            for (j = 1; j <= h_rim/2; j++) {
                tmp_ptr[j * pic->pic_plane_step[1]] = tmp_ptr[0];
            }
            tmp_ptr ++;
        }

        /* extend v plane */
        tmp_ptr = (Ipp8u*)pic->pic_plane[2] + pic->pic_plane_step[2]
            * (pic->pic_height/2 - 1);
        for (i = 0; i < (pic->pic_width + w_rim)/2; i++) {
            for (j = 1; j <= h_rim/2; j++) {
                tmp_ptr[j * pic->pic_plane_step[2]] = tmp_ptr[0];
            }
            tmp_ptr ++;
        }
    }

    return;
}

/******************************************************************************
// Name:                put_bits_mpeg4
// Description:         Write N bits to output video buffer
// Input Arguments: 
//      stream_buf      Pointer to the destination compressed video bitstream
//      n_bits          Number of bits to write, i.e., N (N <= 32)
//      data            Data containing the N bits
//
//  Output Arguments:
//      stream_buf      Pointer to the updated output video stream after the N
//                      bits are filled in
//
//  Returns:    
//      None
******************************************************************************/
void put_bits_mpeg4(sample_bitstream *stream_buf, Ipp32u data, int n_bits)
{
    int odd_bits = 0, n_bytes = 0;

    /* input data is written in big endian */
    data = data << (32 - n_bits);

    if (stream_buf->bs_cur_bitoffset) {

        odd_bits = 8 - stream_buf->bs_cur_bitoffset;
        *stream_buf->bs_cur_byte++ |= data >> (32 - odd_bits);
        data    = data << odd_bits;
        n_bits -= odd_bits;        
    }

    if (0 < n_bits) {
        n_bytes = (n_bits + 7) / 8;
        while (n_bytes--) {
            *stream_buf->bs_cur_byte++ = (unsigned char)(data >> 24);
            data = data << 8;
        }
        stream_buf->bs_cur_bitoffset = n_bits & 7;
    } else {
        stream_buf->bs_cur_bitoffset  = (8 + n_bits) & 7;
    }

    if (stream_buf->bs_cur_bitoffset) {
        stream_buf->bs_cur_byte --;
    }
    return;
}


/******************************************************************************
// Name:                    dump_video_buffer
// Description:             Output video bitstream from buffer to file stream
//
// Input Arguments:
//      stream_buf          Pointer to the video bitstream buffer
//      fpout               Pointer to the output file stream
//
// Output Arguments:
//      stream_buf          Pointer to updated video bitstream buffer
//
// Returns:
//      SAMPLE_STATUS_NOERR If succeeds
//      SAMPLE_STATUS_ERR   If error occurs in writing data to file
******************************************************************************/
sample_status dump_video_buffer(sample_bitstream *stream_buf, FILE *fpout)
{
    unsigned int data_len = 0;
    
    data_len = stream_buf->bs_cur_byte - stream_buf->bs_buffer;
    if (fwrite((void*)stream_buf->bs_buffer, 1, data_len, fpout) != data_len) {
        return SAMPLE_STATUS_ERR;
    }
    
    if (stream_buf->bs_cur_bitoffset) {
        /* copy remaining bits */
        stream_buf->bs_buffer[0] = stream_buf->bs_cur_byte[0];
    }
    stream_buf->bs_cur_byte = stream_buf->bs_buffer;
    return SAMPLE_STATUS_NOERR;
}


/******************************************************************************
// Name:                        init_output_video_buffer
// Description:                 Initialize the output video bitstream buffer
//
// Input Arguments:
//      stream_buf              Pointer to output video bitstream buffer
//      size                    Bytes to allocate for the bitstream buffer
//
// Output Arguments:
//      stream_buf              Pointer to allocated video bitstream buffer
//
// Returns:
//     SAMPLE_STATUS_NOERR      If succeeds
//     SAMPLE_STATUS_NOMEM_ERR  If memory allocation fails
******************************************************************************/
sample_status init_output_video_buffer (sample_bitstream *stream_buf, int size)
{
    /* reset the struct to zeroes */
    memset((void*)stream_buf, 0, sizeof(sample_bitstream));

    /* initialize the output video bitstream buffer which is large enough
    // to store one compressed frame plus header */
    stream_buf->bs_buffer = (Ipp8u*)malloc(size);

    if (NULL == stream_buf->bs_buffer) {
        /* memory allocation fails */
        return SAMPLE_STATUS_NOMEM_ERR;
    }
    else {
        /* reset the newly allocated buffer to zeroes */
        memset (stream_buf->bs_buffer, 0, size);
    }

    /* set current pointer to the start of buffer for there's no data written
    // at beginning */
    stream_buf->bs_cur_byte = stream_buf->bs_buffer;
    stream_buf->bs_cur_bitoffset = 0;
    stream_buf->bs_bytelen = size;

    return SAMPLE_STATUS_NOERR;
}

/*****************************************************************************
// Name:                    release_output_video_buffer
// Description:             Release the output video bitstream buffer
//
// Input Arguments:
//      stream_buf          Pointer to output video bitstream buffer
//
// Output Arguments:
//      stream_buf          Pointer to released video bitstream buffer
//
// Returns:
//     SAMPLE_STATUS_NOERR  If succeeds
*****************************************************************************/
sample_status release_output_video_buffer (sample_bitstream *stream_buf)
{
    if (stream_buf->bs_buffer) {
        free(stream_buf->bs_buffer);
        stream_buf->bs_buffer = NULL;
    }

    return SAMPLE_STATUS_NOERR;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区成人久久免费影院| 亚洲国产精品二十页| 91.com视频| 亚洲男同性恋视频| 国产福利91精品一区二区三区| 欧洲亚洲精品在线| 国产精品美女一区二区在线观看| 蜜臀久久久99精品久久久久久| 97成人超碰视| 国产亚洲制服色| 欧美aaaaaa午夜精品| 日本韩国精品在线| 欧美国产日产图区| 国产九色精品成人porny| 91麻豆精品国产91久久久更新时间| 亚洲特黄一级片| 国产成人高清在线| 久久久影视传媒| 精品一区二区三区免费毛片爱 | 亚洲男人的天堂在线aⅴ视频| 久久超碰97中文字幕| 51精品久久久久久久蜜臀| 亚洲精品日韩一| 不卡高清视频专区| 国产精品国模大尺度视频| 国产东北露脸精品视频| 久久天堂av综合合色蜜桃网| 久久不见久久见中文字幕免费| 3d动漫精品啪啪1区2区免费| 亚洲成精国产精品女| 欧美日韩亚洲国产综合| 一区二区三区四区激情 | 欧美一区二区美女| 免费在线观看精品| 精品国产乱码久久久久久夜甘婷婷| 日韩电影在线观看网站| 欧美一区二区三区日韩| 久久99这里只有精品| 久久久www成人免费无遮挡大片| 国产成人鲁色资源国产91色综| 久久久久久久久99精品| 成人app网站| 亚洲综合一区二区精品导航| 欧美日韩一区三区四区| 日韩精品一卡二卡三卡四卡无卡| 国产日产欧美一区二区视频| 成人黄色777网| 亚洲一区影音先锋| 欧美一区二区三区日韩视频| 久久99精品一区二区三区| 国产蜜臀av在线一区二区三区 | 国产精品一区免费视频| 国产精品久久久久久亚洲毛片 | 亚洲男人的天堂在线aⅴ视频| 欧美三电影在线| 韩国视频一区二区| 亚洲欧洲另类国产综合| 91麻豆精品国产91久久久资源速度| 麻豆久久一区二区| 亚洲国产精品二十页| 欧美体内she精视频| 美女视频黄久久| 中文字幕一区在线观看视频| 欧美视频一区二区| 国产激情一区二区三区桃花岛亚洲| 国产精品国产三级国产| 欧美老年两性高潮| 岛国精品在线观看| 久久久青草青青国产亚洲免观| 色呦呦国产精品| 久久国产三级精品| 一区二区三区四区激情| 久久久久国产精品免费免费搜索| 94-欧美-setu| 韩国成人精品a∨在线观看| 伊人夜夜躁av伊人久久| 久久精品一区四区| 宅男在线国产精品| 色av成人天堂桃色av| 国产在线视视频有精品| 丝袜美腿亚洲综合| 亚洲天堂av一区| 国产精品视频九色porn| 日韩午夜电影在线观看| 欧美伊人精品成人久久综合97| 国产精品综合一区二区三区| 丝袜亚洲精品中文字幕一区| 亚洲欧美电影院| 国产精品久久国产精麻豆99网站| 日韩写真欧美这视频| 欧美日韩中字一区| 日本久久电影网| 99re成人精品视频| 国产jizzjizz一区二区| 国产呦萝稀缺另类资源| 免费的国产精品| 日本aⅴ亚洲精品中文乱码| 亚洲国产精品精华液网站| 综合久久久久久久| 中文字幕在线不卡一区| 久久精品视频一区二区三区| 日韩美女一区二区三区四区| 国产人久久人人人人爽| 欧美mv日韩mv国产网站| 欧美成人vps| 日韩一级成人av| 日韩精品一区二区三区在线观看 | 国产成人亚洲精品青草天美| 久久99精品国产91久久来源| 热久久久久久久| 免费欧美日韩国产三级电影| 蜜臀久久99精品久久久久久9| 美女脱光内衣内裤视频久久影院| 午夜激情一区二区| 麻豆精品一二三| 看电视剧不卡顿的网站| 国产一区欧美一区| 国产河南妇女毛片精品久久久| 风间由美中文字幕在线看视频国产欧美| 国产乱码一区二区三区| 国产成人综合网站| 国产乱码精品一区二区三区五月婷| 三级成人在线视频| 性久久久久久久| 中文字幕一区二| 一区二区视频在线看| 亚洲国产精品久久久久秋霞影院 | 色哟哟国产精品| 91福利视频在线| 欧美妇女性影城| 日韩欧美精品在线| 欧美激情一区二区| 曰韩精品一区二区| 热久久一区二区| 丁香婷婷综合激情五月色| 92国产精品观看| 91麻豆精品91久久久久久清纯| 欧美成人国产一区二区| 国产精品美女www爽爽爽| 国产一区在线精品| av日韩在线网站| av在线这里只有精品| 国产成人精品免费看| 成人蜜臀av电影| 欧美精品视频www在线观看| 一区视频在线播放| 最新久久zyz资源站| 亚洲午夜久久久久| 精品一二三四区| 在线免费观看日本一区| 欧美日韩一区不卡| 国产午夜精品理论片a级大结局| 国产日韩一级二级三级| 免费成人在线影院| 成人动漫一区二区| 欧美精品乱码久久久久久按摩| 精品日韩一区二区三区 | 琪琪久久久久日韩精品| 麻豆国产欧美日韩综合精品二区| 欧美系列一区二区| 亚洲精品中文字幕乱码三区 | 韩国视频一区二区| 久久97超碰国产精品超碰| 岛国av在线一区| 日韩一区二区三区在线| 国产剧情一区二区三区| 精品一区二区综合| 精品综合久久久久久8888| 欧美日韩国产高清一区二区三区 | 狠狠狠色丁香婷婷综合久久五月| 成人18精品视频| 欧美电视剧免费观看| 亚洲国产精品天堂| 91伊人久久大香线蕉| 久久综合狠狠综合久久综合88| 亚洲国产精品久久久久婷婷884| 成人免费av在线| 久久精品在线免费观看| 麻豆精品一区二区三区| 欧美色涩在线第一页| 亚洲婷婷综合久久一本伊一区| 国产精品一区二区在线观看不卡| 这里只有精品视频在线观看| 亚洲一区视频在线观看视频| av欧美精品.com| 欧美国产精品v| 国产曰批免费观看久久久| 日韩午夜在线影院| 麻豆国产91在线播放| 日韩欧美一区在线| 美女脱光内衣内裤视频久久网站| 欧美日韩精品欧美日韩精品一| 亚洲精品乱码久久久久久久久| 成人黄色小视频在线观看| 中文字幕+乱码+中文字幕一区| 国产精品一线二线三线精华| 日韩免费电影一区| 国产美女在线观看一区| 国产亚洲欧美色| 福利一区二区在线|