summaryrefslogtreecommitdiff
authorBang Peng <bang.peng@amlogic.com>2017-05-22 05:01:17 (GMT)
committer Zhi Zhou <zhi.zhou@amlogic.com>2017-05-26 12:15:35 (GMT)
commita9ad4c7e70e081972bc31dc50594b566d8a07abc (patch)
tree845c987f96654e12a2ed5c40ff360d9d5c54fe62
parent7c6eebf42347b3ed20a66dce2e26fbfbec4ca647 (diff)
downloadffmpeg-a9ad4c7e70e081972bc31dc50594b566d8a07abc.zip
ffmpeg-a9ad4c7e70e081972bc31dc50594b566d8a07abc.tar.gz
ffmpeg-a9ad4c7e70e081972bc31dc50594b566d8a07abc.tar.bz2
PD#144652:fixed amnuplayer to support dobly vision files.merge 138732
Change-Id: Ic92281875baf3bb5248da578a7354163b93840c7
Diffstat
-rw-r--r--libavcodec/avcodec.h4
-rw-r--r--libavcodec/h264.h1
-rw-r--r--libavcodec/h264_parser.c7
-rw-r--r--libavcodec/h264dec.h1
-rw-r--r--libavcodec/hevc.h1
-rw-r--r--libavcodec/hevc_parser.c8
-rw-r--r--libavformat/isom.c2
-rw-r--r--libavformat/mpegts.c2
8 files changed, 26 insertions, 0 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 14d7aa1..3d88f95 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -3636,6 +3636,7 @@ typedef struct AVCodecContext {
* AVCodecContext.get_format callback)
*/
int hwaccel_flags;
+ int has_dolby_vision_meta;
} AVCodecContext;
AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx);
@@ -5104,6 +5105,9 @@ typedef struct AVCodecParserContext {
#define PARSER_FLAG_FETCHED_OFFSET 0x0004
#define PARSER_FLAG_USE_CODEC_TS 0x1000
+ /*for dolby vision flag*/
+#define PARSER_FLAG_HAS_DV_META 0x0008
+
int64_t offset; ///< byte offset from starting packet start
int64_t cur_frame_end[AV_PARSER_PTS_NB];
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 3bbe228..62ea89b 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -45,6 +45,7 @@ enum {
H264_NAL_SUB_SPS = 15,
H264_NAL_AUXILIARY_SLICE = 19,
H264_NAL_SLC_EXT = 20,
+ H264_NAL_264_DV = 0x1c, /*0x7c & 0x1f*/
};
#endif /* AVCODEC_H264_H */
diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c
index bc35a61..aed0793 100644
--- a/libavcodec/h264_parser.c
+++ b/libavcodec/h264_parser.c
@@ -324,6 +324,13 @@ static inline int parse_nal_units(AVCodecParserContext *s,
case H264_NAL_SEI:
ff_h264_sei_decode(&p->sei, &nal.gb, &p->ps, avctx);
break;
+ case H264_NAL_264_DV:
+ /*00 00 00 01 7c 01 19 08
+ nal type = 0x7c & 0x1f;
+ any conflict?
+ */
+ avctx->has_dolby_vision_meta = 1;
+ break;
case H264_NAL_IDR_SLICE:
s->key_frame = 1;
diff --git a/libavcodec/h264dec.h b/libavcodec/h264dec.h
index e994f7e..492b4eb 100644
--- a/libavcodec/h264dec.h
+++ b/libavcodec/h264dec.h
@@ -543,6 +543,7 @@ typedef struct H264Context {
AVBufferPool *motion_val_pool;
AVBufferPool *ref_index_pool;
int ref2frm[MAX_SLICES][2][64]; ///< reference to frame number lists, used in the loop filter, the first 2 are for -2,-1
+ int has_dolby_vision_meta;
} H264Context;
extern const uint16_t ff_h264_mb_sizes[4];
diff --git a/libavcodec/hevc.h b/libavcodec/hevc.h
index de77d2a..165ba45 100644
--- a/libavcodec/hevc.h
+++ b/libavcodec/hevc.h
@@ -50,6 +50,7 @@ enum HEVCNALUnitType {
HEVC_NAL_FD_NUT = 38,
HEVC_NAL_SEI_PREFIX = 39,
HEVC_NAL_SEI_SUFFIX = 40,
+ HEVC_NAL_SEI_DV_META = 62,
};
enum HEVCSliceType {
diff --git a/libavcodec/hevc_parser.c b/libavcodec/hevc_parser.c
index 310428d..3e10ee4 100644
--- a/libavcodec/hevc_parser.c
+++ b/libavcodec/hevc_parser.c
@@ -267,6 +267,14 @@ static inline int parse_nal_units(AVCodecParserContext *s, const uint8_t *buf,
case HEVC_NAL_SEI_SUFFIX:
ff_hevc_decode_nal_sei(h);
break;
+ case HEVC_NAL_SEI_DV_META:
+ /*
+ sample dolbyvision nal header:
+ 00 00 01 8C 7C 01 19 08
+ nal_type =(0x7C >> 1) 0x3f;
+ */
+ avctx->has_dolby_vision_meta = 1;
+ break;
case HEVC_NAL_TRAIL_N:
case HEVC_NAL_TRAIL_R:
case HEVC_NAL_TSA_N:
diff --git a/libavformat/isom.c b/libavformat/isom.c
index 7da2700..dd9b846 100644
--- a/libavformat/isom.c
+++ b/libavformat/isom.c
@@ -162,6 +162,8 @@ const AVCodecTag ff_codec_movvideo_tags[] = {
{ AV_CODEC_ID_HEVC, MKTAG('h', 'e', 'v', '1') }, /* HEVC/H.265 which indicates parameter sets may be in ES */
{ AV_CODEC_ID_HEVC, MKTAG('h', 'v', 'c', '1') }, /* HEVC/H.265 which indicates parameter sets shall not be in ES */
+ { AV_CODEC_ID_HEVC, MKTAG('d', 'v', 'h', 'e') }, /* HEVC Dobly vision ES dvhe*/
+ { AV_CODEC_ID_HEVC, MKTAG('D', 'O', 'V', 'I') }, /* HEVC Dobly vision ES dovi*/
{ AV_CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') }, /* AVC-1/H.264 */
{ AV_CODEC_ID_H264, MKTAG('a', 'v', 'c', '2') },
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index c10e3f2..5131874 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -753,6 +753,8 @@ static const StreamType REGD_types[] = {
{ MKTAG('V', 'C', '-', '1'), AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_VC1 },
{ MKTAG('O', 'p', 'u', 's'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_OPUS },
{ MKTAG('D', 'R', 'A', '1'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DRA },
+ { MKTAG('d', 'v', 'h', 'e'), AVMEDIA_TYPE_VIDEO , AV_CODEC_ID_HEVC}, /* HEVC Dobly vision ES dvhe*/
+ { MKTAG('D', 'O', 'V', 'I'), AVMEDIA_TYPE_VIDEO , AV_CODEC_ID_HEVC}, /* HEVC Dobly vision ES dovi*/
{ 0 },
};