picture utils
Originally committed as revision 72 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		@@ -174,6 +174,15 @@ AVCodec *avcodec_find(enum CodecID id)
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *pix_fmt_str[] = {
 | 
			
		||||
    "yuv420p",
 | 
			
		||||
    "yuv422",
 | 
			
		||||
    "rgb24",
 | 
			
		||||
    "bgr24",
 | 
			
		||||
    "yuv422p",
 | 
			
		||||
    "yuv444p",
 | 
			
		||||
};
 | 
			
		||||
    
 | 
			
		||||
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
 | 
			
		||||
{
 | 
			
		||||
    const char *codec_name;
 | 
			
		||||
@@ -208,6 +217,11 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
 | 
			
		||||
        snprintf(buf, buf_size,
 | 
			
		||||
                 "Video: %s%s",
 | 
			
		||||
                 codec_name, enc->flags & CODEC_FLAG_HQ ? " (hq)" : "");
 | 
			
		||||
        if (enc->codec_id == CODEC_ID_RAWVIDEO) {
 | 
			
		||||
            snprintf(buf + strlen(buf), buf_size - strlen(buf),
 | 
			
		||||
                     ", %s",
 | 
			
		||||
                     pix_fmt_str[enc->pix_fmt]);
 | 
			
		||||
        }
 | 
			
		||||
        if (enc->width) {
 | 
			
		||||
            snprintf(buf + strlen(buf), buf_size - strlen(buf),
 | 
			
		||||
                     ", %dx%d, %0.2f fps",
 | 
			
		||||
@@ -235,6 +249,89 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Picture field are filled with 'ptr' addresses */
 | 
			
		||||
void avpicture_fill(AVPicture *picture, UINT8 *ptr,
 | 
			
		||||
                    int pix_fmt, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
    int size;
 | 
			
		||||
 | 
			
		||||
    size = width * height;
 | 
			
		||||
    switch(pix_fmt) {
 | 
			
		||||
    case PIX_FMT_YUV420P:
 | 
			
		||||
        picture->data[0] = ptr;
 | 
			
		||||
        picture->data[1] = picture->data[0] + size;
 | 
			
		||||
        picture->data[2] = picture->data[1] + size / 4;
 | 
			
		||||
        picture->linesize[0] = width;
 | 
			
		||||
        picture->linesize[1] = width / 2;
 | 
			
		||||
        picture->linesize[2] = width / 2;
 | 
			
		||||
        break;
 | 
			
		||||
    case PIX_FMT_YUV422P:
 | 
			
		||||
        picture->data[0] = ptr;
 | 
			
		||||
        picture->data[1] = picture->data[0] + size;
 | 
			
		||||
        picture->data[2] = picture->data[1] + size / 2;
 | 
			
		||||
        picture->linesize[0] = width;
 | 
			
		||||
        picture->linesize[1] = width / 2;
 | 
			
		||||
        picture->linesize[2] = width / 2;
 | 
			
		||||
        break;
 | 
			
		||||
    case PIX_FMT_YUV444P:
 | 
			
		||||
        picture->data[0] = ptr;
 | 
			
		||||
        picture->data[1] = picture->data[0] + size;
 | 
			
		||||
        picture->data[2] = picture->data[1] + size;
 | 
			
		||||
        picture->linesize[0] = width;
 | 
			
		||||
        picture->linesize[1] = width;
 | 
			
		||||
        picture->linesize[2] = width;
 | 
			
		||||
        break;
 | 
			
		||||
    case PIX_FMT_RGB24:
 | 
			
		||||
    case PIX_FMT_BGR24:
 | 
			
		||||
        picture->data[0] = ptr;
 | 
			
		||||
        picture->data[1] = NULL;
 | 
			
		||||
        picture->data[2] = NULL;
 | 
			
		||||
        picture->linesize[0] = width * 3;
 | 
			
		||||
        break;
 | 
			
		||||
    case PIX_FMT_YUV422:
 | 
			
		||||
        picture->data[0] = ptr;
 | 
			
		||||
        picture->data[1] = NULL;
 | 
			
		||||
        picture->data[2] = NULL;
 | 
			
		||||
        picture->linesize[0] = width * 2;
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        picture->data[0] = NULL;
 | 
			
		||||
        picture->data[1] = NULL;
 | 
			
		||||
        picture->data[2] = NULL;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int avpicture_get_size(int pix_fmt, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
    int size;
 | 
			
		||||
 | 
			
		||||
    size = width * height;
 | 
			
		||||
    switch(pix_fmt) {
 | 
			
		||||
    case PIX_FMT_YUV420P:
 | 
			
		||||
        size = (size * 3) / 2;
 | 
			
		||||
        break;
 | 
			
		||||
    case PIX_FMT_YUV422P:
 | 
			
		||||
        size = (size * 2);
 | 
			
		||||
        break;
 | 
			
		||||
    case PIX_FMT_YUV444P:
 | 
			
		||||
        size = (size * 3);
 | 
			
		||||
        break;
 | 
			
		||||
    case PIX_FMT_RGB24:
 | 
			
		||||
    case PIX_FMT_BGR24:
 | 
			
		||||
        size = (size * 3);
 | 
			
		||||
        break;
 | 
			
		||||
    case PIX_FMT_YUV422:
 | 
			
		||||
        size = (size * 2);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        size = -1;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    return size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* must be called before any other functions */
 | 
			
		||||
void avcodec_init(void)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user