Author Archive: Yumi Chan

Breif Description of nal_ref_idc Value in H.246 NALU

I am so sorry for my late update because of my study!
A quite update of myself: I have actually stopped working on H.264 and MP4 for some time but I hope my articles can help some of the beginners.

As in the article Introduction to H.264: (1) NAL Unit, Suji Mani asked what is the exact meaning of different values in nal_ref_idc. In fact, nal_ref_idc is base on “Start Code Value” and represents the priority of the current frame (i.e. how important of the frame – the higher the value, the more important the frame). Here is a list of nal_ref_idc values with the corresponding Start Code Type:
(more…)

Free CyberLink PowerDirector 12 LE Giveaway!!

CyberLink cooperates with SharewareOnSale to offer a PowerDirector 12 LE giveaway recently. For only 3 steps, you can get a free copy! Only 3 days left! A good news is that this is a 1-computer lifetime license for home or business use, which means you can install it in your company computers!

PowerDirector 12 LE Giveaway

Software Name: PowerDirector 12 LE
Giveaway Link:
www.cyberlink.com/stat/edms/Giveaway/SharewareOnSale/PDR12/index.jsp, or,
sharewareonsale.com/s/cyberlink-powerdirector-sale

The procedure of getting the offer is very similar for both links. I just take one of them as an example to show you how to get it.
(more…)

Obtain a list of process scheduling policy and priority

Normally, you can read the file /proc/[pid]/sched and get the related information. But since I am using a simplified one, the sched file is not presented. And I need to figure out another way to get it. I finally found there is a C library, <sched.h>, to do that. You can find the following declarations in the library.

struct sched_param {
    int sched_priority;
};

/* Set scheduling parameters for a process */
int sched_setparam(pid_t pid, const struct sched_param *param);

/* Retrieve scheduling parameters for a particular process */
int sched_getparam(pid_t pid, struct sched_param *param);

/* Set scheduling algorithm and/or parameters for a process */
int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);

/* Retrieve scheduling algorithm for a particular purpose */
int sched_getscheduler(pid_t pid);

In this case, we only need sched_getparam() to obtain scheduling priority and sched_getscheduler() to obtain scheduling policy.
(more…)

How to get the number / id of processes and threads?

Since I am working on Hi3518 with Linux, in order to reduce the use of computing power of the device, I used a simplified version of Linux. So, most of the applications are gone or are simplified without any option. I just summarized the methods I can use on Hi3518 and should be also work on some other Embedded Linux.

In fact, the applications in Linux usually obtain related information by reading the files in /proc. Under /proc, you can see a lot of folder, some of them are in numbers. Those folders named in numbers, which are process ids (PIDs) represent the processes run in the system. Thus, you can see the details of each process in each folder.

/proc/***/

where *** are the corresponding process pid.
(more…)

Difference: Program VS Process VS Thread

Here are the definitions and the explanations from Wikipedia.

Program:

A computer program, or just a program, is a sequence of instructions, written to perform a specified task with a computer.

http://en.wikipedia.org/wiki/Computer_program

Process:

A process is an instance of a computer program that is being executed. It contains the program code and its current activity. Depending on the operating system (OS), a process may be made up of multiple threads of execution that execute instructions concurrently.
(more…)

Embedded Linux: How to run a shell script at startup on Hisilicon’s Hi3518?

I am now developing on a Hisilicon’s chip, Hi3518E. The Linux kernal is built and compiled from the code of the SDK provided by Hisilicon. Thus, I think what I am going to say is also valid for other chips from Hisilicon.

I have studied Hi3518 for a few months. I now want to load some drives and programs at startup automatically so I spent some time to figure out how to do it on this chip. First of all, since I needed to run a set of commands, I wrote a Shell Script to organize all the commands together. Thus,I can run them all when I run the script once. Then, put the script into startup. I am not going to talk about how to write a Shell script as I don’t really know much about it.

0. Basic Knowledge

/etc/init.d/ : init.d is a folder for containing Unix/Linux Shell Scripts. If you enabled init.d in your kernal, the system will load and run the scripts placing here when it turns on. In common, all the init scripts of the services needed in a system are placed in this folder. So, you should find it on almost every Linux.
(more…)

Embedded Linux: 如何讓海思Hi3518開機後自動執行Shell Script?

我目前正於海思平台上進行開發,芯片是Hi3518E,Linux的內核是使用海思SDK所提供的代碼去編譯,所以我想以下所說的,大概跟其他海思芯片是差不多的吧(既然是同一家公司的,工程師做的東西應該都差不多才對吧),不過還是以Hi3518為準~

已經了解了Hi3518一段時間,目前需要它於開機啟動時自動插入一些驅動和程序,所以小小研究了一下要怎麼做。首先,因為有一系列的指令要做,所以就給它寫了個Shell Script(腳本),讓它可以一次過運行我所有的指令,之後再放入Startup。至於Shell Script要怎麼寫,我暫時就不多說了,因為我知的也不多~ 哈哈~

0. 基礎知識

/etc/init.d/ : init.d 是一個用來存放Unix/Linux Shell Script的文件夾,如果你的內核有開啟 init.d 的話,系統啟動時,會在登入前自行執行存放在這裡的腳本。一般系統上所有服務的啟動腳本都會放在這裡,一般是Linux系統的話,應該都會看到它的蹤影。
(more…)

Avoid writing 0x0A as 0x0D0A: Be careful of File Access Mode

When dealing with file I/O in C/C++, we should first open a file with fopen:
FILE * fopen ( const char * filename, const char * mode )
The parameter mode refers to “File Access Mode“. You have the following options (from cplusplus.com):

“r” read: Open file for input operations. The file must exist.
“w” write: Create an empty file for output operations. If a file with the same name already exists, its contents are discarded and the file is treated as a new empty file.
“a” append: Open file for output at the end of a file. Output operations always write data at the end of the file, expanding it. Repositioning operations (fseek, fsetpos, rewind) are ignored. The file is created if it does not exist.
“r+” read/update: Open a file for update (both for input and output). The file must exist.
“w+” write/update: Create an empty file and open it for update (both for input and output). If a file with the same name already exists its contents are discarded and the file is treated as a new empty file.
“a+” append/update: Open a file for update (both for input and output) with all output operations writing data at the end of the file. Repositioning operations (fseek, fsetpos, rewind) affects the next input operations, but output operations move the position back to the end of file. The file is created if it does not exist.

(more…)