summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorFabrice Bellard <fabrice@bellard.org>2003-02-25 09:56:56 +0000
committerFabrice Bellard <fabrice@bellard.org>2003-02-25 09:56:56 +0000
commite2f9490eab2fba465a0b611eb4524597b7286673 (patch)
treeb0f0163a41cb2af3421549fa03514e201e67c58c /libavcodec
parenta28fbb3fc88f9b12be31e173e0753a0f3205270d (diff)
added DTG active format information
Originally committed as revision 1605 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/avcodec.h22
-rw-r--r--libavcodec/mpeg12.c33
2 files changed, 53 insertions, 2 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index b73438120c..297f5022e6 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -16,8 +16,8 @@ extern "C" {
#define LIBAVCODEC_VERSION_INT 0x000406
#define LIBAVCODEC_VERSION "0.4.6"
-#define LIBAVCODEC_BUILD 4656
-#define LIBAVCODEC_BUILD_STR "4656"
+#define LIBAVCODEC_BUILD 4657
+#define LIBAVCODEC_BUILD_STR "4657"
enum CodecID {
CODEC_ID_NONE,
@@ -948,6 +948,24 @@ typedef struct AVCodecContext {
* decoding: set by user, if not set then the native format will always be choosen
*/
enum PixelFormat (*get_format)(struct AVCodecContext *s, enum PixelFormat * fmt);
+
+ /**
+ * DTG active format information (additionnal aspect ratio
+ * information only used in DVB MPEG2 transport streams). 0 if
+ * not set.
+ *
+ * encoding: unused.
+ * decoding: set by decoder
+ */
+ int dtg_active_format;
+#define FF_DTG_AFD_SAME 8
+#define FF_DTG_AFD_4_3 9
+#define FF_DTG_AFD_16_9 10
+#define FF_DTG_AFD_14_9 11
+#define FF_DTG_AFD_4_3_SP_14_9 13
+#define FF_DTG_AFD_16_9_SP_14_9 14
+#define FF_DTG_AFD_SP_4_3 15
+
} AVCodecContext;
//void avcodec_getopt(AVCodecContext* avctx, const char* str, avc_config_t** config);
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index c7622e86ec..35fb5c819a 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -2009,6 +2009,35 @@ static int mpeg1_decode_sequence(AVCodecContext *avctx,
return 0;
}
+static void mpeg_decode_user_data(AVCodecContext *avctx,
+ const uint8_t *buf, int buf_size)
+{
+ const uint8_t *p;
+ int len, flags;
+ p = buf;
+ len = buf_size;
+
+ /* we parse the DTG active format information */
+ if (len >= 5 &&
+ p[0] == 'D' && p[1] == 'T' && p[2] == 'G' && p[3] == '1') {
+ flags = p[4];
+ p += 5;
+ len -= 5;
+ if (flags & 0x80) {
+ /* skip event id */
+ if (len < 2)
+ return;
+ p += 2;
+ len -= 2;
+ }
+ if (flags & 0x40) {
+ if (len < 1)
+ return;
+ avctx->dtg_active_format = p[0] & 0x0f;
+ }
+ }
+}
+
/* handle buffering and image synchronisation */
static int mpeg_decode_frame(AVCodecContext *avctx,
void *data, int *data_size,
@@ -2099,6 +2128,10 @@ static int mpeg_decode_frame(AVCodecContext *avctx,
mpeg_decode_extension(avctx,
s->buffer, input_size);
break;
+ case USER_START_CODE:
+ mpeg_decode_user_data(avctx,
+ s->buffer, input_size);
+ break;
default:
if (start_code >= SLICE_MIN_START_CODE &&
start_code <= SLICE_MAX_START_CODE) {