summaryrefslogtreecommitdiff
path: root/src/libffmpeg/libavcodec/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libffmpeg/libavcodec/utils.c')
-rw-r--r--src/libffmpeg/libavcodec/utils.c101
1 files changed, 99 insertions, 2 deletions
diff --git a/src/libffmpeg/libavcodec/utils.c b/src/libffmpeg/libavcodec/utils.c
index 958f6d32d..26510d87c 100644
--- a/src/libffmpeg/libavcodec/utils.c
+++ b/src/libffmpeg/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)
{
@@ -253,7 +350,7 @@ void avcodec_register_all(void)
register_avcodec(&h263p_encoder);
register_avcodec(&rv10_encoder);
register_avcodec(&mjpeg_encoder);
- register_avcodec(&opendivx_encoder);
+ register_avcodec(&mpeg4_encoder);
register_avcodec(&msmpeg4_encoder);
#endif /* CONFIG_ENCODERS */
register_avcodec(&pcm_codec);
@@ -262,7 +359,7 @@ void avcodec_register_all(void)
/* decoders */
#ifdef CONFIG_DECODERS
register_avcodec(&h263_decoder);
- register_avcodec(&opendivx_decoder);
+ register_avcodec(&mpeg4_decoder);
register_avcodec(&msmpeg4_decoder);
register_avcodec(&mpeg_decoder);
register_avcodec(&h263i_decoder);