mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
#defines for strict_std_compliance and split between inofficial extensions and non standarized things
Originally committed as revision 4205 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
c998bdd9a0
commit
9cd8179818
@ -954,6 +954,11 @@ 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.
|
||||||
|
@ -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){
|
}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=-1 / -strict -1 to use it anyway.\n");
|
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
|
||||||
|
Loading…
Reference in New Issue
Block a user