diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-07-14 19:13:46 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-07-17 01:15:31 +0200 |
commit | a80e622924c89df69fb1c225ba432fe12fe6648e (patch) | |
tree | d2d8f5a4cc4792bc0f6bb8dfd772091a5ed7a192 | |
parent | 0092bcdf06f240deed890c0d29a95b86f82fe2ee (diff) | |
download | ffmpeg-a80e622924c89df69fb1c225ba432fe12fe6648e.tar.gz |
avcodec/avutil: Add AVColorSpace and AVColorRange to AVFrames
This also moves AVColorSpace and AVColorRange from avcodec to avutil
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/avcodec.h | 20 | ||||
-rw-r--r-- | libavcodec/utils.c | 5 | ||||
-rw-r--r-- | libavutil/frame.c | 5 | ||||
-rw-r--r-- | libavutil/frame.h | 43 | ||||
-rw-r--r-- | libavutil/version.h | 2 |
5 files changed, 54 insertions, 21 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 4b462fa5f8..fca8a8f67b 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -627,26 +627,6 @@ enum AVColorTransferCharacteristic{ AVCOL_TRC_NB , ///< Not part of ABI }; -enum AVColorSpace{ - AVCOL_SPC_RGB = 0, - AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B - AVCOL_SPC_UNSPECIFIED = 2, - AVCOL_SPC_FCC = 4, - AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 - AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above - AVCOL_SPC_SMPTE240M = 7, - AVCOL_SPC_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 - AVCOL_SPC_NB , ///< Not part of ABI -}; -#define AVCOL_SPC_YCGCO AVCOL_SPC_YCOCG - -enum AVColorRange{ - AVCOL_RANGE_UNSPECIFIED = 0, - AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges - AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges - AVCOL_RANGE_NB , ///< Not part of ABI -}; - /** * X X 3 4 X X are luma samples, * 1 2 1-6 are possible chroma positions diff --git a/libavcodec/utils.c b/libavcodec/utils.c index d77b5ec661..ff26c5810c 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -643,6 +643,10 @@ int ff_init_buffer_info(AVCodecContext *avctx, AVFrame *frame) frame->format = avctx->pix_fmt; if (!frame->sample_aspect_ratio.num) frame->sample_aspect_ratio = avctx->sample_aspect_ratio; + if (av_frame_get_colorspace(frame) == AVCOL_SPC_UNSPECIFIED) + av_frame_set_colorspace(frame, avctx->colorspace); + if (av_frame_get_color_range(frame) == AVCOL_RANGE_UNSPECIFIED) + av_frame_set_color_range(frame, avctx->color_range); break; case AVMEDIA_TYPE_AUDIO: if (!frame->sample_rate) @@ -964,6 +968,7 @@ void avcodec_get_frame_defaults(AVFrame *frame) frame->sample_aspect_ratio = (AVRational) {0, 1 }; frame->format = -1; /* unknown */ frame->extended_data = frame->data; + av_frame_set_colorspace(frame, AVCOL_SPC_UNSPECIFIED); } AVFrame *avcodec_alloc_frame(void) diff --git a/libavutil/frame.c b/libavutil/frame.c index 3141dec72e..bac6c63980 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -40,6 +40,8 @@ MAKE_ACCESSORS(AVFrame, frame, int, sample_rate) MAKE_ACCESSORS(AVFrame, frame, AVDictionary *, metadata) MAKE_ACCESSORS(AVFrame, frame, int, decode_error_flags) MAKE_ACCESSORS(AVFrame, frame, int, pkt_size) +MAKE_ACCESSORS(AVFrame, frame, enum AVColorSpace, colorspace) +MAKE_ACCESSORS(AVFrame, frame, enum AVColorRange, color_range) #define CHECK_CHANNELS_CONSISTENCY(frame) \ av_assert2(!(frame)->channel_layout || \ @@ -89,6 +91,7 @@ static void get_frame_defaults(AVFrame *frame) frame->key_frame = 1; frame->sample_aspect_ratio = (AVRational){ 0, 1 }; frame->format = -1; /* unknown */ + frame->colorspace = AVCOL_SPC_UNSPECIFIED; frame->extended_data = frame->data; } @@ -456,6 +459,8 @@ int av_frame_copy_props(AVFrame *dst, const AVFrame *src) dst->coded_picture_number = src->coded_picture_number; dst->display_picture_number = src->display_picture_number; dst->decode_error_flags = src->decode_error_flags; + dst->colorspace = src->colorspace; + dst->color_range = dst->color_range; av_dict_copy(&dst->metadata, src->metadata, 0); diff --git a/libavutil/frame.h b/libavutil/frame.h index 39a664fde5..8cb3000aaa 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -30,6 +30,26 @@ #include "rational.h" #include "samplefmt.h" +enum AVColorSpace{ + AVCOL_SPC_RGB = 0, + AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B + AVCOL_SPC_UNSPECIFIED = 2, + AVCOL_SPC_FCC = 4, + AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 + AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above + AVCOL_SPC_SMPTE240M = 7, + AVCOL_SPC_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 + AVCOL_SPC_NB , ///< Not part of ABI +}; +#define AVCOL_SPC_YCGCO AVCOL_SPC_YCOCG + +enum AVColorRange{ + AVCOL_RANGE_UNSPECIFIED = 0, + AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges + AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges + AVCOL_RANGE_NB , ///< Not part of ABI +}; + enum AVFrameSideDataType { /** * The data is the AVPanScan struct defined in libavcodec. @@ -433,6 +453,25 @@ typedef struct AVFrame { int pkt_size; /** + * YUV colorspace type. + * It must be accessed using av_frame_get_colorspace() and + * av_frame_set_colorspace(). + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorSpace colorspace; + + /** + * MPEG vs JPEG YUV range. + * It must be accessed using av_frame_get_color_range() and + * av_frame_set_color_range(). + * - encoding: Set by user + * - decoding: Set by libavcodec + */ + enum AVColorRange color_range; + + + /** * Not to be accessed directly from outside libavutil */ AVBufferRef *qp_table_buf; @@ -464,6 +503,10 @@ void av_frame_set_pkt_size(AVFrame *frame, int val); AVDictionary **avpriv_frame_get_metadatap(AVFrame *frame); int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); +enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame); +void av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val); +enum AVColorRange av_frame_get_color_range(const AVFrame *frame); +void av_frame_set_color_range(AVFrame *frame, enum AVColorRange val); /** * Allocate an AVFrame and set its fields to default values. The resulting diff --git a/libavutil/version.h b/libavutil/version.h index be986edd5f..dafbeffca0 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -75,7 +75,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 52 -#define LIBAVUTIL_VERSION_MINOR 39 +#define LIBAVUTIL_VERSION_MINOR 40 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ |