Originally committed as revision 4205 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -954,7 +954,12 @@ typedef struct AVCodecContext { | |||||
| * - decoding: unused | * - decoding: unused | ||||
| */ | */ | ||||
| int strict_std_compliance; | int strict_std_compliance; | ||||
| #define FF_COMPLIANCE_VERY_STRICT 2 ///< strictly conform to a older more strict version of the spec or reference software | |||||
| #define FF_COMPLIANCE_STRICT 1 ///< strictly conform to all the things in the spec no matter what consequences | |||||
| #define FF_COMPLIANCE_NORMAL 0 | |||||
| #define FF_COMPLIANCE_INOFFICIAL -1 ///< allow inofficial extensions | |||||
| #define FF_COMPLIANCE_EXPERIMENTAL -2 ///< allow non standarized experimental things | |||||
| /** | /** | ||||
| * qscale offset between ip and b frames. | * qscale offset between ip and b frames. | ||||
| * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset) | * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset) | ||||
| @@ -550,9 +550,9 @@ static int encode_init(AVCodecContext *avctx) | |||||
| FFV1Context *s = avctx->priv_data; | FFV1Context *s = avctx->priv_data; | ||||
| int i; | int i; | ||||
| if(avctx->strict_std_compliance >= 0){ | |||||
| if(avctx->strict_std_compliance >FF_COMPLIANCE_EXPERIMENTAL){ | |||||
| av_log(avctx, AV_LOG_ERROR, "this codec is under development, files encoded with it may not be decodeable with future versions!!!\n" | av_log(avctx, AV_LOG_ERROR, "this codec is under development, files encoded with it may not be decodeable with future versions!!!\n" | ||||
| "use vstrict=-1 / -strict -1 to use it anyway\n"); | |||||
| "use vstrict=-2 / -strict -2 to use it anyway\n"); | |||||
| return -1; | return -1; | ||||
| } | } | ||||
| @@ -327,7 +327,7 @@ static int g726_init(AVCodecContext * avctx) | |||||
| av_log(avctx, AV_LOG_ERROR, "G726: unsupported audio format\n"); | av_log(avctx, AV_LOG_ERROR, "G726: unsupported audio format\n"); | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| if (avctx->sample_rate != 8000 && avctx->strict_std_compliance>=0) { | |||||
| if (avctx->sample_rate != 8000 && avctx->strict_std_compliance>FF_COMPLIANCE_INOFFICIAL) { | |||||
| av_log(avctx, AV_LOG_ERROR, "G726: unsupported audio format\n"); | av_log(avctx, AV_LOG_ERROR, "G726: unsupported audio format\n"); | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| @@ -2408,9 +2408,9 @@ void mpeg4_encode_picture_header(MpegEncContext * s, int picture_number) | |||||
| if(s->pict_type==I_TYPE){ | if(s->pict_type==I_TYPE){ | ||||
| if(!(s->flags&CODEC_FLAG_GLOBAL_HEADER)){ | if(!(s->flags&CODEC_FLAG_GLOBAL_HEADER)){ | ||||
| if(s->strict_std_compliance < 2) //HACK, the reference sw is buggy | |||||
| if(s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT) //HACK, the reference sw is buggy | |||||
| mpeg4_encode_visual_object_header(s); | mpeg4_encode_visual_object_header(s); | ||||
| if(s->strict_std_compliance < 2 || picture_number==0) //HACK, the reference sw is buggy | |||||
| if(s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT || picture_number==0) //HACK, the reference sw is buggy | |||||
| mpeg4_encode_vol_header(s, 0, 0); | mpeg4_encode_vol_header(s, 0, 0); | ||||
| } | } | ||||
| if(!(s->workaround_bugs & FF_BUG_MS)) | if(!(s->workaround_bugs & FF_BUG_MS)) | ||||
| @@ -541,8 +541,8 @@ static int encode_init(AVCodecContext *avctx) | |||||
| } | } | ||||
| if(s->interlaced != ( s->height > 288 )) | if(s->interlaced != ( s->height > 288 )) | ||||
| av_log(avctx, AV_LOG_INFO, "using huffyuv 2.2.0 or newer interlacing flag\n"); | av_log(avctx, AV_LOG_INFO, "using huffyuv 2.2.0 or newer interlacing flag\n"); | ||||
| }else if(avctx->strict_std_compliance>=0){ | |||||
| av_log(avctx, AV_LOG_ERROR, "This codec is under development; files encoded with it may not be decodable with future versions!!! Set vstrict=-1 / -strict -1 to use it anyway.\n"); | |||||
| }else if(avctx->strict_std_compliance>FF_COMPLIANCE_EXPERIMENTAL){ | |||||
| av_log(avctx, AV_LOG_ERROR, "This codec is under development; files encoded with it may not be decodable with future versions!!! Set vstrict=-2 / -strict -2 to use it anyway.\n"); | |||||
| return -1; | return -1; | ||||
| } | } | ||||
| @@ -203,7 +203,7 @@ static int find_frame_rate_index(MpegEncContext *s){ | |||||
| for(i=1;i<14;i++) { | for(i=1;i<14;i++) { | ||||
| int64_t n0= 1001LL/frame_rate_tab[i].den*frame_rate_tab[i].num*s->avctx->time_base.num; | int64_t n0= 1001LL/frame_rate_tab[i].den*frame_rate_tab[i].num*s->avctx->time_base.num; | ||||
| int64_t n1= 1001LL*s->avctx->time_base.den; | int64_t n1= 1001LL*s->avctx->time_base.den; | ||||
| if(s->avctx->strict_std_compliance >= 0 && i>=9) break; | |||||
| if(s->avctx->strict_std_compliance > FF_COMPLIANCE_INOFFICIAL && i>=9) break; | |||||
| d = ABS(n0 - n1); | d = ABS(n0 - n1); | ||||
| if(d < dmin){ | if(d < dmin){ | ||||
| @@ -225,7 +225,7 @@ static int encode_init(AVCodecContext *avctx) | |||||
| return -1; | return -1; | ||||
| if(find_frame_rate_index(s) < 0){ | if(find_frame_rate_index(s) < 0){ | ||||
| if(s->strict_std_compliance >=0){ | |||||
| if(s->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL){ | |||||
| av_log(avctx, AV_LOG_ERROR, "MPEG1/2 does not support %d/%d fps\n", avctx->time_base.den, avctx->time_base.num); | av_log(avctx, AV_LOG_ERROR, "MPEG1/2 does not support %d/%d fps\n", avctx->time_base.den, avctx->time_base.num); | ||||
| return -1; | return -1; | ||||
| }else{ | }else{ | ||||
| @@ -898,12 +898,12 @@ int MPV_encode_init(AVCodecContext *avctx) | |||||
| } | } | ||||
| if(avctx->codec_id == CODEC_ID_MJPEG || avctx->codec_id == CODEC_ID_LJPEG){ | if(avctx->codec_id == CODEC_ID_MJPEG || avctx->codec_id == CODEC_ID_LJPEG){ | ||||
| if(avctx->strict_std_compliance>=0 && avctx->pix_fmt != PIX_FMT_YUVJ420P){ | |||||
| if(avctx->strict_std_compliance>FF_COMPLIANCE_INOFFICIAL && avctx->pix_fmt != PIX_FMT_YUVJ420P){ | |||||
| av_log(avctx, AV_LOG_ERROR, "colorspace not supported in jpeg\n"); | av_log(avctx, AV_LOG_ERROR, "colorspace not supported in jpeg\n"); | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| }else{ | }else{ | ||||
| if(avctx->strict_std_compliance>=0 && avctx->pix_fmt != PIX_FMT_YUV420P){ | |||||
| if(avctx->strict_std_compliance>FF_COMPLIANCE_INOFFICIAL && avctx->pix_fmt != PIX_FMT_YUV420P){ | |||||
| av_log(avctx, AV_LOG_ERROR, "colorspace not supported\n"); | av_log(avctx, AV_LOG_ERROR, "colorspace not supported\n"); | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| @@ -3340,9 +3340,9 @@ static int encode_init(AVCodecContext *avctx) | |||||
| SnowContext *s = avctx->priv_data; | SnowContext *s = avctx->priv_data; | ||||
| int plane_index; | int plane_index; | ||||
| if(avctx->strict_std_compliance >= 0){ | |||||
| if(avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL){ | |||||
| av_log(avctx, AV_LOG_ERROR, "this codec is under development, files encoded with it may not be decodable with future versions!!!\n" | av_log(avctx, AV_LOG_ERROR, "this codec is under development, files encoded with it may not be decodable with future versions!!!\n" | ||||
| "use vstrict=-1 / -strict -1 to use it anyway\n"); | |||||
| "use vstrict=-2 / -strict -2 to use it anyway\n"); | |||||
| return -1; | return -1; | ||||
| } | } | ||||
| @@ -290,7 +290,7 @@ file=${outfile}huffyuv.avi | |||||
| do_ffmpeg $file -y -f pgmyuv -i $raw_src -an -vcodec huffyuv -pix_fmt yuv422p $file | do_ffmpeg $file -y -f pgmyuv -i $raw_src -an -vcodec huffyuv -pix_fmt yuv422p $file | ||||
| # huffyuv decoding | # huffyuv decoding | ||||
| do_ffmpeg $raw_dst -y -i $file -f rawvideo -strict -1 -pix_fmt yuv420p $raw_dst | |||||
| do_ffmpeg $raw_dst -y -i $file -f rawvideo -strict -2 -pix_fmt yuv420p $raw_dst | |||||
| fi | fi | ||||
| ################################### | ################################### | ||||
| @@ -437,7 +437,7 @@ fi | |||||
| if [ -n "$do_ffv1" ] ; then | if [ -n "$do_ffv1" ] ; then | ||||
| # ffv1 encoding | # ffv1 encoding | ||||
| file=${outfile}ffv1.avi | file=${outfile}ffv1.avi | ||||
| do_ffmpeg $file -y -strict -1 -f pgmyuv -i $raw_src -an -vcodec ffv1 $file | |||||
| do_ffmpeg $file -y -strict -2 -f pgmyuv -i $raw_src -an -vcodec ffv1 $file | |||||
| # ffv1 decoding | # ffv1 decoding | ||||
| do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst | do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst | ||||
| @@ -447,14 +447,14 @@ fi | |||||
| if [ -n "$do_snow" ] ; then | if [ -n "$do_snow" ] ; then | ||||
| # snow encoding | # snow encoding | ||||
| file=${outfile}snow.avi | file=${outfile}snow.avi | ||||
| do_ffmpeg $file -y -strict -1 -f pgmyuv -i $raw_src -an -vcodec snow -qscale 2 $file | |||||
| do_ffmpeg $file -y -strict -2 -f pgmyuv -i $raw_src -an -vcodec snow -qscale 2 $file | |||||
| # snow decoding | # snow decoding | ||||
| do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst | do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst | ||||
| # snow encoding | # snow encoding | ||||
| file=${outfile}snow53.avi | file=${outfile}snow53.avi | ||||
| do_ffmpeg $file -y -strict -1 -f pgmyuv -i $raw_src -an -vcodec snow -pred 1 -qpel -4mv $file | |||||
| do_ffmpeg $file -y -strict -2 -f pgmyuv -i $raw_src -an -vcodec snow -pred 1 -qpel -4mv $file | |||||
| # snow decoding | # snow decoding | ||||
| do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst | do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst | ||||