x264.c 可解析形如abc100x200.yuv的文件名,从文件名中取到长和宽

    //x264.c中的代码

    psz_filename = argv[optind++];

    psz = psz_filename + strlen(psz_filename) - 1; 
    while( psz > psz_filename && *psz != '.' )
 {
        psz--; 
 }

 //这儿psz代表后缀“.avi /.avs/.y4m”

    if( !strncasecmp( psz, ".avi", 4 ) || !strncasecmp( psz, ".avs", 4 ) ) 
        b_avis = 1; 

    if( !strncasecmp( psz, ".y4m", 4 ) )

        b_y4m = 1;


    if( !(b_avis || b_y4m) )

    {      
        if( optind > argc - 1 )
        {

           //psz这儿重新赋值了,又是完整的文件名了

            for( psz = psz_filename; *psz; psz++ )
            {
                if( *psz >= '0' && *psz <= '9'
                    && sscanf( psz, "%ux%u", &param->i_width, &param->i_height ) == 2

                {
                    if( param->i_log_level >= X264_LOG_INFO )
                        fprintf( stderr, "x264 [info]: file name gives %dx%d\n", param->i_width, param->i_height );
                    break;
                }
            }
        }
        else
        {
            sscanf( argv[optind++], "%ux%u", &param->i_width, &param->i_height );

        }
    }
       
    if( !(b_avis || b_y4m) && ( !param->i_width || !param->i_height ) )
    {
        fprintf( stderr, "x264 [error]: Rawyuv input requires a resolution.\n" );
        return -1;
    }

 

   

测试:

#include "stdafx.h"
#include <string.h>
#include <iostream.h>

int main(int argc, char* argv[])
{

  char *psz_filename;
 char *psz;

 int i_width;
 int i_height;

 psz_filename = "abc100x200def.yuv";

   for( psz = psz_filename; *psz; psz++ )
    {
        if( *psz >= '0' && *psz <= '9'
            && sscanf( psz, "%ux%u", &i_width, &i_height ) == 2 )
        {
            printf("\n\nx264 [info]: file name gives %dx%d\n\n", i_width, i_height );
            break;
        }
    }

 return 0;
}

 x264.c 可解析形如abc100x200.yuv的文件名,从文件名中取到长和宽 

   经测试,以下格式是可正确解析的:

  abc100x200.yuv

        100x200.yuv

   abc100x200def.yuv  

   以下格式是不正确的:

   100_200.yuv

   100xx200.yuv