[FFmpeg-devel] [PATCH v2] Add support for vp9 in iso-bmff

Ronald S. Bultje rsbultje at gmail.com
Tue Jun 14 22:11:45 CEST 2016


Hi,

On Mon, Jun 13, 2016 at 5:26 PM, Kongqun Yang <yangkongqun at gmail.com> wrote:
>
> @@ -5369,6 +5384,17 @@ static int mov_write_header(AVFormatContext *s)
>                          pix_fmt == AV_PIX_FMT_MONOWHITE ||
>                          pix_fmt == AV_PIX_FMT_MONOBLACK;
>              }
> +            if (track->mode == MODE_MP4 &&
> +                track->par->codec_id == AV_CODEC_ID_VP9) {
> +              if (s->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) {
> +                av_log(s, AV_LOG_ERROR,
> +                       "VP9 in MP4 support is experimental, add "
> +                       "'-strict %d' if you want to use it.\n",
> +                       FF_COMPLIANCE_EXPERIMENTAL);
> +                ret = AVERROR_EXPERIMENTAL;
> +                goto error;
> +              }
> +            }
>

Please use 4-space indentation (you're using 2).


> +static int get_vpx_color_space(enum AVColorSpace color_space)
> +{
> +    switch (color_space) {
> +        case AVCOL_SPC_RGB:
> +            return VPX_COLOR_SPACE_RGB;
> +        case AVCOL_SPC_BT709:
> +            return VPX_COLOR_SPACE_BT709;
> +        case AVCOL_SPC_SMPTE170M:
> +            return VPX_COLOR_SPACE_SMPTE_170;
> +        case AVCOL_SPC_SMPTE240M:
> +            return VPX_COLOR_SPACE_SMPTE_240;
> +        case AVCOL_SPC_BT2020_NCL:
> +            return VPX_COLOR_SPACE_BT2020_NCL;
> +        case AVCOL_SPC_BT2020_CL:
> +            return VPX_COLOR_SPACE_BT2020_CL;
> +        default:
> +            return VPX_COLOR_SPACE_UNSPECIFIED;
> +    }
> +}
>
 [..]

> +static int get_vpx_chroma_subsampling(enum AVPixelFormat pixel_format,
> +                                      enum AVChromaLocation
> chroma_location)
> +{
> +    switch (pixel_format) {
> +        case AV_PIX_FMT_YUV420P:
> +        case AV_PIX_FMT_YUV420P10LE:
> +        case AV_PIX_FMT_YUV420P10BE:
> +        case AV_PIX_FMT_YUV420P12LE:
> +        case AV_PIX_FMT_YUV420P12BE:
> +            if (chroma_location == AVCHROMA_LOC_LEFT)
> +                return VPX_SUBSAMPLING_420_VERTICAL;
> +            // Otherwise assume collocated.
> +            return VPX_SUBSAMPLING_420_COLLOCATED_WITH_LUMA;
> +        case AV_PIX_FMT_YUV422P:
> +        case AV_PIX_FMT_YUV422P10LE:
> +        case AV_PIX_FMT_YUV422P10BE:
> +        case AV_PIX_FMT_YUV422P12LE:
> +        case AV_PIX_FMT_YUV422P12BE:
> +            return VPX_SUBSAMPLING_422;
> +        case AV_PIX_FMT_YUV444P:
> +        case AV_PIX_FMT_YUV444P10LE:
> +        case AV_PIX_FMT_YUV444P10BE:
> +        case AV_PIX_FMT_YUV444P12LE:
> +        case AV_PIX_FMT_YUV444P12BE:
> +            return VPX_SUBSAMPLING_444;
> +        default:
> +            av_log(NULL, AV_LOG_ERROR, "Unknown pixel format.");
> +            return -1;
> +    }
> +}
>

In ffmpeg, the case and switch should be indented at the same level:

switch (a) {
case b:
    foo();
    break;
default:
    bar();
    break;
}

What happens if the "default:" case is reached? Is the vpcc atom still
valid? If not, should the muxer error out? Can this even happen at all?

+static int get_vpx_transfer_function(
> +    enum AVColorTransferCharacteristic transfer)
> +{
> +  return (transfer == AVCOL_TRC_SMPTEST2084) ? 1 : 0;
> +}
> +
> +static int get_vpx_video_full_range_flag(enum AVColorRange color_range)
> +{
> +    return (color_range == AVCOL_RANGE_JPEG) ? 1 : 0;
> +}
>

The (..) ? 1 : 0 construct is unnecessary, you can just return .. (or in
case of non-boolean values, we prefer !!(..)).

I also think it's a bad habit to log generic messages like "unknown pixel
format" without a logging context, the user will never understand what that
means.

Ronald


More information about the ffmpeg-devel mailing list