On Wed, Dec 5, 2018 at 12:35 AM Steinar H. Gunderson <steinar+ffm...@gunderson.no> wrote: > > Some demuxers, like Matroska, allow for sending colorspace information > that override MJPEG defaults when it comes to Y'CbCr coefficients or > chroma location. Don't override such data if the demuxer already has > set it; this allows decoding such MJPEG streams correctly. > > Also document in avcodec.h that these fields are actually set first by > libavformat, even if libavcodec is usually the one to set them. This is > not new behavior; e.g., dnxhd already works this way. > --- > libavcodec/avcodec.h | 10 +++++----- > libavcodec/mjpegdec.c | 8 ++++++-- > tests/fate/matroska.mak | 3 +++ > tests/ref/fate/matroska-mjpeg-color-space | 22 ++++++++++++++++++++++ > 4 files changed, 36 insertions(+), 7 deletions(-) > create mode 100644 tests/ref/fate/matroska-mjpeg-color-space > > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > index 3922e89331..b7ea99d8ab 100644 > --- a/libavcodec/avcodec.h > +++ b/libavcodec/avcodec.h > @@ -2145,35 +2145,35 @@ typedef struct AVCodecContext { > /** > * Chromaticity coordinates of the source primaries. > * - encoding: Set by user > - * - decoding: Set by libavcodec > + * - decoding: Set by libavformat and/or libavcodec > */ > enum AVColorPrimaries color_primaries; > > /** > * Color Transfer Characteristic. > * - encoding: Set by user > - * - decoding: Set by libavcodec > + * - decoding: Set by libavformat and/or libavcodec > */ > enum AVColorTransferCharacteristic color_trc; > > /** > * YUV colorspace type. > * - encoding: Set by user > - * - decoding: Set by libavcodec > + * - decoding: Set by libavformat and/or libavcodec > */ > enum AVColorSpace colorspace; > > /** > * MPEG vs JPEG YUV range. > * - encoding: Set by user > - * - decoding: Set by libavcodec > + * - decoding: Set by libavformat and/or libavcodec > */ > enum AVColorRange color_range; > > /** > * This defines the location of chroma samples. > * - encoding: Set by user > - * - decoding: Set by libavcodec > + * - decoding: Set by libavformat and/or libavcodec > */ > enum AVChromaLocation chroma_sample_location; >
These comments are not accurate. avformat does not fill these values, because outside of deprecated code it does not expose such a struct to the user. - Hendrik _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel