added DTG active format information
Originally committed as revision 1605 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
a28fbb3fc8
commit
e2f9490eab
@ -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…
x
Reference in New Issue
Block a user