Add PGS codec
git-svn-id: svn+ssh://74.125.59.83/svnsource/ffmpeg/trunk@63 c0683bf1-fb26-4375-bba1-98ccd3d3b0d1
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index e576754..6a8e8d2 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -166,6 +166,7 @@
OBJS-$(CONFIG_PCX_ENCODER) += pcxenc.o
OBJS-$(CONFIG_PGM_DECODER) += pnmenc.o pnm.o
OBJS-$(CONFIG_PGM_ENCODER) += pnmenc.o
+OBJS-$(CONFIG_PGSSUB_DECODER) += pgssubdec.o
OBJS-$(CONFIG_PGMYUV_DECODER) += pnmenc.o pnm.o
OBJS-$(CONFIG_PGMYUV_ENCODER) += pnmenc.o
OBJS-$(CONFIG_PNG_DECODER) += png.o pngdec.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 5434a5b..739b69e 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -297,6 +297,7 @@
REGISTER_ENCDEC (DVBSUB, dvbsub);
REGISTER_ENCDEC (DVDSUB, dvdsub);
REGISTER_DECODER (XSUB, xsub);
+ REGISTER_DECODER (PGSSUB, pgssub);
/* external libraries */
REGISTER_ENCDEC (LIBAMR_NB, libamr_nb);
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 3a5b607..6d0e6d5 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -327,7 +327,7 @@
CODEC_ID_XSUB,
CODEC_ID_SSA,
CODEC_ID_MOV_TEXT,
- CODEC_ID_BD_SUBTITLE,
+ CODEC_ID_HDMV_PGS_SUBTITLE,
/* other specific kind of codecs (generally used for attachments) */
CODEC_ID_TTF= 0x18000,
@@ -3401,6 +3401,21 @@
void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size);
/**
+* Allocate a buffer, reusing the given one if large enough.
+*
+* Contrary to av_fast_realloc the current buffer contents might not be
+* preserved and on error the old buffer is freed, thus no special
+* handling to avoid memleaks is necessary.
+*
+* @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer
+* @param size size of the buffer *ptr points to
+* @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and
+* *size 0 if an error occurred.
+*/
+
+void av_fast_malloc(void *ptr, unsigned int *size, unsigned int min_size);
+
+/**
* Copy image 'src' to 'dst'.
*/
void av_picture_copy(AVPicture *dst, const AVPicture *src,
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 5b8a069..2da9ca5 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -80,6 +80,17 @@
return ptr;
}
+void av_fast_malloc(void *ptr, unsigned int *size, unsigned int min_size)
+{
+ void **p = ptr;
+ if (min_size < *size)
+ return;
+ *size= FFMAX(17*min_size/16 + 32, min_size);
+ av_free(*p);
+ *p = av_malloc(*size);
+ if (!*p) *size = 0;
+}
+
/* encoder management */
static AVCodec *first_avcodec = NULL;
diff --git a/libavformat/matroska.c b/libavformat/matroska.c
index ee63eae..e560340 100755
--- a/libavformat/matroska.c
+++ b/libavformat/matroska.c
@@ -57,6 +57,7 @@
{"S_ASS" , CODEC_ID_SSA},
{"S_SSA" , CODEC_ID_SSA},
{"S_VOBSUB" , CODEC_ID_DVD_SUBTITLE},
+ {"S_HDMV/PGS" , CODEC_ID_HDMV_PGS_SUBTITLE},
{"V_DIRAC" , CODEC_ID_DIRAC},
{"V_MJPEG" , CODEC_ID_MJPEG},
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index ed0f214..102f595 100755
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -1038,7 +1038,7 @@
break;
case STREAM_TYPE_AUDIO_HDMV_SUBPICTURE:
codec_type = CODEC_TYPE_SUBTITLE;
- codec_id = CODEC_ID_BD_SUBTITLE;
+ codec_id = CODEC_ID_HDMV_PGS_SUBTITLE;
break;
default:
if (code >= 0x1c0 && code <= 0x1df) {