added DTG active format information

Originally committed as revision 1605 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Fabrice Bellard 22 years ago
parent a28fbb3fc8
commit e2f9490eab
  1. 22
      libavcodec/avcodec.h
  2. 33
      libavcodec/mpeg12.c

@ -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);

@ -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) {

Loading…
Cancel
Save