summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorFabrice Bellard <fabrice@bellard.org>2001-08-11 19:04:31 +0000
committerFabrice Bellard <fabrice@bellard.org>2001-08-11 19:04:31 +0000
commitcf0875950d75da6b5cb4ffea6ff2f4220db7e229 (patch)
tree4f19195dec34f2f0b428a51394d6d41eb441a363 /libavcodec
parent0ee50938f16af075a3d8dd04837d44c082d51cba (diff)
picture utils
Originally committed as revision 72 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/utils.c97
1 files changed, 97 insertions, 0 deletions
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 958f6d32db..b32bd18033 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -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)
{