|
|
|
@ -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) |
|
|
|
|
{ |
|
|
|
|