# HG changeset patch # User bellard # Date 1046167016 0 # Node ID 01154fced38082735f252f76d58a8fd73761768d # Parent b923be2fc4b564103f123fc86b621b00492dd190 added DTG active format information diff -r b923be2fc4b5 -r 01154fced380 avcodec.h --- a/avcodec.h Mon Feb 24 13:41:57 2003 +0000 +++ b/avcodec.h Tue Feb 25 09:56:56 2003 +0000 @@ -16,8 +16,8 @@ #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 @@ * 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 -r b923be2fc4b5 -r 01154fced380 mpeg12.c --- a/mpeg12.c Mon Feb 24 13:41:57 2003 +0000 +++ b/mpeg12.c Tue Feb 25 09:56:56 2003 +0000 @@ -2009,6 +2009,35 @@ 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 @@ 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) {